Environment

Coupled `walk-notebook (from_floor) → sionna-csi-runner` on `resplan-12439-floor-0` (multiroom); cross-environment arms.

Executive summary

A Wi-Fi crowd-counting model is a relative density meter: it reads "more channel wobble ≈ more people," but the exact conversion depends on the room's walls and furniture, so it does not transfer to a new floor — it drifts. A Bluetooth (BLE) anchor is the opposite: coarse and noisy, but absolute and geometry-robust. This experiment asks whether periodically re-scaling the drifting CSI count with the cheap BLE anchor bounds the cross-environment drift that sinks CSI-only.

The headline, stated honestly. In simulation the mechanism shape appears: a CSI→count map calibrated on one floor and applied to two others drifts to ~3.5-person error, and periodic BLE recalibration cuts that to ~1.0 (the "70.7%" figure). But the supervisor itself marked this criterion FALSE — the number is confounded two ways: (a) leakage, the BLE "anchor" was fit to the target floor's own ground truth, so the fused path secretly consumed the answer; and (b) occupancy extrapolation, the source floor was busier (≤10 people) than the targets (≤6), so a linear map fit high and applied low inflates for reasons that have nothing to do with geometry. When the leakage is removed (a later session re-fits CSI using the BLE device-count as the only label), the recalibration gives ~0 gain — because the weak link is the CSI feature, not the calibration. The one clean architectural win is the staleness-switch (trust fresh BLE, lean on CSI as the anchor ages), which degrades gracefully instead of failing in one regime. And a final single-floor session shows CSI is under-featured, not hopeless: adding Doppler micro-fading lifts its R² from 0.09 to 0.36 (though a neural feature overfits to R²=−0.43 at this data scale). All of it is simulated, with zero rendered figures and a self-authored BLE noise model — this is a pilot direction, not a positive result. The standing gate is a real Wi-Fi/BLE capture (IP-106).

The problem, in plain words

Imagine a bathroom scale you calibrate while standing on thick carpet. Move it onto tile and it reads wrong — your weight did not change, its environment did. Wi-Fi crowd counting has the same disease: the model learns "this much signal variation ≈ 5 people," but that mapping is glued to where the walls and furniture sit. Rebuild the room — or just move to a different room — and the count silently drifts. Prior work in this project measured that drift directly: a CSI map carried to a new floor can inflate the count by roughly ×3.8–×7.7. Device-free CSI counting is a real and useful capability (zou2018 ; zhou2020 ), but its cross-environment transfer is a known, hard problem (chen2023).

The proposed fix is a second, cheaper radio that does not drift the same way. BLE beacons already exist in most buildings and give a coarse, absolute headcount (demrozi2021 ). The idea: let CSI supply the fast, fine-grained shape of the occupancy curve, and use the BLE anchor to periodically pin down the scale. If that works, you get the resolution of Wi-Fi with the portability of Bluetooth.

What we are trying to prove

  • Hypothesis (falsifiable): a CSI→count map, transferred untouched to a new floor, drifts; periodically re-scaling it with the BLE anchor bounds that drift, and the fused estimate has materially lower transfer error than CSI-only. If the recalibration does not lower error once the BLE anchor is made independent of ground truth, the mechanism fails on its own premise.
  • What a null means: if BLE recalibration cannot rescue the transferred CSI count, either the BLE anchor is too coarse/saturated to correct at these crowd sizes, or the CSI feature itself carries too little count information for any re-scaling to help. The campaign found the second null — a genuinely informative negative that redirects the effort from "calibrate better" to "extract a better CSI feature."
  • The honest deliverable is the mechanism shape, not a recovery rate. With a self-authored crowd, synthetic CSI, and a self-authored Gaussian BLE noise, any accuracy number is partly circular against the noise model. The defensible output is architectural: is periodic absolute-anchor recalibration the right way to bound relative-sensor drift?

How the experiment works (plain method)

  1. Couple the two simulators. walk-notebook animates a crowd on a real ResPlan floor; sionna-csi-runner ray-traces one channel per frame with ble.enabled and doppler.enabled, yielding — from the same solved channel — a temporal CSI tensor and a co-registered BLE-RSSI stream (hoydis2023).
  2. Fan out exp-csi-crowd over 3 floors × {2.4, 5.0 GHz}: resplan-12439 (furnished, 16 seats, the busy calibration source) and resplan-1374, resplan-16157 (through-traffic targets).
  3. Build the estimators (fusion_count): ground-truth occupancy(t) from the trajectory; a CSI temporal feature (intra-frame Doppler-fading CV over links); a BLE aggregate-attenuation anchor; and three counts — CSI-only (calibrated once on the source), BLE-anchored, and the fused (CSI shape + periodic BLE re-scale).
  4. Transfer test: apply the source CSI map to the targets, measure how far it drifts, and how much periodic BLE recalibration pulls it back.
  5. Later sessions stress the design: a staleness-switch fusion (weight = exp(-staleness/tau)) across BLE-cadence, and a Doppler-on / learned-feature floor-lift asking whether CSI is weak or merely under-featured.

What we've found so far (honest, across six sessions)

All six sessions were synthesis-only passesbudget_used is 0 cpu-hours / 0 tokens on every one, i.e. they re-analysed runs computed elsewhere and rendered no figures (figures: [] throughout). Read the numbers below as point estimates off a small, self-authored corpus.

Session 1 — the headline drift test (6 runs), criterion marked FALSE. A CSI→count map from resplan-12439 applied to the targets gives ~3.5-person MAE; periodic BLE recalibration cuts it to ~1.0 (1374: 3.38→1.13; 16157: 3.61→0.92; bands within 0.04, "70.7%"). The supervisor rejected this as a clean recovery rate for two reasons: (a) leakage — the BLE "anchor" is an affine of RSSI attenuation fit to the same run's ground truth (per-person slope −14.3 dB on the source vs −73.0 on 1374, a 5× swing), so the fused path indirectly ate target-floor truth; (b) confound — source occ ≤10 vs targets occ ≤6, so a linear map fit high and applied low inflates from extrapolation, not geometry. Within-floor, BLE recal helps only the busy furnished floor (12439: 3.56→2.23); on the low-count floors the change (1.14→1.12, 0.93→0.92) is single-seed noise. Single seed throughout.

Session 2 — remove the leakage, and the gain vanishes (9 runs). Re-fit the CSI map on the target using the BLE device-count as the only label (no ground truth): cold-transfer 1.50 ≈ BLE-adapted 1.51 persons — ~0 gain. Conclusion: calibration is not the bottleneck; the CSI feature is. The one architectural win is the staleness-switch (w = exp(-staleness/tau), tau ≈ 16 s): it tracks the lower envelope of {BLE-held, CSI} across a 1–80 s cadence — ≈ BLE when fresh (0.73–1.0 dense), falling back to the CSI floor (~1.6) when the anchor goes stale at 80 s (vs held-BLE 2.8) — and beats the naive constant blend everywhere. It does not strictly dominate; it stays within ~0.1 person of the best modality at each cadence. 3 seeds, 2 target floors, low crowd sizes, tau hand-tuned.

Session 3 (latest) — is CSI weak or under-featured? (3 runs, one floor). On a dense 10-Rx layout at higher occupancy (→18), turning Doppler micro-fading on and using a richer per-link intra-frame fading feature lifts CSI→count from R²=0.09 (quasi-static, hand amplitude-CV) to R²=0.20 (hand-CV on Doppler) to R²=0.36, nMAE 0.19 (Doppler-rich linear ridge) — ~4× the count variance explained. The neural feature overfits to R²=−0.43 (~380 train samples, 30 features). So CSI was under-featured, not irredeemably weak; the right complexity now is a linear rich-feature model, and a learned model is a data-scaling lever. This session's supervisor stamped "POSITIVE," but it is a single floor, 3 seeds, 0 figures, on a pivoted sub-question — exactly the pattern the audit warns against reading as a result.

The through-line. The architecture is defensible (a staleness-weighted switch between an intermittent absolute anchor and a continuous relative one); the magnitude is not established. The real-data cross-environment counterpart in this project recovers ~42% of the lost accuracy — the synthetic 70.7% overshoot is precisely the sim-to-real gap IP-106 exists to close (vishwakarma2021 ).

Review panel

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

Key references

  • zou2018 , zhou2020 — the device-free CSI counting capability this fusion builds on.
  • chen2023, wang2026, khan2023 — the cross-environment drift/transfer problem the recalibration attacks.
  • demrozi2021 , longo2019 — the BLE anchor and Wi-Fi/BLE co-capture, the second modality's real-world basis.
  • guo2020 — the state-space/complementary-fusion framing behind the staleness-switch.
  • yang2026, zhevnenko2026 — the Doppler-feature mechanism and the reality of sparse-link CSI counting.
  • hoydis2023 — the ray-tracer that produces the coupled CSI/BLE.
  • meneghello2023 , huang2025, vishwakarma2021 — the real-CSI anchors and sim-to-real bridge the red-team demands.
  • zhang2026, guarino2026 — the reproducibility bar the SWE and statistician invoke.
  • rusca2024 — the responsible-sensing basis for the aggregate-only BLE spec.

Campaigns & sessions

Campaign Session State Runs Started Report
c-csi-ble-fusion-powered planned
c-csi-ble-fusion planned

Provenance

Data origin
simulated
GIS experiment
csi-link-resplan-12439-multiroom

Data types

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