Environment

Single meeting / seminar room (target: FIIT meeting room, ~5–15 capacity) once the room polygonization lands in PostGIS. Falls back to the library floor's largest cell ([[fiit-library-polygonized-9]] et al.) if the meeting-room floorplan is delayed.

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:

  1. Enter (one at a time) — app says "walk to cell-A, hold 30 s, then cell-B, 30 s, …"; participant follows.
  2. Steady state (10 min) — N participants in the room, app tells each one which cell to occupy.
  3. 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.
  4. 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

  1. Bring-up gate — EXP-P1 Phase D dress rehearsal passed within last 7 days.
  2. Room registrationgis_create_experiment("exp-f1-trial-1", floor="<target>"); place all 8 devices via gis_place_device.
  3. Calibration baseline — empty room, 10 min CSI + BLE recording with 0 occupants. Establishes the noise floor.
  4. Run sub-scenarios F1.A → F1.D in one session if logistics allow, otherwise across two sessions.
  5. Synchronisation check — every device's first data row must be within 100 ms of the others. (PTP from EXP-P1.5.)
  6. 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

  1. BLE count vs task-schedule count — MAE per 1-s window. Headline.
  2. BLE count vs manual spot-check — MAE per spot-check sample.
  3. 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.)
  4. BLE noise robustness — F1.D: does the per-UUID adv-counting filter survive nearby smartwatches?
  5. CSI quality — packet capture rate per Pi 5 node; ≥ 95 % over a 30-min window.
  6. 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

  1. 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.
  2. Mobile-app permission flow drops a participant mid-session. Mitigation: app heartbeat alerts the server; investigator pauses the scenario, re-onboards, resumes.
  3. iOS background-BLE-adv restrictions confuse F1.C. Mitigation: enrol all F1 participants as Android (per EXP-P1.7 known limitation).
  4. 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.
  5. 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_device registrations for the deployment room.
  • 5–15 participants for the gamification session.
  • 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.
  • 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.

Provenance

not recorded

Data types

  • csi-amplitude
  • csi-phase
  • ble-advertisement-log
  • ble-rssi
  • ground-truth-occupancy
  • mobile-app-task-log