BLE anchor placement: does topology-informed placement recover graded count?
Current assessment (2026-09-15)
The eight-seed comparison did not reproduce the pilot-sized hub benefit: paired slope difference −0.126 dB/person, 95% interval [−0.412, +0.113]. This does not prove both placements equivalent.
The powered follow-up supersedes the three-seed pilot. Its interval includes zero and excludes the pilot-sized difference; it neither establishes a smaller benefit nor proves zero effect. Presence-versus-graded-count conclusions are conditional on the simulated scene and observation model.
Next evidence needed: Carry placement as a nuisance factor in independent headcount validation. Do not describe the hub arrangement as an established cure for BLE saturation.
Basis: Thesis Narrative, the September 10 synthesis, and the September 15 register review. See the review record for evidence sources and outstanding checks.
Earlier protocol and dated results
The methods and observations below retain their original scope. Read their readiness statements and proposed next steps as historical. The current assessment above records what has changed; frozen thresholds have not been retrospectively revised.
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.
Key references
- demrozi2021 ↗ — BLE occupancy/counting, the second modality's real-world basis and the saturation intuition.
- longo2019_b72f ↗ — 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_97e0 ↗ — deployment context for presence-level occupancy in buildings.
- koksal2025_426c ↗ — real BLE-beacon occupancy deployment.
- peck2008 — the pooling-vs-replication and power basis for the statistician's audit.
- zhang2026_ccac ↗, guarino2026 ↗ — reproducibility bar the SWE voice invokes.
- huang2025_060d ↗ — a public real-CSI anchor for the red-team's cross-check demand.
- zhang2024_1d32 ↗, simoni2023 ↗ — privacy-preserving occupancy for the responsible-sensing voice.