Question
Is a single homogeneous dielectric cylinder + one calibrated per-body loss an adequate scatterer for amplitude-bundle statistics, and what does it hide?
2026-06-03 - Body-as-scatterer EM fidelity for ray-traced CSI adopts the cylinder + calibrated loss (IP-094 Q5) but lists the fidelity questions that must be decided on evidence. This campaign sweeps the body model (rather than occupancy) to make those trade-offs visible before any GPU cost or phantom build is paid.
What we already know
- Notebook 02 in the analytical sandbox shows mean-attenuation-vs-N is near-invariant along a loss×radius iso-contour, but the placement variance is not — so a dataset of mean curves under-determines the body model; you need the spread. This campaign tests that on the ray tracer.
- Tissue permittivity falls with frequency and the Fresnel radius shrinks with wavelength, so blockage geometry + material both shift across 2.4 → 5 → 6 GHz.
- Radius sets blockage probability (geometric) and is not absorbed by the loss scalar — it is the second tunable, only jointly identifiable from the distribution.
What I want the supervisor to do
- Fan out
exp-csi-staticover the body-parameter grid (4 loss × 3 radius × 3 band = 36 runs) at fixed mid occupancy (n_agents=6,n_placements=64for a well-sampled attenuation distribution), local CPU first. - Run the notebook-backed reduction (
csi_body_em_sensitivity.py, runnerpython): build the loss×radius confounding map (grid-mean vs per-placement spread) and the per-band curves; emitcsi-body-em-fidelity.metrics.json. - Synthesise the closure question: does a single calibrated scalar absorb the swept variation, or does residual structure point at the minimal next primitive (elliptical cross-section, two-layer shell)?
Analysis-writer responsibilities
- Confirm the scalar floor +
links.parquetper cell viasim_read_run. - Report (a) loss×radius confounding (mean iso-contour + spread separation), (b) the
per-band shift, (c) the closure verdict. Cite per-run artefacts by
sim://URI.
Figure render request
csi_body_loss_radius_confounding — a loss×radius heatmap of mean attenuation overlaid
with the per-placement spread, plus a small-multiple of the per-band curves.
Out of scope
- Sim-to-real calibration (
exp-csi-calibration, IP-094 Phase 4) — this bounds the prior, it does not fit the loss against real data. - Occupancy crossover — that is c-csi-crowd-occlusion.
- Building a layered/elliptical phantom — only justified if the residual here shows structured dependence the scalar cannot flatten (the decision rule in the diary note).
Expected interpretation
- All criteria met → "Loss and radius are jointly identifiable only from the attenuation distribution; per-band calibration is required; the scalar absorbs the rest. The cylinder + calibrated loss is vindicated for bundle statistics." Confirms IP-094 Q5.
- Closure fails (residual structure the scalar can't flatten) → names the regime (posture/band) and the minimal next primitive — a fidelity finding, not a bug.
- Criterion 1 fails → platform finding on the runner surface.
Operator notes
- 36 runs at fixed n_agents=6 — minutes on the M1 CPU. Same bridge path as
c-csi-crowd-occlusion;
where=localbuilds the image from the Dockerfile. - Reuses the same scene (
csi-synth-corridor-link) as the occupancy campaign — only the body + radio params vary, so the static scene is built once and cached per run.