CSI amplitude under static occupancy: the blockage↔variance crossover (ray-traced)
Current assessment (2026-09-15)
The single-seed static-placement sweep remains a simulated spatial-variation result. It does not measure temporal jitter from a stationary crowd.
The monotone amplitude and CV trends were computed across placements under an uncalibrated body model. Spatial variation across static arrangements is different from time variation on one link. The near-first-person crossover is conditional on that scene, band and feature normalization.
Next evidence needed: Carry the spatial/temporal distinction into captions and downstream claims. Test occupied and empty recordings with matched acquisition conditions before assigning the simulated crossover a field counting interpretation.
Basis: Thesis Narrative, the September 10 synthesis, and the September 15 register review. See the review record for evidence sources and outstanding checks.
Earlier protocol and dated results
The methods and observations below retain their original scope. Read their readiness statements and proposed next steps as historical. The current assessment above records what has changed; frozen thresholds have not been retrospectively revised.
The problem, in plain words
Picture a single flashlight (the transmitter) shining at three light sensors (the receivers) across a room. Now walk people into the room.
- If a person stands directly between the flashlight and a sensor, that sensor reads darker — its average brightness drops. Pack more people in and it keeps dropping, but the effect saturates: only so many bodies fit on that narrow direct line, so after a few the average stops falling much. This is the blockage / mean-attenuation story, associated with through-wall and sparse-link counting work (depatla2018_97a9 ↗).
- But people are also shiny — they reflect light onto the sensors from odd angles. Add more people and the reading gets flickery: brighter one instant, dimmer the next, and very different depending on exactly where everyone stands. The honest way to measure "flicker" is the coefficient of variation (CV = standard deviation ÷ mean), because raw standard deviation is a trap — it rises just because the mean shifts. This is the multipath-variance story, associated with in-room CSI counting (choi2022_17c2 ↗; zou2018_1590 ↗).
Both effects grow with the crowd, but at different speeds and in different geometries. A counting model that leans on the wrong one for its room will drift or collapse — which is exactly the "separability collapse" reported when CSI counting is pushed to higher occupancy (golammowla2024_1b1f ↗). Knowing where the two curves cross tells you which feature a room-specific counter should actually be built on.
What we are trying to prove
- Hypothesis (falsifiable): as occupancy rises, (a) mean |H| falls monotonically and saturates, and (b) the amplitude CV rises monotonically; and (c) there is a well-defined crossover N* — a normalised occupancy at which the (normalised) variance signature overtakes the (normalised) blockage signature — that shifts with carrier frequency because the Fresnel zone shrinks with wavelength.
- What a null means: if CV did not rise with occupancy, the multipath school would be unsupported on this geometry and blockage would be the only usable feature — the opposite of what we find. If the crossover did not move between 2.4 and 5 GHz, the "geometry × wavelength" framing would be wrong and the crossover would be a fixed number rather than a design knob.
- The sceptical part, up front: the crossover number is only as trustworthy as the scene, the body model, and the seed behind it. A clean ρ on a self-authored sandbox is the weakest kind of evidence (see the Red-Team voice). The honest claim is a mechanism and a direction, not a calibrated crossover you could quote to a building operator.
How the experiment works (plain method)
- Stage the scene host-side from PostGIS: floor
test-lab-synth-floor-0, link layoutcsi-synth-corridor-link(1 Tx + 3 Rx, 25 walls, concrete via ITU-R P.2040). The Docker container never touches the database — it receives a ready scene. - Fan out
exp-csi-staticover the grid:n_agents ∈ {0,1,2,3,4,6,8,12}×carrier ∈ {2.4, 5.0} GHz= 16 cells, seed 0. Bodies are dielectric cylinders (radius 0.20 m, 5 dB loss), dropped at 48 random placements per cell so the variance has something to vary over. - Ray-trace each placement with
sionna-csi-runner(IP-094), producing a per-run scalar floor (mean_atten_db_per_person,k_vs_occupancy_slope,variance_monotonicity), a per-linklinks.parquet, and the rawcsi.hdf5tensor. - Reduce host-side (
csi_occupancy_crossover.py): pool the 48 placements per cell, compute mean |H|, CV, and Rician-K vs occupancy, locate the crossover N* per band, and render candidate chapter figure F4.x.
What we've found so far (honest)
Campaign c-csi-crowd-occlusion, session 01KTFBXV5P… — finished, 16 real runs, all four success criteria met. Both amplitude signatures are strongly monotonic; the crossover is band-dependent and very low.
| n_agents | mean |H| dB (2.4) | CV (2.4) | mean |H| dB (5.0) | CV (5.0) | mean occluders on LOS |
|---|---|---|---|---|---|
| 0 | −53.57 | 0.619 | −61.64 | 0.802 | 0.00 |
| 1 | −53.76 | 0.629 | −61.93 | 0.813 | 0.02 |
| 2 | −54.15 | 0.629 | −62.41 | 0.841 | 0.08 |
| 3 | −54.13 | 0.660 | −62.05 | 0.847 | 0.06 |
| 4 | −54.54 | 0.694 | −62.83 | 0.888 | 0.17 |
| 6 | −55.28 | 0.753 | −63.77 | 0.963 | 0.28 |
| 8 | −56.17 | 0.784 | −64.10 | 1.004 | 0.38 |
| 12 | −57.39 | 0.803 | −65.71 | 1.010 | 0.42 |
- L4.6 blockage: mean |H| falls monotonically on both bands, ρ(n, mean_amp) = −0.98 — with the saturating shape the analytical sandbox predicts (a big initial ≈25 dB/person drop, then flattening).
- L4.5 variance: CV rises monotonically, ρ(n, CV) = +1.00 (2.4 GHz), +0.98 (5.0 GHz).
- The crossover is band-dependent and very low. At 2.4 GHz N*≈0 — variance leads across the whole range; there is no blockage-dominant window. At 5.0 GHz N*≈1.4 — a short blockage-led regime exists before variance overtakes. Higher absolute path loss (−61.6→−65.7 dB) and a richer multipath floor (CV 0.80→1.01) at 5 GHz are consistent with the shorter wavelength: a smaller Fresnel zone and more reflective detail push the crossover up.
- Why the crowd never really blocks: the mean number of bodies actually sitting on any Tx–Rx line of sight stays ≤ 0.42 even at 12 people. In an 8×8 m room with three co-located receivers, the crowd reaches the channel through diffuse multipath (rising CV), not LOS blockage. A blockage-dominant regime would need a sparser-LOS or through-wall geometry (Depatla's setting) — not exercised here.
Honest caveats. Synthetic scene; a single RNG seed (seed 0 only — the 48 placements are the spread, but there is no seed replication and no CI reported on N*); uncalibrated per-body loss (5 dB, not fit to real data — that is exp-csi-calibration); static placement (no motion). The reduction ran in host-side driver mode, so figure F4.x + metrics.json live in the session's local _cache/…/reduction/ and are not attached to the session's S3 figure list (figures: []), and no criticism.md was written for this session — both flagged below. Reduction artefacts: _attachments/experiments/csi-static-occlusion/ (fig_csi_occupancy_crossover.png, occupancy_curve_{2e+09,5e+09}.csv, csi_occupancy_crossover.metrics.json).
How to read the figure
fig_csi_occupancy_crossover.png
- Twin vertical axes, occupancy on the horizontal axis. The downward series is mean |H| in dB (left axis) — the blockage signature; the upward series is CV / Rician-K (right axis) — the variance signature. Two coloured pairs, one per band (2.4 and 5 GHz).
- The marked point N* is where the normalised variance curve crosses the normalised blockage curve. Read it as "before N*, dimming is the stronger cue; after N*, jitter is." Note it sits near the left edge — at 2.4 GHz essentially at zero.
- Read the trend, not the wiggles. Each point pools 48 random placements; the n=2 vs n=3 dip in the 2.4 GHz mean is placement noise, not a reversal. The story is the two monotone opposing slopes and where they meet.
Key references
- depatla2018_97a9 ↗ — the mean-attenuation / blockage school (L4.6) that this experiment tests against.
- choi2022_17c2 ↗, zou2018_1590 ↗ — the multipath-variance school (L4.5) and device-free CSI counting baselines.
- golammowla2024_1b1f ↗ — CSI counting's separability collapse at higher occupancy, the failure mode the crossover is meant to explain.
- ma2020_4782 ↗ — CSI physics / Rician-K background the Field and Mathematician voices argue from.
- son2024_99fa ↗ — amplitude-based occupancy as a real feature.
- hoydis2023_7aa4 ↗ — the ray tracer underneath
sionna-csi-runner. - zhang2024_df4a ↗, zhu2024_cbfa ↗ — ray-tracing / ray-launching fidelity, the basis of the RT-Fidelity critique.
- santos2024_1e39 ↗ — environment dependence, invoked by the Statistician and ML voices.
- meneghello2023_0a93 ↗, huang2025_060d ↗ — the real public-CSI anchors the Red-Team demands.
- halperin2010_94f8 ↗, mondal2023_7f7a ↗ — commodity CSI extraction and a real classroom-occupancy deployment, the Deployment voice's basis.
- zhang2026_ccac ↗ — the reproducibility bar the Software Engineer invokes.