Executive summary
A Wi-Fi crowd counter learns "this pattern of signal variance means about this many people." This experiment asks the most basic generalisation question there is: does that learned relationship carry over to a different floorplan? We ray-trace the identical occupancy protocol across a set of real apartment layouts from the public ResPlan dataset and measure how badly a counter fit on one apartment mispredicts on an apartment it has never seen.
The honest headline, in three parts:
- Within any one floor, the physics is universal. Signal variance (CV) rises with occupancy on every apartment × band we tested (12/12 cells, Spearman rho >= +0.83). Nothing floor-specific breaks the basic mechanism.
- Across floors, the relationship drifts — a lot, and unevenly. A counter fit on five apartments and tested on the sixth inflates its count error by roughly x3.8 (2.4 GHz) and x7.7 (5.0 GHz) on the original six-floor pilot. That supports the thesis argument for per-environment (BLE) recalibration. But this number is fragile: it comes from N=6 floors, a single random seed, and — as a later audit found — a comparator bug that flattered it. When the baseline is fixed and the confidence interval is computed over floors, the drift ratio is a pooled x3.37 with a 95% CI of [1.04, 9.85] — an interval so wide it does not clear the pre-declared 1.5x gate. Per-floor inflation ranges from 0.70x (no drift at all) to 49.8x.
- The powered confirmation was never run. A scale-out campaign was designed to stage >= 40 floors (the power calculation says that is what the CI needs). Its frontmatter claims 110 floors are staged and powered — but the session it points to does not exist in S3 (a phantom pointer), and the only real scale-out session is a 6-floor pilot. So the "40-floor powered drift" result does not exist yet.
The one result that is robust here is the companion feature-type experiment: when furniture is rearranged on a fixed floor, fingerprint estimators (the spatial-map kind) break badly (+7 people of error) while kinematic estimators (motion-speed / variance features) barely move (+0.3 people) — and this ordering holds in 9 out of 9 seeds. Everything below is simulated; a real Wi-Fi/BLE capture (IP-106) remains the standing gate before any deployment claim.
The problem, in plain words
Imagine you learn to judge how crowded a room is by how "noisy" the echo sounds. You get good at it in your own living room. Now walk into a stranger's apartment — different walls, different furniture, a different shape. Your ear still hears "more people = more noise," but the exact mapping ("this much noise = five people") is now wrong, because the echoes bounce differently in a different room. That is exactly the disease of Wi-Fi crowd counting: the model learns a mapping that is partly about the people and partly about the room, and when you change the room, the room-part of the mapping silently poisons the count.
This matters because the whole promise of Wi-Fi sensing is that it is cheap and already installed everywhere. If every new apartment needs its own hand-calibration — someone standing in the room with a known number of people — then the technology does not scale. Cross-environment generalisation is the single biggest open problem in the field (wang2026_2758 ↗; chen2023_5cbd ↗). The classic real-world evidence for it is CrossSense, which showed a model trained at one site collapses at another (zhang2018_138d ↗).
There are two ways out, and this experiment speaks to both. Option A — accept the drift and re-calibrate per environment (the thesis's periodic-BLE-recalibration argument). Option B — find a feature that does not drift. The feature-type sub-experiment is a direct test of Option B.
What we are trying to prove
- Primary hypothesis (falsifiable): the CV-vs-occupancy slope varies materially across real floorplans, so a counter fit on one geometry mispredicts on another — measured as a leave-one-floor-out (LOFO) count-error inflation that exceeds 1.5x the within-floor baseline. If the inflation is near 1.0x, a geometry-robust density proxy exists and the recalibration argument weakens.
- What a null means: if the normalised CV->count relationship were floor-invariant, the whole "you must recalibrate per site" pillar of the thesis would lose its in-silico support — and that would actually be better news for deployment (a universal proxy). We do not get that null; we get drift, but drift whose magnitude is not yet pinned down.
- Feature-type hypothesis (H6, feature-type-not-modality): on a fixed floor whose furniture is rearranged, both fingerprint estimators (CSI-amplitude map, BLE-RSSI map) break while a kinematic estimator (Doppler fading CV + temporal amplitude variance) stays flat — a kinematic/fingerprint degradation ratio < 0.5. A modality split (both CSI families together vs BLE) or a uniform collapse would refute H6 in-silico.
How the experiment works (plain method)
Three campaigns, one question at increasing resolution:
- c-csi-cross-geometry-resplan (the design-of-record, 72 runs). Six ResPlan apartments, each staged with one Tx + 3 Rx link. Identical protocol per floor:
n_agents in {0,2,4,6,8,12}, 48 random body placements per level, bands {2.4, 5.0} GHz. Reduce per-floor CV(N), then fit a CV->count map on five floors and test on the held-out sixth (LOFO). The spread across floors is the drift metric. - c-csi-cross-geometry-scaleout (the powering attempt). Same idea, but designed to run >= 40 floors x 3 seeds so the drift ratio carries a real confidence interval and geometry-variance can be separated from seed-noise. Reality: only a 6-floor, 3-seed pilot (90 runs) actually executed and sealed.
- c-feature-type-transfer (the sharper follow-up, 36 runs). One fixed floor; only the furniture moves (4 states, displacement 0 -> 1.05 m). Fit three estimator families on the undisturbed state, test on each rearranged state, and see which family survives — fingerprints vs kinematics, held paired by re-using the identical walk seed. Kinematic features have a physical motion model behind them (wang2015_48cf ↗), which is why they are the candidate drift-robust channel.
What we've found so far (honest, across campaigns)
Campaign 1 — c-csi-cross-geometry-resplan (REAL, 72 runs, all criteria sealed MET).
| Criterion | Result |
|---|---|
| Scene staging + artefacts | 72/72 runs gate-passed; no NaN/Inf |
| Per-floor CV monotonicity | rho >= +0.83 on all 12 (floor, band) cells; 10/12 >= +0.94 |
| Cross-geometry drift (LOFO) | within-floor MAE 0.019 -> LOFO 0.073 = x3.81 (2.4 GHz); 0.017 -> 0.134 = x7.74 (5.0 GHz) |
Scope stamped by the supervisor: in-silico, ResPlan, N=6 floors, seed 0, pooled linear CV~N fit. The critic caught a mis-attributed Wi-CaL comparison pre-seal; the corrected statement is that ratios we derived from Wi-CaL's published MAEs span ~x1.2 (seminar) to ~x2.3 (meeting) (choi2022_17c2 ↗) — the same direction as ours, but a different quantity (Wi-CaL's drift is temporal/environmental in one geometry; ours is purely geometric). Neither magnitude validates the other. No figures were registered to this session (the figure manifest is empty) — a provenance gap flagged below.
Campaign 2 — c-csi-cross-geometry-scaleout (the powering attempt — PARTIAL + a phantom pointer).
This campaign's job was to turn the fragile N=6 number into a powered one. It did not do that. What actually exists:
- The frontmatter declares
latest_session: 01KX5BYANG...over 110 staged floors, "powered Phase-2". That session does not exist — fetching it returnsNoSuchKey, and it is absent from the session list. The session list is otherwise a graveyard of 0-run and 1-run "finished" sessions. - The only substantive session is the Phase-1 pilot (
01KWYBEJQK..., 90 runs), and even it staged 6 of 10 planned floors (four were missing from PostGIS). Its verdict, honestly booked:
| Criterion | Result |
|---|---|
| C1 — powered inflation CI lower bound > 1.5x | FAIL — pooled x3.37, floor-clustered 95% CI [1.04, 9.85]; per-floor ratios span 0.70x -> 49.8x; under-powered (n0 ~ 40 floors needed) |
| C2 — geometry dominates seed | PASS, decisively — sigma^2_floor 0.0109 vs sigma^2_seed 0.000165 (66x); between-floor SD 0.105 vs between-seed 0.0116 (9x) |
| C3 — honest LOFO baseline | PASS — uses leave-one-occupancy-out within-floor (0.026) as the denominator, fixing the in-sample-residual bug that inflated Campaign 1's headline |
The uncomfortable synthesis: Campaign 1's clean x3.8 / x7.7 rests partly on the very comparator bug C3 fixed. With the honest baseline and a floor-clustered CI, the drift ratio is still centrally large (x3.37) and geometry decisively out-varies seed — but the powered "lower bound clears 1.5x" claim the thesis wants is not yet earned, and the run that would earn it was never executed.
Campaign 3 — c-feature-type-transfer (REAL, 36 runs, 9/9 replication — the strong result).
Rearrange the furniture on one fixed floor and watch three estimator families:
| Feature family | Count-error degradation (control -> 1.05 m) |
|---|---|
csi-fingerprint (amplitude map) |
+7.0 persons median (range 4.3–20.8) — always breaks |
ble-fingerprint (RSSI map) |
+4.7 persons median (range 1.5–10.0) — always degrades |
csi-kinematic (Doppler CV + temporal variance) |
+0.34 persons median (range 0.15–0.58) — sub-person in every pair |
Kinematic/fingerprint degradation ratio: median 0.076, worst 0.120 — every one of the 9 seed pairs is at least 4x inside the 0.5 gate. This is a feature-type split, not a modality split: it is not "CSI beats BLE," it is "kinematics beat fingerprints regardless of modality." H6 is supported in-silico with seed replication. This reconciles a real contradiction in the literature — papers reporting RF schemes do not generalise across rooms (zhang2018_138d ↗) vs papers reporting speed-features do (wang2015_48cf ↗; jiang2018_77f6 ↗) — as both correct, about different feature types. Caveat: the critic pass was deliberately skipped (this session replicated an already-audited design), and it is a self-authored crowd + synthetic CSI/BLE.
How to read the figures
Only one campaign registered a figure to its session manifest — the honest reading of the whole card is partly about that.
fig_seed_sweep(c-feature-type-transfer) — the three-family degradation across the 9 seed pairs. Read it for the ordering and its stability, not the exact heights: the kinematic curve (green) sits near the floor in every pair while both fingerprint curves (warm) climb. The story is the gap, and the fact that the gap never closes across seeds.- The two drift campaigns registered no figures. Campaign 1's manifest is empty; Campaign 2's pilot requested
csi_cross_geometrysmall-multiples + aseed_tracepanel but they are not in the session figure manifest. Treat the drift numbers as table-only until a figure with the floor-clustered CI is actually persisted — the missing uncertainty panel is precisely what hid the fragility the first time.
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
- wang2026_2758 ↗ — frames cross-environment generalisation as the field's central open problem.
- chen2023_5cbd ↗ — the domain-shift / adaptation taxonomy the ML reviewer argues from.
- zhang2018_138d ↗ — the classic real-world evidence that models collapse across sites.
- jiang2018_77f6 ↗ — environment-independent features; one pole of the contradiction H6 reconciles.
- wang2015_48cf ↗ — CARM; the physical model behind the drift-robust kinematic features.
- choi2022_17c2 ↗ — the real within-/leave-one-session-out drift gap this experiment reproduces geometrically.
- zou2018_1590 ↗ — real multi-zone CSI occupancy; grounds the geometry-dependence premise.
- khan2023_b7c5 ↗ — transfer learning to cut per-site recalibration; the practitioner's escape hatch.
- demrozi2021_bf55 ↗ — cheap BLE anchor, the recalibration modality.
- brunello2025_d781 ↗ — real drift is often worse than sims; the red-team's warning.
- huang2025_060d ↗ — public real-CSI anchor for the cross-environment cross-check.
- zhang2026_ccac ↗, guarino2026_e72c ↗ — the reproducibility bar the SWE voice invokes.
- peck2008_2ba0 — design / CI discipline for the unit-of-replication and power argument.