c-multifloor-fsm-observatory — reactive-FSM crowds → device CSI across six real apartments
Builds on c-ip110-showcase: instead of one parametric room, this runs the full extended-simulator chain on six real ResPlan apartment floors exported live from PostGIS, each with its own device layout, driven by AI-reactive-FSM agents.
Interactive Observatory (artifact): one scrubber drives floor + FSM crowd + occupancy + coupled-CSI strip, with a floor switcher —
claude.ai/code/artifact/fda9ee8b-51d8-495d-92eb-6df4f6b5f3e7. Host code:monad_knowledge/notebooks/python/ip111_observatory.py(prepare/reduce) +ip111_report.py.
The chain (per floor)
gis export-floor (PostGIS → real walls/rooms/seats/doors) + the experiment's device layout →
walk-notebook from_floor, kind: agendas — IP-107 reactive FSMs (resident / wanderer, floor-adaptive: largest room = social hub, live count_in(hub) ≥ 4 overflow + room_has_space diverts, weighted transitions) + IP-104 seated → network_traffic hooks →
trajectory.parquet + emitters.parquet →
sionna-csi-runner coupled — physical Doppler-CFR + diffuse scattering (S=0.3) + multi-channel BLE, over the real Tx/Rx devices (crowd as scatterers); plus a second emitter-coupled pass (seated agents = transmitters) →
csi.hdf5 + links.parquet + ble_links.parquet →
pedpy-analyser real ∇·(ρv).
Results (cross-floor)
| floor | rooms | seats | Tx×Rx | agents | emitters | occ↔|H| ρ | Doppler CV | delay ns | |div ρv| |
|---|---|---|---|---|---|---|---|---|---|
| resplan-12439 | 13 | 16 | 1×10 | 20 | 13 | −0.93 | 0.090 | 52 | 0.043 |
| resplan-1374 | 15 | 0 | 1×3 | 20 | 0 | −0.83 | 0.076 | 91 | 0.073 |
| resplan-147440 | 11 | 0 | 1×3 | 20 | 0 | −0.78 | 0.039 | 41 | 0.061 |
| resplan-7421 | 11 | 6 | 1×3 | 20 | 5 | −0.70 | 0.071 | 30 | 0.045 |
| resplan-16157 | 10 | 6 | 1×3 | 20 | 7 | −0.91 | 0.089 | 39 | 0.043 |
| resplan-12419 | 8 | 6 | 1×3 | 20 | 6 | −0.86 | 0.050 | 21 | 0.040 |
- The crowd registers on the device CSI everywhere — per-frame total-occluders ↔ coupled mean |H| Spearman −0.70 … −0.93 (tight bootstrap CIs), strongest on the largest / best-instrumented apartment (12439, 10 Rx). Cross-floor Rx-count ↔ legibility ρ = −0.66 (n=6, driven by the one 10-Rx floor) — suggestive, not significant.
- Physical Doppler imprints on every floor (CV 0.039–0.090); RMS delay spread tracks geometry (21 ns / 8-room → 91 ns / 15-room), a clean ray-tracer sanity check over real walls.
- AI-FSM behaviour produced floor-adaptive occupancy with no deadlocks (all 20 agents departed on every floor); on the four furnished floors the seated→emitter hook fired (5–13 emitter-agents → emitter-coupled CSI, the crowd-as-devices).
- Multi-channel BLE + measured ∇·(ρv) produced per floor.
v2 — count layer + multi-POV Observatory
A second pass turned the corpus into a full multi-layer pipeline with synchronized points of view.
- Count layer (CSI → occupancy). The FSM crowd ramps 0→peak→0 over each run, so every coupled run already spans a range of occupancies; a ridge estimator on CSI features (mean |H| + Doppler CV) is fit and held out per floor (finer temporal stride re-run, 26–40 coarse frames). resplan-12439 (10 Rx) → held-out R² = 0.66, MAE ≈ 3.1 agents; resplan-147440 → 0.32; sparse 3-Rx floors weak/noisy (under-determined with 3 links + ~30 frames). Pooled R² = 0.22 (MAE ≈ 5). Leave-one-floor-out R² ≈ 0 (gap ≈ 0.25) — a model trained on other apartments does not transfer, so per-environment calibration is mandatory (the sim mirror of the real cross-environment CSI lesson).
ip110_showcase.py reduction_statsengine;ip111_observatory.py count. - Multi-POV Observatory v2 (
claude.ai/code/artifact/8d354c87-2bf1-4c76-a27f-5ac1b2ad9142): one scrubber drives five layers per apartment — floor + devices + FSM crowd coloured by persona (behaviour), occupancy truth vs CSI-estimate (count), live CFR |H| vs subcarrier + time-cursored waterfall (channel), and BLE per-channel RSSI (anchor). - CSI signal snapshots (
ip111_observatory.py snapshots): per floor — empty-vs-occupied CFR, phase, the subcarrier×time waterfall (crowd ramp + blockage fades), and the physical Doppler sub-frame ripple.
Limitations
One seed per floor; the occ↔|H| ρ is a per-frame coupling check (total occluders vs mean amplitude), and the per-floor count R² is a single 70/30 split on 26–40 coarse frames (noisy on the sparse floors), not a multi-seed CV result. The FSM cast is a reusable two-persona template, not bespoke per apartment. Two ResPlan floors are unfurnished (0 seats → no seated emitters). div(ρv) runs on the analyser's fixed a_seminar grid → relative target only. Next: seeded sweeps, a per-floor occupancy-swept count model, and LLM-authored personas for behavioural diversity.
Related
- c-ip110-showcase — the single-room capability showcase this scales up.
- IP-110 (Doppler/scattering/BLE/arrays), IP-107 (FSMs), IP-104 (emitters), IP-111 (the web multi-POV replay this artifact mirrors).