Environment

`resplan-12439-floor-0` with the topology-informed 5-Rx layout (`csi-link-resplan-12439-topo-anchors`) vs the dispersed multiroom layout; ble.enabled scalar floor.

Executive summary

If you put a Bluetooth radio in a room and watch its signal weaken as bodies block the line between transmitter and receiver, can you tell how many people are there — 2 vs 4 vs 6 — or only whether the room is occupied at all? An earlier study of ours found the second thing: a BLE anchor cleanly separates empty from occupied, but the signal flattens out ("saturates") once a first body lands, so it cannot grade the count. That study dispersed one anchor per peripheral room. This experiment asks the natural follow-up: does moving the anchors to the room the crowd actually flows through — the high-traffic corridor hub — recover a graded count?

The headline, stated honestly. A first pilot (3 random seeds) said yes, partially — the hub placement produced a steady downward slope of −0.48 dB per person while the dispersed placement stayed flat. But that pilot was too small to trust, so we re-ran the exact design at 8 seeds (96 simulations) with a pre-registered statistical test. The powered result refutes the pilot: the difference between the two placements is −0.126 dB/person with a 95% confidence interval of [−0.412, +0.113] — it straddles zero, and the pilot's −0.498 is below the powered interval's lower bound. Both placements carry a weak, seed-noisy negative response; neither delivers fine graded counting (0 of 20 count-step tests survive multiple-comparison correction). The durable finding is narrow and useful: a BLE anchor is a presence sensor, and placement buys response consistency, not a headcount. All of it is simulated — a real Wi-Fi/BLE capture (IP-106) is the standing gate before any deployment claim.

The problem, in plain words

Imagine a doorway with a light beam across it. One person breaks the beam and it goes dark; a second and third person behind them do not make it "more dark." The beam is a presence detector, not a counter. A single Bluetooth link behaves the same way: the first body between transmitter and receiver drops the received signal strength (RSSI) a lot, but each additional body adds less and less — the link saturates. That is why a BLE anchor is great at "is anyone here?" and poor at "how many?" (demrozi2021 ).

There is a plausible escape hatch. If you place several anchors where people cluster and transit — a busy corridor everyone walks through — then successive bodies keep blocking different short links, and the aggregate signal across all links might keep sliding down instead of flattening. Deciding which room that is, is a placement question, and placement provably changes how much a radio sensor network can see (zhen2022 ; afghantoloee2021 ). Our floor's rooms form a hub-and-spoke graph: one 135 m² corridor connects to every other room and has by far the highest betweenness (a graph measure of how many paths run through it). The bet was: concentrate anchors on that hub, and grading returns.

What we are trying to prove

  • Hypothesis (falsifiable): concentrating BLE anchors on the high-betweenness hub room (plus the largest occupant room) produces a steeper, monotone occupancy→RSSI slope than dispersing them one-per-room — steep enough that the per-placement slope difference has a confidence interval excluding zero and exceeding a practically meaningful 0.30 dB/person. If the interval includes zero, the placement does not buy graded count and the hypothesis fails.
  • What a null means: if hub placement does not beat dispersed placement at power, the saturation is intrinsic to single-transmitter narrowband blockage at this density — it is a property of the physics, not a fixable artefact of where you mounted the anchors. Then BLE's honest job stays "presence," the graded count must come from the CSI feature or multiple transmitters, and the IP-106 hardware plan should not budget for graded BLE counting off placement alone.
  • Discipline carried throughout: the BLE event-noise is a self-authored Gaussian, so any accuracy headline against it is circular. The only honest deliverable is a placement comparison of the graded slope, and the real defeater lives in hardware.

How the experiment works (plain method)

  1. Two anchor layouts on the same floor. Take resplan-12439-floor-0 and build two 5-receiver arrangements: the dispersed baseline (one anchor per peripheral room) and the topology-informed layout (3 anchors on the high-betweenness living-0 corridor hub + 2 in the large 47 m² bedroom-1). Everything else — transmitter, materials, occupancy sweep — is held identical.
  2. Sweep occupancy. Simulate N ∈ {0, 2, 4, 6, 8, 12} people, ray-traced through the scene, with a co-registered BLE link solved from the same geometry so CSI and BLE see the same bodies.
  3. Measure the slope. For each seed, baseline-normalise each link's RSSI against the empty room, then fit the slope of aggregate ΔRSSI vs occupied N (dB per person). The unit of replication is the seed — the random crowd placement — not the thousands of pooled frame×link events (pooling those would fake a huge sample size).
  4. Two rounds. A pilot at n=3 seeds (18 runs), then — because n=3 cannot exclude a null — a powered re-run at n=8 seeds (96 runs) with a pre-registered seed-block bootstrap CI, an exact paired sign test, and a Benjamini–Hochberg correction over the 20-cell within-occupied count grid.

What we've found so far (honest, across two rounds)

The two rounds disagree, and the powered one wins. That reversal is the result.

Quantity Pilot (n=3, c-ble-anchor-placement) Powered (n=8, c-ble-graded-count-powered)
Topology slope (dB/person) −0.48 (monotone) mean −0.353 (8/8 seeds negative)
Dispersed slope (dB/person) +0.08 (flat — "saturates") mean −0.227 (7/8 negative — does not saturate)
Paired (topology − dispersed) diff −0.56 (descriptive) −0.126, 95% CI [−0.412, +0.113], p=0.461, d=−0.32
Fine graded grid (ΔN=2) topology d=0.31 (unresolved) 0/20 cells survive BH-FDR; ΔN=2 topology 0/3
Verdict PARTIAL RECOVERY REFUTED at power
  • The pilot's mechanism story was itself wrong. The pilot claimed dispersed placement saturates flat (+0.08 dB/person) while topology alone is monotone. At n=8, both placements carry a negative occupancy response — dispersed does not saturate; it is just seed-noisy. The pilot's n=3 happened to catch a favourable dispersed subset.
  • The between-placement gap is within seed noise. The eight per-seed differences straddle zero: −0.92, −0.39, −0.18, −0.15, −0.02, +0.08, +0.24, +0.33. The pilot's −0.498 lies below the powered CI's lower bound (−0.412) — it is CI-excluded, not merely unconfirmed.
  • What survives is narrow and honest. Hub placement gives a more consistently negative fitted slope (8/8 seeds vs 7/8), a descriptive response-consistency observation — not a confirmed graded count. The observed effect (~0.13 dB/person) is genuinely small: it would need ~75 seeds to resolve and is below the 0.30 dB/person practical threshold regardless.
  • This is a powered negative for the pilot-sized effect, not proof the true difference is zero — the CI still admits differences out to −0.412 dB/person. What it does rule out is the claim the pilot shipped.

How to read the figures

  • fig_csi_ble_anchor_placement (pilot session, registered) — a two-panel comparison: left, aggregate baseline-normalised ΔRSSI vs N for dispersed (flat/bouncing) vs topology (sliding down); right, the resolvable-ΔN effect-size view. Read this as the pilot's story — and read it knowing the powered round overturned it. n=3, so it shows a favourable draw, not a stable effect.
  • seed_trace, paired_diff, perm_null (powered session) — the honest trio: every seed's RSSI-vs-N trace per layout (seed_trace), the per-seed (dispersed − hub) slope-difference dots with the CI on the difference straddling zero (paired_diff), and the paired-permutation null with the tiny observed statistic marked inside the bulk (perm_null). Provenance caveat: these three are described in the powered session's synthesis and live under its artefacts/ prefix, but the session's machine-readable figures[] manifest is empty — a registration gap the artifact audit should close before the figures are cited elsewhere.

Review panel

Each voice is a prepared expert with a one-line stance and the literature it argues from. Verdicts are about this experiment and its current evidence, not the idea in the abstract.

Key references

  • demrozi2021 — BLE occupancy/counting, the second modality's real-world basis and the saturation intuition.
  • longo2019 — WiFi+BLE occupancy estimation; grounds presence-level capability.
  • rampa2022 — multi-body RF shadowing physics; why link attenuation is sub-additive.
  • zhen2022 — adaptive beacon placement gains, the topology-placement premise.
  • afghantoloee2021 — indoor sensor-deployment optimization; placement changes what the network sees.
  • farsi2023 — coverage/connectivity framing for the OR voice.
  • chen2018 — deployment context for presence-level occupancy in buildings.
  • koksal2025 — real BLE-beacon occupancy deployment.
  • peck2008 — the pooling-vs-replication and power basis for the statistician's audit.
  • zhang2026, guarino2026 — reproducibility bar the SWE voice invokes.
  • huang2025 — a public real-CSI anchor for the red-team's cross-check demand.
  • zhang2024, simoni2023 — privacy-preserving occupancy for the responsible-sensing voice.

Campaigns & sessions

Campaign Session State Runs Started Report
c-ble-anchor-placement planned
c-ble-graded-count-powered planned

Provenance

Data origin
simulated
GIS experiment
csi-link-resplan-12439-topo-anchors

Data types

  • csi-amplitude
  • ble-rssi
  • per-link-summary