Question
band-5ghz-occupancy-discriminability is
strength: supportedon one real platform — our zero-shot re-analysis of WiMANS raw CSI (Intel 5300): ρ(moving-count, CV) +0.71 at 5 GHz vs +0.28 at 2.4 GHz, presence AUC 0.991 vs 0.879. The ray-traced programme (c-csi-band-calibration) reported the two bands tracking identically. The hypothesis note names the outstanding gate explicitly: "confirm on a second real dual-band dataset and on the AX210/Pi5 fleet (which captures both bands), checking the gap holds across hardware." This campaign is that gate.
Framing discipline. This is not "run the fleet on two bands and see." A band comparison is confounded by default, and the value of this campaign is almost entirely in the controls listed below. If they are not held, the resulting number is uninterpretable and should not be produced.
Why this measurement can be cleaner than the published one
Two nodes on one floor observe both bands simultaneously, on the same realisation of the room. Every public dual-band set measures the bands sequentially, so between-session channel drift sits inside their band contrast. Paired simultaneous observation removes it.
More importantly — and this is the part that makes the current empty office an asset rather than an obstacle — in an occupied building 2.4 GHz and 5 GHz carry different ambient traffic loads, so their CSI sampling rates differ, so a naive band comparison is partly a rate comparison. That is exactly the axis EXP-007 Packet-Rate Floor for Motion Sensing isolates and EXP-008 Active Injection vs Passive Sniffing warns is not captured by mean rate alone. With the room empty there is no ambient traffic on either band (measured: 6.2 frames/s on ch11, 2026-07-26), so the injected illumination is the only traffic, and it can be made bit-identical across bands. The band contrast is therefore cleaner in an empty room than it could ever be in a busy one.
The four controls that decide whether this is science
-
A controlled illuminator, not ambient traffic. This is the control everything else hangs off, and it replaces the campaign's original "ping over eduroam" plan. That plan failed three ways at once: the eduroam channel is not knowable without on-node commands, the two nodes are associated to different APs (
54:d7:e3:2a:f8:d1vs54:d7:e3:2e:e1:21, measured 2026-07-26), and a client holds one association — so a band-steered enterprise network cannot be made to illuminate 2.4 GHz and 5 GHz on demand.Instead the illuminating node runs
hostapdon its AX210 (wlp1s0) — the CSI radio, not the management radio — on a channel, band, and rate set we choose, and drives a paced legacy-rate multicast stream on the AP interface. No station needs to associate: multicast is transmitted regardless, so no node ever leaves eduroam and the tailnet stays up.[!warning] Never put
hostapdonwlan0wlan0carries eduroam, the tailnet, and therefore all remote access.docs/FLEET-WIFI.mdconfigureseth0as an always-on recovery link, but it isno-carrieron both nodes — the cable is not plugged in. With the building empty there is no way to recover a node that loses its management radio. -
Subcarrier parity — native, because we chose the modulation. Legacy OFDM is 52 used tones at 312.5 kHz over 20 MHz, identical on 2.4 and 5 GHz. A legacy-rate illuminator therefore produces the same subcarrier basis on both arms by construction — parity is not reconstructed offline, it is a property of the waveform.
That this hardware emits CSI for non-HT frames is measured, not assumed: every working session reports 52 in
tone_counts(monad05_console_20260722:[52, 56], 6.68 M records at 232 Hz). Both profiles are thereforeHT20, and the earlier asymmetric-width design is withdrawn — a wider monitor buys nothing when we generate the traffic ourselves, and would cost ~4x the bytes and a lower rate ceiling (csid caps: ~371 Hz at 20/40 vs ~215–225 Hz at 80/160).What the reduction still owes: filter each arm to the 52-tone legacy class before comparing (the
csi-visualizationskill's one-record-class rule). The illuminator makes 52 dominant but the channel is shared — stray HT/VHT frames from real APs will also land, and mixing record classes is not a band contrast. Report the discarded fraction per arm and require it small and comparable; a large asymmetry there is a band-correlated confound in disguise. -
Matched illumination rate. Identical send rate, frame size, and arrival regularity on both bands, from the same illuminator, verified post-hoc via the
timingview. 100 Hz on both, set by the illuminator and capped byinterval_us— comfortably under the ~371 Hz HT20 ceiling, so the cap governs rather than the radio. The rate is a control variable here, not a treatment; the ladder belongs to Stage 2. Cross-arm rate parity stays a hard gate: if the arms cannot be rate-matched, report that and stop. -
Swapped receiver (crossover). A fixed node→band assignment confounds band with radio and position — two different AX210 samples, two different spots in the room, two different antenna orientations. Each condition therefore runs in both assignments (monad01→2.4 / monad02→5, then monad01→5 / monad02→2.4), and the band effect is the crossover-adjusted contrast. Without this the campaign measures "monad02 minus monad01" and calls it a band gap.
Stage 1 — the verified-empty arm (runnable now, fully remote)
Ground truth is occupancy = 0, verified (operator travelling, office confirmed empty). That is a stronger null label than the literature usually has, where "empty" is asserted.
- Illuminator. monad02 runs
hostapdon its AX210 and emits a paced legacy-rate multicast stream; monad01 observes withcsid; then the roles swap. The auxiliary-transmitter pattern follows wang2025_2c42 ↗, who park a Raspberry Pi pinging the router to hold a passive capture at rate — here the transmitter is one of our own nodes, so its channel, band, rate and modulation are ours to set rather than the faculty AP's to decide. - One radio, one role, at a time. A node cannot be AP and monitor simultaneously —
hostapdandcsidboth wantwlp1s0. The crossover therefore alternates roles between nodes rather than running both on each.wlan0stays on eduroam throughout on both nodes; that is what keeps the fleet reachable. - Never self-illuminate. A node transmitting and receiving centimetres apart is dominated by the direct path and carries almost no multipath sensitivity. The illuminator and the observer must be the two different nodes — which the one-role-at-a-time constraint enforces anyway.
- Non-DFS 5 GHz only. Channels 36–48. A DFS channel would make the AP silently vacate on radar detection mid-session, which reads downstream as a starved arm rather than as a regulatory event.
- What Stage 1 delivers. (a) the between-session dispersion estimate that powers Stage 2; (b) the baseline-inflation check; (c) the platform gate — proof the fleet can hold matched conditions on both bands at all.
- What Stage 1 cannot deliver. Any statement about occupancy discriminability. Zero occupancy contrast means zero information about ρ(occupancy, CV). Saying otherwise would be the "confident verdict, nothing measured" pattern the 2026-07-15 integrity audit flagged.
Stage 2 — the occupancy ladder (gated, needs people)
Sized from Stage 1's sigma, not before. Occupancy ladder with BLE-anchored ground truth per
EXP-001 BLE-Assisted CSI Ground Truth Collection, same exp-band-24/exp-band-5 pair, same
hostapd illuminator, same 52-tone legacy basis, same crossover, illumination rate swept as a
secondary family. Only Stage 2 can move
band-5ghz-occupancy-discriminability's strength.
What the supervisor does
This campaign has no simulator. simulations_available: and sim_params: are absent by
design, and sim campaign run cannot execute it — there is nothing to launch. Execution is
fleet-side (systemctl start csid@<profile> per condition, sessions synced to S3 by
csid-sync), and the campaign machinery is used only for the session record and synthesis.
Treat the step list as an operator protocol, not a supervisor plan:
- Deploy the matched pair
exp-band-24/exp-band-5(already authored incsid_experiments). Their channels are placeholders carried over from the stock profiles — set each to the channel the eduroam AP is actually on for that band (iw dev wlan0 linkon the illuminator) before the first session. csid is passive-only (capture.modeaccepts only"passive";"inject"is reserved and unimplemented), so a wrong channel means both arms sniff an idle channel and the session yields nothing. - Run the 8-session crossover, one condition at a time (single radio per node — a research capture stops the console feed).
- Verify each session through
csi_plotvalidation+timingbefore analysing it, and check cross-arm rate parity for the pair as a whole, not just each arm alone. - Reduce, parity first: filter each arm to the 52-tone legacy class, report the discarded
fraction per arm and check it is small and comparable, confirm equal final tone counts —
then per-session log-CV per band, crossover-adjusted paired difference, bootstrap
CIs, dispersion estimate. Report median/MAD alongside mean/SD (
robust_cross_check). - Synthesise against the criteria above, leading with the honest-scope statement.
Figure render request
csi_band_paired_empty — per-session empty-room log-CV, 5 GHz vs 2.4 GHz, paired lines with
the node assignment encoded by line style so the crossover is visually legible; bootstrap-CI
ribbon on the paired difference; a reference band marking the 1.5x baseline-inflation
threshold.
Out of scope
- The illumination-rate floor itself — that is EXP-007 Packet-Rate Floor for Motion Sensing.
- Arrival-regularity / burstiness — that is EXP-008 Active Injection vs Passive Sniffing. Stage 1 holds arrival regularity fixed and uniform precisely so it cannot leak in.
- The BLE anchor (Stage 2 only).
- Any sim-to-real comparison against c-csi-band-calibration. That comparison is worth making, but only once Stage 2 has a real ρ per band to compare against.
Expected interpretation (Stage 1)
-
Platform gate passes, baseline inflation excluded → the fleet can hold matched dual-band conditions, the band contrast is not baseline-driven, and Stage 2 is sized and worth running. The best outcome.
-
Platform gate passes, baseline inflation CONFIRMED → part of the WiMANS ρ gap may be baseline dispersion rather than occupancy sensitivity. This does not refute the hypothesis, but it changes what the metric means and must be carried into Stage 2's estimator (e.g. occupancy-CV normalised by empty-room CV per band). A genuinely valuable negative that only a verified-empty room could surface.
-
Platform gate fails (starved capture, irregular sampling, chains not distinct) → platform finding, not a science finding. Fix and re-run; quote nothing. 3b. The illuminator does not produce CSI at the observer — hostapd comes up and beacons, but the observing node records nothing, or records far below the 100 Hz send rate. Candidate causes, in the order worth checking: the AX210 refuses AP mode alongside the monitor vif on the peer; multicast is being sent at a rate the receiver cannot decode at
HT20; the chosen channel is congested; or the CSI path itself is faulty independent of illumination (see the open question in the platform gate). Distinguish the last one first — it is the only cause that also explains the 2026-07-26 zero-record console sessions, and it invalidates every arm rather than one.Fallbacks, best first:
- Associate a real station. If multicast proves undecodable, a station gives unicast at
negotiated rates. The cost is that the only available stations are the nodes' own
wlan0radios, and moving either off eduroam forfeits remote access with no cabled recovery — so this is a on-site-only fallback, not a remote one. - HT40 on both bands (legal on both). Widens what the monitor can decode if the
illuminator's frames turn out wider than expected. Verify against observed
tone_counts. - Report the non-result. "This hardware does not support a self-illuminated matched-basis dual-band comparison" is a publishable platform finding and the honest outcome if the above fail.
Record which was taken and why; do not quote a band difference from unmatched bases.
- Associate a real station. If multicast proves undecodable, a station gives unicast at
negotiated rates. The cost is that the only available stations are the nodes' own
-
Band and receiver not separable at n=8 → report the honest non-result and either raise n or add nodes. Do not fall back to the un-crossed contrast.