Live status · Read the latest
monad-knowledge Wi-Fi sensing lab · FIIT STU
running csi-static-occlusion simulation simulation

CSI amplitude under static occupancy — the blockage↔variance crossover (ray-traced)

In plain words

How do attenuation and variation across static crowd placements change with occupancy?

average signal: dims placement spread crossover number of people on the link
The static sweep compares mean attenuation with variation across placements. That spatial spread is different from temporal jitter on one link. The crossover depends on the scene and feature normalization. Schematic of the design, not a measurement.
Why it matters
A body can obstruct and scatter a radio path. Static placement variation and temporal motion are different signals.
How it is done
Compare mean attenuation and variation across placements on a synthetic corridor: two bands, eight occupancy levels, 48 placements and one seed.
Where it stands
The single-seed static-placement sweep remains a simulated spatial-variation result. It does not measure temporal jitter from a stationary crowd.

Asks, formallyAs occupancy rises, mean CSI amplitude falls and saturates (L4.6 LOS blockage) while the amplitude bundle's coefficient of variation and Rician-K spread rise (L4.5 multipath); the two signatures cross at an occupancy that depends on link geometry. A ray-traced sweep over the synth-corridor link locates that crossover and bounds where the analytical baseline can be trusted.

FoundThe single-seed static-placement sweep remains a simulated spatial-variation result.

StandingCollecting data now · last activity 2026-06-06

RoomSynthetic lab floor `test-lab-synth-floor-0` (corridor + four rooms, 8×8 m, concrete walls via ITU-R P.2040), Tx/Rx link layout `csi-synth-corridor-link` (1 transmitter, 3 receivers). CPU/LLVM Sionna RT on the M1 (no GPU).

The room

test-lab-synth · test-lab-synth-floor-0 · 8 devices

The floor this experiment runs on — its rooms, walls, furniture and the highlighted sensors placed for it. This is the surveyed layout as last exported; a run's replay below shows the geometry as it was simulated.

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)

  1. Stage the scene host-side from PostGIS: floor test-lab-synth-floor-0, link layout csi-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.
  2. Fan out exp-csi-static over 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.
  3. 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-link links.parquet, and the raw csi.hdf5 tensor.
  4. 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.
Campaigns & sessions 1 campaign instantiating this experiment
Campaign Session State Runs Started Report
c-csi-crowd-occlusion PPXHPKVZ finished 16 2026-06-06 synthesis →
Simulation runs the 16 most recent, newest first
Run Date Gate Campaign Replay
V93G2Q39 2026-06-04 ✓ c-csi-crowd-occlusion —
TGXFYNXW 2026-06-04 ✓ c-csi-crowd-occlusion —
YEPAREYF 2026-06-04 ✓ c-csi-crowd-occlusion —
3QXD7HCE 2026-06-04 ✓ c-csi-crowd-occlusion —
PV9DPHTQ 2026-06-04 ✓ c-csi-crowd-occlusion —
EQGXJD68 2026-06-04 ✓ c-csi-crowd-occlusion —
A2MNZT7R 2026-06-04 ✓ c-csi-crowd-occlusion —
WMC4GR9G 2026-06-04 ✓ c-csi-crowd-occlusion —
R8RMV31M 2026-06-04 ✓ c-csi-crowd-occlusion —
KAPFSBT5 2026-06-04 ✓ c-csi-crowd-occlusion —
8TM9PAZM 2026-06-04 ✓ c-csi-crowd-occlusion —
84Z52VYF 2026-06-03 ✓ c-csi-crowd-occlusion —
1XPP0CSD 2026-06-03 ✓ c-csi-crowd-occlusion —
RK91R3BG 2026-06-03 ✓ c-csi-crowd-occlusion —
YC2C67QM 2026-06-03 ✓ c-csi-crowd-occlusion —
YTEEVVKN 2026-06-03 ✓ c-csi-crowd-occlusion —

All exp-csi-static runs in the workbench →

Provenance

Data origin
simulated
Domain
csi
Room layout
csi-synth-corridor-link

Data types

  • csi-amplitude
  • rician-k
  • per-link-summary