c-ble-csi-coregistration — session 01KVX0WCD5SXYQDSTJZ77Q1ANT (2026-06-24)
Framing discipline (carried from the brief): this is in-silico motivation for ble-periodic-calibration, not a hypothesis test. The BLE event noise is a self-authored Gaussian (σ = ble.noise_db); any accuracy headline against it would be circular. Deliverable = an honest sensitivity table. 30 runs on the static through-wall rig (seated-crowd proxy): main grid N∈{0,2,4,6,8,12} × seed∈{0,1,2} @ noise 2.0 dB (18) + noise arm {4.0,6.0 dB} × N∈{0,6,12} × seed∈{0,1} (12).
Verdict: the enabling premise is partially met — presence, not graded count. In the static/seated regime where the temporal CSI feature provably collapses (c-csi-crowd-temporal, seated CV ≈ 1e-6), the co-registered BLE/RSSI anchor robustly separates an occupied room from an empty one, but its blockage response saturates after the first occupants and does not scale monotonically with headcount in this multiroom layout.
Criterion 1 — both channels from one CFR — ✅
All 30 runs emitted links.parquet/csi.hdf5 and ble_links.parquet (5 Rx links × 24 placement events) from the same solved CFR with ble.enabled: true; every file read with no NaN/Inf. BLE/CSI co-registration by construction confirmed.
Criterion 2 — pooled mean RSSI monotone decreasing, ρ ≤ −0.6 per seed — ❌ (not uniformly)
Baseline-normalised (per-link empty-room subtracted, to remove the ≈4 dB cross-link path-loss offset) Spearman ρ(N, ΔRSSI) per seed @ noise 2.0: seed0 = −0.83, seed1 = −0.66, seed2 = −0.09. Two of three seeds meet ≤ −0.6; seed2 is broken by a single low-N placement realization (a body landing in a strong-blockage spot at N=2). More importantly, the shape is not a clean graded monotone decrease — it is an empty→occupied step (ΔRSSI ≈ −1 to −2 dB) followed by a saturated plateau (N=6 and N=12 ΔRSSI within ~0.2 dB). So the literal criterion is not met; the anchor does not encode graded count here.
Criterion 3 — resolvable-ΔN sensitivity table + noise degradation — ✅ (deliverable produced; honest reading)
Effect size d = |Δ mean ΔRSSI| / SE after event-averaging (M ≈ 120 events/level). The table cleanly separates two regimes:
| comparison | d @ noise 2.0 | reading |
|---|---|---|
| empty → occupied (0→any N) | 2.32 – 3.70 | presence strongly resolvable |
| within-occupied, ΔN=2 (2→4, 4→6, 6→8) | 0.43 – 0.77 | graded count not resolvable |
| within-occupied, ΔN=4–6 | 0.19 – 1.02 | marginal at best |
Noise degradation of the presence step: d(empty→first) = 2.32 @ 2.0 dB → 1.81 @ 4.0 dB → 1.54 @ 6.0 dB — presence stays resolvable (d>1) even at 6 dB event noise; the min graded resolvable ΔN coarsens from the 0→2 presence step (ΔN=2) to ΔN=6 as noise grows. The ~6–12 dB pooled per-event σ (right figure panel) is dominated by cross-link + placement spread, not the self-authored measurement noise, and is the budget the occupancy term must clear.
Tie-back (per the diary guardrails)
- This does establish the enabling premise in the honest sense the talk needs: where temporal CSI starves (seated regime), a co-registered BLE anchor still tells you the room is occupied — robustly and noise-tolerantly. That is the in-silico motivation for a periodic BLE anchor.
- It does not show graded headcount from the anchor in this geometry. This lands between the brief's interpretation #1 (informative) and #2 (needs link-geometry rework): informative for presence, needs anchor-placement-near-occupant-zones / per-link calibration before it could support finer counting.
- ble-ground-truth-sufficiency (H1) stays supported on literature weight — NOT bumped on this synthetic evidence (the noise is self-authored; the real bar is multi-week hardware penetration-ratio capture on ≥2 sites). ble-periodic-calibration (H2) stays plausible. The "✓ done in sim" badge for Claim 2 should read "enabling premise (presence) shown in sim; graded counting + H1 penetration ratio remain the field bar."
Reduction notebook monad_knowledge/notebooks/python/csi_ble_coregistration.py (new, this session — per-link baseline-normalised); artefacts fig_csi_ble_coregistration.png + csi_ble_coregistration.metrics.json under the session prefix. 30 source runs attached.