Live status · Read the latest
monad-knowledge Wi-Fi sensing lab · FIIT STU
running csi-body-em-fidelity simulation simulation

Body-as-scatterer EM fidelity — what the dielectric cylinder hides (ray-traced)

In plain words

Which body-model settings can a distribution of simulated attenuation distinguish?

transmitter receiver one cylinder, one loss number dimmed by the body
The simulator models every person as a water-filled cylinder plus one number for how much signal a body swallows. The design sweeps that loss and the cylinder's radius across bands to find what the simple shape hides. Schematic of the design, not a measurement.
Why it matters
A simple body shape and loss parameter can hide confounding that a mean signal value does not reveal.
How it is done
A 36-cell ray-traced grid: four loss values, three body radii, three bands, six people, one seed, on a synthetic corridor.
Where it stands
A 36-cell, single-seed sensitivity grid separates some loss/radius settings in simulation. It does not establish unique body-parameter identification or a calibrated human model.

Asks, formallyA single homogeneous dielectric cylinder + one calibrated per-body loss is an adequate scatterer primitive for amplitude-bundle statistics IF the per-body loss and radius are jointly identifiable from the attenuation *distribution* (not the mean), and if the linear-additive blockage law only breaks at high co-linear occupancy. A body-parameter sweep makes the loss×radius confounding and the additive↔shadowing divergence visible before any phantom is built.

FoundA 36-cell, single-seed sensitivity grid separates some loss/radius settings in simulation.

StandingCollecting data now · last activity 2026-06-07

RoomSynthetic lab floor `test-lab-synth-floor-0`, link layout `csi-synth-corridor-link` (1 Tx, 3 Rx). CPU/LLVM Sionna RT on the M1.

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.

Body-as-scatterer EM fidelity: what the dielectric cylinder hides (ray-traced)

Current assessment (2026-09-15)

A 36-cell, single-seed sensitivity grid separates some loss/radius settings in simulation. It does not establish unique body-parameter identification or a calibrated human model.

The 2.25 dB grid-mean range and 14.85 dB placement-spread range show why mean attenuation alone is insufficient. A distribution can distinguish tested settings without making all parameters uniquely identifiable. The grid spans bands and placements under one model and seed; it supplies no population confidence interval for human scattering.

Next evidence needed: Fit against independently measured distributions with identified acquisition parameters. Report confounded parameter combinations and compare held-out predictions before claiming that one scalar body loss is adequate.

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

A Wi-Fi crowd-counter works because bodies block and scatter radio waves: more people between the antennas, weaker and more-jittery the signal. To simulate that, you need a stand-in for a person that a ray tracer can bounce waves off. The cheapest useful stand-in is a cylinder of water-like material — human tissue is mostly water, and water is what makes bodies opaque to Wi-Fi. But a real torso does two things at once: it shadows the direct line (blocks it) and it absorbs energy passing through it. Our ray tracer (hoydis2023 ↗) reflects and diffracts off the closed cylinder but does not transmit through it, so the through-body absorption a real chest adds is missing. We supply it with one scalar knob, body_loss_db: each blocked line loses a fixed number of decibels.

That raises three fair questions, and this experiment is exactly those three:

  1. Can you tell the loss from the size? A fatter body blocks more lines and our loss knob makes each blocked line dimmer. If both make the signal weaker, are they even separately measurable — or hopelessly tangled?
  2. Does the choice of Wi-Fi band matter? Radio wavelength changes with band, and so does the size of the "danger zone" (Fresnel zone) a body has to enter to block a link (wu2022 ↗).
  3. Is one cylinder + one number enough, or does the leftover error force a fancier body? If a scalar loss cannot flatten the swept variation, the residual tells you the minimal next primitive.

What we are trying to prove

  • Hypothesis (falsifiable): loss and radius are jointly identifiable only from the attenuation distribution, not the mean — i.e. the grid-mean attenuation stays near-flat along a loss×radius iso-contour while the per-placement spread separates the two parameters. And a single calibrated scalar loss, fit against that distribution and re-fit per band, absorbs the swept variation with no structured residual.
  • What a null looks like: if the mean attenuation did move as much as the spread, you could fit the body from average curves and the "fit on distributions" thesis collapses (a simpler, cheaper calibration would suffice). If a structured residual survived the scalar — say, a systematic error that grows with body size or bends per band — then the cylinder is not enough and the finding names the next primitive (elliptical cross-section, two-layer skin/tissue shell). Either outcome is a fidelity finding, not a bug.
  • The scepticism, stated up front: because we wired the per-body-loss law, a clean "the scalar absorbs it" result is partly self-fulfilling. The claim that survives is the information-geometry one — mean-blind, distribution-identifiable, band-dependent — which does not depend on the exact loss law we chose.

How the experiment works (plain method)

  1. Fix the crowd, sweep the body. Occupancy is held at n_agents=6 on the synthetic corridor csi-synth-corridor-link (1 Tx, 3 Rx). Only the body model and the radio band vary.
  2. The 36-cell grid: body_loss_db ∈ {2, 5, 10, 20} × body_radius_m ∈ {0.15, 0.20, 0.30} × carrier_freq_hz ∈ {2.4, 5, 6} GHz. Each cell is ray-traced over 32 random placements × 3 links = 96 attenuation rows, enough to sample the distribution of attenuation, not just its mean. (The brief's design-max was 64 placements; the recorded session ran 32 per its staged tractable-pass config.)
  3. One knob, honestly bolted on. For each blocked link the scalar loss is applied as excess attenuation, h[link] *= 10^(-(n_occluders · body_loss_db)/20). The ray tracer owns geometry and multipath; the scalar supplies the through-body absorption Sionna cannot ray-trace.
  4. Reduce across the grid. csi_body_em_sensitivity.py pools the 36 cells into (a) the loss×radius confounding map — grid-mean vs per-placement spread — and (b) the per-band curves, emitting a metrics.json and one figure.

What we've found so far (honest)

The recorded run is campaign c-csi-body-em-fidelity, session 01KTGKKQR4KPCGFAGPFFJDRR9H — a real, complete 36/36-run session (9-minute wall clock, sequential), not a phantom: every cell has a scalar floor + links.parquet in S3 (e.g. sim://run/01KTGQEBC0KF5JM6J3V3TER52C/artefact/links.parquet), and the reduction produced a real figure now in the vault. All four criteria resolved true.

The three swept knobs then behaved distinctly (numbers from body_em_grid.csv, verified):

What we swept What moved Reading
body_loss_db 2 → 20 (radius 0.20 m, 2.4 GHz) mean |H| −55.6 → −56.4 dB; spread 27.4 → 29.2 dB (both monotone) Loss is now a live axis — but its effect is modest at n_agents=6 because occluder rates are low, so the per-occluder loss averages out.
body_radius_m 0.15/0.20 → 0.30 spread jumps to ≈ 41–42 dB vs ≈ 27–29 dB Radius is the dominant spread driver; it sets the occluder count that the loss scales, so the two are genuinely confounded.
band 2.4 → 5 → 6 GHz grid-mean mean |H| shifts 10.13 dB Per-band calibration is not optional (criterion 3).

The load-bearing pair, grid-wide: across the whole loss×radius grid the mean-range is 2.25 dB while the spread-range is 14.85 dB at 2.4 GHz (12.7–14.9 dB across all bands). The distribution carries ~6–7× more information than the mean about the body model. That is the criterion-2 result, and it is the one that survives even the "we wrote the loss law" objection: an averaged dataset is structurally blind here.

Closure verdict (sober): within this corpus a single calibrated scalar absorbs the swept variation of the bundle mean, provided it is (a) fit against the attenuation distribution, not the mean, and (b) re-fit per band. No structured residual demanded an elliptical or two-layer body. IP-094 Q5 (cylinder + calibrated loss) is vindicated for bundle statistics — as a prior, on a synthetic scene, at low occupancy, on one seed. A blockage-heavy geometry/occupancy would amplify the loss axis and is the natural next stress.

How to read the figure

fig_csi_body_loss_radius_confounding.png

  • The heatmap is mean attenuation over the loss (rows) × radius (columns) grid: look at how little the colour changes down a column (loss) versus how the spread overlay grows toward the wide-radius column — that visual near-invariance of the mean beside a moving spread is the identifiability story.
  • The per-band small-multiples are the attenuation curves at 2.4 / 5 / 6 GHz: the ~10 dB vertical offset between panels is the Fresnel/permittivity band shift, not noise.
  • Do not over-read individual cells: each is 96 rows on one seed. Read the ranges (2.25 dB mean vs 14.85 dB spread), which is what the reduction reports, not any single number.

Key references

  • rampa2022 ↗ — analytic EM models for bodies as scatterers; the fidelity bar this cylinder primitive is judged against.
  • depatla2018 ↗ — the body-blockage counting model where the distribution of link losses, not the mean, carries the person count; grounds criterion 2.
  • wu2022 ↗, wang2015 ↗ — Fresnel-zone physics behind the per-band shift.
  • hoydis2023 ↗ — the differentiable ray tracer used; its no-transmission body is why the scalar loss exists.
  • zhang2024 ↗, zhu2024 ↗ — ray-tracing fidelity must be validated against real captures; the red-team's demand.
  • sun2026 ↗, cimdins2023 ↗ — where lumped-scalar body models fray in clutter.
  • angelopoulos2025_8070 ↗ — the risk-controlled calibration bar the statistician invokes.
  • santos2024 ↗, wang2025 ↗ — the deployment realities (environment dependence, sensor placement).
  • huang2025 ↗, meneghello2023 ↗ — real-CSI anchors for the standing sim-to-real cross-check.
  • zhang2026 ↗, guarino2026 ↗ — the reproducibility bar the software-engineer voice invokes.
Campaigns & sessions 1 campaign instantiating this experiment
Campaign Session State Runs Started Report
c-csi-body-em-fidelity FFJDRR9H finished 36 2026-06-07 synthesis →
Simulation runs the 20 most recent, newest first
Run Date Gate Campaign Replay
21T6N6W8 2026-06-07 ✓ c-csi-body-em-fidelity —
WW5VH9Y2 2026-06-07 ✓ c-csi-body-em-fidelity —
BZGZMFC3 2026-06-07 ✓ c-csi-body-em-fidelity —
CS2R7NJX 2026-06-07 ✓ c-csi-body-em-fidelity —
WQREBBPX 2026-06-07 ✓ c-csi-body-em-fidelity —
SS9SK15V 2026-06-07 ✓ c-csi-body-em-fidelity —
DF7AHK2S 2026-06-07 ✓ c-csi-body-em-fidelity —
2W0BK4N6 2026-06-07 ✓ c-csi-body-em-fidelity —
W1S6GJND 2026-06-07 ✓ c-csi-body-em-fidelity —
E476PD53 2026-06-07 ✓ c-csi-body-em-fidelity —
RFK6003J 2026-06-07 ✓ c-csi-body-em-fidelity —
8VB6MTN2 2026-06-07 ✓ c-csi-body-em-fidelity —
XMEZZQQP 2026-06-07 ✓ c-csi-body-em-fidelity —
Z7D0HHBY 2026-06-07 ✓ c-csi-body-em-fidelity —
10SZ8A05 2026-06-07 ✓ c-csi-body-em-fidelity —
V4VY1BK9 2026-06-07 ✓ c-csi-body-em-fidelity —
2KF6QJD9 2026-06-07 ✓ c-csi-body-em-fidelity —
Y2S525JN 2026-06-07 ✓ c-csi-body-em-fidelity —
TQRY6WV4 2026-06-07 ✓ c-csi-body-em-fidelity —
13GR09JZ 2026-06-07 ✓ c-csi-body-em-fidelity —

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