Question
On a real PostGIS floor, where does the mean-blockage signature (L4.6) cross the multipath-variance signature (L4.5) as occupancy rises, and how does that crossover move with carrier frequency?
This is the contribution gap 2026-06-03 - CSI amplitude under crowd occlusion
identified: the two amplitude signatures are competing, geometry-dependent features
and no vault source pins the crossover. The thesis/csi-sensing chain §3 states
both (L4.5 csi-amplitude-variations, L4.6 los-blockage-mean-attenuation) with an
explicit open-tension note. This campaign turns that note into a figure.
What we already know
- The analytical sandbox (
notebooks/experiments/csi-crowd/csi_crowd_model.py, pure NumPy) already reproduces the shapes: mean attenuation saturates, raw std is a trap, CV = std/mean climbs cleanly. It is the cheap reference, not a calibrated predictor. sionna-csi-runner(IP-094) ray-traces the same scene with real wall materials (ITU-R P.2040) and bodies as dielectric cylinders, capturing multi-body shadowing the linear-additive analytical law cannot. Smoke + a real-floor scene-stage are validated.- The scene is staged host-side from
csi-synth-corridor-linkontest-lab-synth-floor-0(1 Tx + 3 Rx; 25 walls). The container never touches PostGIS.
What I want the supervisor to do
A single occupancy sweep, then a deterministic reduction:
- Fan out
exp-csi-staticover the grid insim_params(8 occupancy levels × 2 bands = 16 runs), local CPU first (feedback_sim_local_vs_remote). Each run is the primary single-image vehicle — reproducible, ~seconds/frame on the M1 LLVM backend. - Run the notebook-backed reduction (
csi_occupancy_crossover.py, runnerpython) over the resultinglinks.parquetset to pool placements per occupancy, compute mean |H| / CV / Rician-K vs N, locate the crossover N* per band, and emit figure F4.xcsi-occupancy-crossover.metrics.json.
- Synthesise against the analytical baseline — the analytical↔ray-traced divergence at high N is a deliverable, not an error.
Analysis-writer responsibilities
- Confirm the artefact surface per run (scalar floor +
links.parquet+csi.hdf5). - Read the scalar floor via
sim_read_run; do not crack the HDF5 by hand. - Report the crossover N* per band and whether the L4.5/L4.6 Spearman gates hold; cite
per-run artefacts by
sim://run/<run_id>/artefact/<path>.
Figure render request
One renderer slug: csi_occupancy_crossover — twin-axis mean |H| (dB) vs CV (+ Rician K),
per-band series, crossover N* marked. This is candidate chapter figure F4.x.
Out of scope
- Calibration against the real 80 MHz / Wi-CaL data. That is
exp-csi-calibration(IP-094 Phase 4); this campaign characterises the synthetic crossover, not sim-to-real. - Body-model fidelity. Held fixed here (cylinder, loss 5 dB, r 0.20 m); swept in the sibling campaign c-csi-body-em-fidelity.
- Temporal dynamics. Static placement only; the coupled
exp-csi-crowd(jupedsim → sionna) trajectory variant is a follow-on.
Expected interpretation
- All criteria met → "Ray tracing locates the L4.5↔L4.6 crossover at N*≈… (2.4 GHz),
shifting with band; the two-signature tension is resolved into a geometry-dependent
crossover curve." Feeds figure F4.x + a reconciling paragraph in
csi-sensing§3. - Criteria 1–2 met, 3 weak (no clean CV rise) → "Blockage dominates this corridor geometry; variance is weak without motion — consistent with the static-crowd confound."
- Criterion 1 fails → a platform finding on the runner/scene-stage surface, not research.
Operator notes
- Local CPU first; the full 16-run grid is minutes on the M1. Burst to
:cudaonly if a larger grid (more bands × placements) proves intractable (IP-094 Q4). - Bridge path:
monad-knowledge sim sweep exp-csi-static --grid <grid.json> --where local, thensim campaign attach-run <session_id> <run_id>per run, then/campaign-curious c-csi-crowd-occlusionto drive synthesis. - The GHCR image is not yet pushed (
where=remote-vmcannot resolve a digest untildocker-simulators.ymlpublishes:latest);where=localbuilds from the Dockerfile.