Motivation
EXP-F1 validates the BLE-anchored ground-truth chain that EXP-F2 (drift + calibration) and EXP-F3 (hybrid fusion) will treat as truth. Without this validation, those downstream experiments are anchored on a chain that might be silently miscounting.
The new structural lift relative to the superseded EXP-001 is the mobile app as a programmable participant. Each phone follows a gamified walk task (a JuPedSim-style trajectory in real space): walk to cell-A, hold 30 s, walk to cell-B, hold 30 s. That gives the BLE listener a known truth — the task schedule — and the manual spot-check just confirms it. Far less labelling cost than EXP-001's continuous manual count.
Setup
Hardware deployment
| Role | Device | Count | Placement |
|---|---|---|---|
| CSI TX/RX (5 GHz Wi-Fi 6) | Pi 5 + AX210 (FeitCSI) | 4 (= 2 pairs) | Diagonal + horizontal links per Wi-CaL: WiFi Sensing and Machine Learning Based Device-Free Crowd Counting and Localization ↗ geometry |
| BLE listener | ESP32-C6 | 2 | Opposite corners of the room |
| Supplementary 2.4 GHz CSI | ESP32-C5 | 2 | Co-located with BLE listeners (cheap to add) |
| Ground-truth source | Mobile app | ≤ 15 phones | One per participant |
| Collection server | laptop / Pi 5 | 1 | LAN-attached |
All devices are placed via gis_place_device once the room polygonization is in PostGIS. Until then, fall back to library-floor cells.
Participant protocol — the gamification loop
Participants install the mobile app and run through a scripted scenario. The app issues tasks via TCP:
- Enter (one at a time) — app says "walk to cell-A, hold 30 s, then cell-B, 30 s, …"; participant follows.
- Steady state (10 min) — N participants in the room, app tells each one which cell to occupy.
- Stress windows —
- Simultaneous entry of 5 participants at the same minute.
- Partial app coverage — 3 of 5 participants temporarily disable BLE adv (per app's toggle), to validate fallback to CSI-only counting.
- BLE interference — leave smartwatches / headphones on adjacent participants for one window.
- Exit (one at a time, reverse order).
The BLE listener counts unique adverts per 1-s window. The collection server compares against the task schedule and the spot-check manual count.
Sub-scenarios
| Scenario | Participants | App BLE-adv | Manual count interval |
|---|---|---|---|
| F1.A: Controlled entry-exit | 1 → 10 → 1 | 100 % | every entry transition |
| F1.B: Steady state | 5 fixed for 30 min | 100 % | every 5 min |
| F1.C: Penetration drop | 5 fixed | 60 % (3/5 disable adv mid-session) | every 5 min |
| F1.D: BLE noise | 5 fixed | 100 %, +smartwatches / headphones | every 5 min |
Procedure
- Bring-up gate — EXP-P1 Phase D dress rehearsal passed within last 7 days.
- Room registration —
gis_create_experiment("exp-f1-trial-1", floor="<target>"); place all 8 devices viagis_place_device. - Calibration baseline — empty room, 10 min CSI + BLE recording with 0 occupants. Establishes the noise floor.
- Run sub-scenarios F1.A → F1.D in one session if logistics allow, otherwise across two sessions.
- Synchronisation check — every device's first data row must be within 100 ms of the others. (PTP from EXP-P1.5.)
- Stop on first hardware dropout — a single device dropout invalidates the synchronisation premise; restart only after the cause is identified and patched in
_knowledge/methods/.
Expected outputs
_attachments/exp-f1/<run_id>/csi/— FeitCSI dumps per Pi-5 node._attachments/exp-f1/<run_id>/ble/— ESP32-C6 BLE adv logs (timestamp, UUID, RSSI)._attachments/exp-f1/<run_id>/mobile_app/— per-phone task-execution log._attachments/exp-f1/<run_id>/ground_truth/— task-schedule-derived count + manual spot-check count._attachments/.exp-f1-last-run.json— run card.
Analysis plan
Primary metrics
- BLE count vs task-schedule count — MAE per 1-s window. Headline.
- BLE count vs manual spot-check — MAE per spot-check sample.
- Penetration sensitivity — F1.C: as 2 of 5 disable BLE adv, what happens to the BLE-derived count? (Expected: it undercounts by exactly that amount — proves the failure mode is known, not silent.)
- BLE noise robustness — F1.D: does the per-UUID adv-counting filter survive nearby smartwatches?
- CSI quality — packet capture rate per Pi 5 node; ≥ 95 % over a 30-min window.
- Sync drift — all device first-rows within 100 ms; drift over the session.
Key figures
- Fig 1. BLE-derived count vs task-schedule count, one line per scenario. Anchor figure of the ground-truth chain.
- Fig 2. Cumulative BLE-vs-manual MAE histogram across scenarios.
- Fig 3. Per-Pi-5 CSI packet-capture rate over the session.
Success criteria
- BLE-derived count matches task-schedule count within ± 1 person across ≥ 95 % of 1-s windows in F1.A and F1.B (more strict than EXP-001's 90 % manual-count target because the task-schedule is exact ground truth).
- BLE-derived count matches manual spot-check within ± 1 person across ≥ 90 % of spot-checks in F1.A → F1.D.
- CSI packet capture rate ≥ 95 % per Pi-5 node across all scenarios.
- Session runs ≥ 1 h continuous with zero device dropouts.
- PTP sync stays sub-100 µs across all nodes.
Risks and mitigations
- Meeting-room floorplan not yet polygonized. Mitigation: run on the library floor's largest cell (50.7 m² per
gis_cells); rerun on the meeting room when its polygonization lands. - Mobile-app permission flow drops a participant mid-session. Mitigation: app heartbeat alerts the server; investigator pauses the scenario, re-onboards, resumes.
- iOS background-BLE-adv restrictions confuse F1.C. Mitigation: enrol all F1 participants as Android (per EXP-P1.7 known limitation).
- Smartwatches in F1.D advertise random MACs not the app UUID. Mitigation: BLE listener filters by app's service UUID — the watches should not be counted; F1.D succeeds if and only if that filter holds. Documented gate.
- Manual spot-check observer disagrees with task schedule. Mitigation: trust the task schedule (it is the prescription); spot-check is the secondary truth. Discrepancies > 1 person are investigated as scenario failures.
Dependencies
- EXP-P1 — Phase D dress rehearsal passed.
- Mobile app working (Phase C of EXP-P1).
gis_place_deviceregistrations for the deployment room.- 5–15 participants for the gamification session.
Related work in vault
- billah2021_69a2 — 95 % BLE-based occupancy, the relevant precedent.
- shahbazian2023_1172 — combined BLE + WiFi survey context.
- longo2019_b72f ↗ — nominal-vs-effective penetration framing the F1.C result must respect.
- choi2022_17c2 ↗ — link geometry baseline.
Cross-experiment links
- EXP-P1 — provides the hardware platform.
- EXP-F2 — inherits the ground-truth chain.
- EXP-F3 — inherits the per-link feature pipeline.
Notes
EXP-F1 is the foundation. If it fails, every downstream field claim is anchored on a chain that can't be trusted. The gamification loop is the structural advance that makes the validation cost manageable — 1 h of scripted scenarios replaces what EXP-001 required as multi-day continuous manual counting.