Asking the fleet what it is doing…
monad-knowledge Wi-Fi sensing lab · FIIT STU
Campaign

c-furniture-csi-observatory

c-furniture-csi-observatory

Archive snapshot, as of 1 day ago — the run corpus is rebuilt once a day, so this page is not a live reading. The fleet panel is the live one; it refreshes every 30 s.

Sessions

No sessions yet — this campaign has a brief but no execution.

Brief

c-furniture-csi-observatory

The five beats

Literature grounding — the figure contract

Every panel is a documented WiFi-sensing convention, not an ad-hoc plot. Recipes (axes → preprocessing → what it reveals) were surveyed from the vault:

Viewpoint Recipe Source
Amplitude heatmap |H| dB, subcarrier×time ("CSI image") ma2020_4782, cominelli2023_e6ee
Doppler spectrogram fast-time burst FFT (Hamming), incoherent avg over subcarriers; v = f·λ wang2015_48cf, li2022_4220
CSI ratio H_ant0/H_ant1 cancels CFO/SFO → phase-clean, no Fresnel blind spot wu2022_75d3
Receiver-geometry small-multiples same event, LoS 180° / bistatic / NLoS side by side bocus2022_ce7f, meneghello2023_0a93
RSSI coverage map received power over an Rx grid zhang2024_df4a, sun2026_2f5e
Fresnel sensitivity map sensitivity peaks mid-zone, blind spot at zone boundary wu2022_75d3
Multi-viewpoint necessity single link collapses at Fresnel limits; distributed views recover it xiong2025_e227
Furniture ablation furniture drives RSSI variance/multipath, not mean zhang2024_df4a, chen2023_5cbd

Novel gap-fill (per the survey): no vault paper plots measured empty-vs-furnished CSI as temporal variance / Doppler spread — WiSegRT did it only on static RSSI-standard-deviation-by-distance. This campaign produces that time-frequency ablation from the coupled sim, and overlays the sensing-coverage map on the crowd footfall — two figures the field currently lacks.

Design

  • Fixed-AP sensing model. 1 infrastructure Tx (living-room ceiling, 2.4 m) + 9 Rx across the apartment (csi-oracle-grid-resplan-2605: bedrooms, bathroom, kitchen, living), spanning LoS (living) to deep-NLoS (bedrooms through walls). No seated-emitter hook ⇒ no emitters.parquet ⇒ the runner keeps the fixed Tx and the crowd + furniture are scatterers (links = 1×9 = 9 stable links). This is the WiFi-sensing paradigm and gives a clean coverage map + a stable per-link CSI-over-time series. num_rx_ant = 2 unlocks the CSI-ratio.
  • Furniture as the coupling. The 27 door-aware boxes (active FURNITURE layer computed-resplan-2605-floor-0, IP-113) are exported into floor_geometry.json as walker obstacles (furniture-aware motion) AND injected into scene.json as box scatterers via scene_overrides.furniture (obstacles are not auto-scatterers, so the list is required — the explicit furniture→CSI bridge).
  • Ablation = identical trajectory, toggle scatterers. The empty arm is byte-identical except it drops scene_overrides. Same floor + same scenario.seedidentical crowd trajectory ⇒ the per-link CSI delta isolates furniture scattering alone (the WiSegRT control: same motion, furniture on/off). Both arms' walkers still navigate around furniture.
  • Physical Doppler. doppler.mode: cfr synthesises per-path Doppler from each body's velocity 3-vector over n_sub fast-time sub-frames spanning window_s (fs = n_sub/window_s Hz) — a physically-correct, signed Doppler (commodity CSI is unsigned; cfr keeps the sign).
  • Crowd = 6 IP-107 personas (long-stay worker, study group, browser, two through-traffic flows, quick visitor) with staggered arrival windows so the live count ramps/drains — the CSI dynamics need a varying occupancy, not a static full room.

Navigability finding (honest)

The ideal CFSM hard-core radius 0.20 m fragments this furnished floor's navigable core into 2 parts (a sub-0.40 m pinch created by the door-aware furniture) — the walker turned all agents away (0 spawned). Dropping to 0.15 m (0.30 m diameter, the canonical floor-agnostic oracle-agendas / c-furniture-walkability value, within the Seyfried FD-intercept range) keeps the core connected so the crowd moves. Recorded as a real furnished-floor constraint, not silently patched. The active furniture layer also has 0 occupiable seats (the door-aware refurnish dropped them), so seat-targeting legs degrade to nearest_free; agents still transit and dwell, which is what drives the CSI.

Method

# furnished + empty, seed 0, everything local (CPU Sionna)
sim run exp-csi-crowd --where local \
  --config monad_knowledge/sim/exp_csi_crowd/config/csi-observatory-resplan2605.yaml \
  --params scenario.duration_units=2000 trajectory_frame_stride=25 doppler.n_sub=10
sim run exp-csi-crowd --where local \
  --config .../csi-observatory-resplan2605-empty.yaml --params (same)
# reduction (monad-free): coverage + movement + CSI-over-time + furniture ablation
python monad_knowledge/notebooks/python/csi_observatory.py \
  --run <furnished-run-dir> --compare <empty-run-dir> --out <out>

Artefacts per run: csi.hdf5 (H[frame,link,rx_ant,tx_ant,subcarrier] complex), links.parquet, trajectory.parquet, ble_links.parquet, inputs/scene.json.

Results

Three local coupled runs, seed 0, identical trajectory (23 agents, 36 ray-traced coarse frames × n_sub 10, 9 links × 2 Rx-ant, 2.4 GHz):

Run run_id scatterers / geometry
empty (Rx 1.2 m) 01KXGAR2ZCAJ0VDFM5ZY7K2TP6 0
furnished, real height (Rx 1.2 m) 01KXGAPE0TXYWY69QDMWYRK06F 27 boxes, 0.45–2.0 m
furnished, tall 1.8 m (Rx 1.2 m) 01KXGB5ZAMCYBC3RV7QP2XY3YF 27 boxes forced to 1.8 m
empty, low Rx 0.6 m 01KXGFQ1F1CS9GT1DJ1DPRAWSF 0 (experiment …-2605-low)
furnished, real height, low Rx 0.6 m 01KXGFNBW3P2J8DRTH6AJ0R6F6 27 boxes, 0.45–2.0 m

Furniture ablation (real vs empty) — the null:

Metric Value Reading
mean-|H| relative delta 0.0008 furniture does not move the mean
spectral-var ratio (furn/empty) 1.00 no extra frequency-selective fading
temporal-var ratio 1.00 temporal variance is crowd-dominated
deepest-null delta 0.21 dB negligible
max per-link mean RSSI delta 0.08 dB only link 2 (by the one 2.0 m wardrobe)

Mechanism confirmed from BOTH directions (same 27 real footprints, same crowd):

Condition RMS |Δ|H|| vs empty max per-link Δ
ceiling Tx + waist Rx (1.2 m), real furniture 0.11 % 0.08 dB (invisible)
ceiling Tx + waist Rx (1.2 m), furniture raised to 1.8 m 10.44 % 9.17 dB (Rx05)
ceiling Tx + floor Rx (0.6 m), real furniture 10.06 % 13.23 dB (Rx05)

Either raising the furniture into the plane OR lowering the Rx into the clutter makes the SAME real furniture jump ~100–165× in effect. At low Rx the ablation also flips physically: mean-|H| relative delta 0.10 (furniture now moves the mean) and deepest-null 3.46 dB deeper — the link finally intersects the clutter. See fig_height_mechanism.png.

Coverage / sensing-sensitivity (H1): per-Rx mean RSSI −47 dB (Rx04, LoS) → −72 dB (Rx08, deep NLoS); the std_t(RSSI) sensing map inverts onto the NLoS links (Rx02 7.7, Rx07 6.2, Rx01 3.7 dB) — power and sensitivity live on different links.

Figures (from csi_observatory.py --run <furnished> --compare <empty>): fig_coverage.png (RSSI + sensing + Fresnel/footfall), fig_csi_amplitude.png (subcarrier×time, 9 Rx — body-blocking null stripes visible), fig_doppler.png (cfr Doppler, LoS vs NLoS), fig_csi_ratio.png, fig_link_timeseries.png, fig_furniture_ablation.png (spectral/temporal/mean decomposition), fig_height_mechanism.png (the headline), anim_movement.gif, anim_csi.gif.

Limitations

  • Synthetic, uncalibrated CSI. Ray-traced Sionna-RT, no Sionna-vs-measured indoor validation exists (campaign-rigor-audit, sim-param-grounding-2026-07). This is a mechanism/visualization instrument, not a fidelity claim. At 2.4 GHz Sionna neglects diffuse scattering (Rayleigh λ/8) — furniture internal structure is exactly where that approximation bites (zhang2024_df4a).
  • One floor, one arrangement, self-authored crowd. Not cross-floor, not a measured occupancy trace.
  • Impairment-free (clean oracle H) — hardware CFO/phase-noise are an unvalidated IP-101 prior, left off here.

Changelog

  • 2026-07-14 — Claude: campaign created; configs + monad-free reduction built and self-tested; local smoke validated the full coupled chain (fixed-Tx 9-link, furniture scatterers injected, cfr Doppler). Ran seed-0 empty / furnished(real) / furnished(tall 1.8 m) locally. Result: real furniture CSI-invisible (≤0.08 dB), tall furniture 9.2 dB / 10.4 % RMS — antenna-plane geometry gates furniture→CSI. H1 (LoS power vs NLoS sensing-sensitivity inversion) confirmed; naive H2 (furniture-driven temporal variance) refuted and re-explained (crowd-dominated temporal variance; furniture is a static below-plane multipath term here). The reduction's ablation metric was corrected mid-run from temporal→spectral/spatial variance after the temporal-var null exposed the wrong axis.
  • 2026-07-14 — Claude: added the low-Rx arm (new PostGIS experiment csi-oracle-grid-resplan-2605-low, Rx dropped 1.2 m→0.6 m into the clutter, Tx kept at ceiling). Real furniture goes from CSI-invisible (0.11 % RMS) to 10.1 % RMS / 13.2 dB — the antenna-plane mechanism confirmed from the second direction.