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)
- Two anchor layouts on the same floor. Take
resplan-12439-floor-0and build two 5-receiver arrangements: the dispersed baseline (one anchor per peripheral room) and the topology-informed layout (3 anchors on the high-betweennessliving-0corridor hub + 2 in the large 47 m²bedroom-1). Everything else — transmitter, materials, occupancy sweep — is held identical. - 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.
- 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).
- 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 itsartefacts/prefix, but the session's machine-readablefigures[]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.