Device-Free Wireless Sensing of Crowd Size in Public Transportation Environments

What it is

A public real-world dataset for device-free crowd-size estimation from BLE RSSI, captured on two Belgian public-transport platforms by Janssens et al. (University of Antwerp / imec). A fixed Bluetooth Low Energy wireless sensor network (WSN) is deployed along each platform; every node periodically measures the RSSI of the advertising packets it hears from every other node and from a gateway, producing a time series of per-link RSSI. A crowd standing between nodes attenuates and scatters those links, so the link-RSSI pattern carries occupancy — the device-free, camera-free, privacy-preserving counting mechanism the dataset targets. Manual people counts at irregular intervals provide ground truth, and rail-vehicle presence at the platform is separately marked.

This is the modality the paper csi-recalibration-plane reaches for when it argues a co-registered power (RSSI) channel can anchor a count where a CSI variance feature is dark: it is a real-world BLE-RSSI device-free counter, not CSI. Treat it as evidence for the RSSI-occupancy mechanism and as a cross-modality generalization site — not as a drop-in extra fold for the CSI temporal-CV LOEO pool (different feature entirely).

Method + results on this data are in the companion paper janssens2024_2f53 ; the dataset itself is documented in janssens2026_7bc3 .

Verified specs

Sampled directly from the files (not the README):

  • Two sites. data_platform_indoor/ (underground/covered platform) and data_platform_outdoor/ (open platform), upstream trees preserved verbatim.
  • RSSI datarssi_data/rssi_platform_<site>_<YYYY-MM-DD>.csv, columns timestamp, node_id, cycle_id, rssi_gw, rssi_values. rssi_values is a length-60 array of per-peer RSSI (positive integer magnitude; 0 = no measurement that cycle); rssi_gw is the node→gateway RSSI. High-rate: the first indoor day alone is ~218k rows.
    • Indoor RSSI days: 2023-05-17, 05-18, 05-19, 07-17 (4). Active node IDs span 0–33 with gaps (~27 of the 60 address slots populated) plus a gateway.
    • Outdoor RSSI days: 2024-06-11, 06-12, 07-02 (3).
  • Training / ground truthtraining_data/training_platform_<site>_<date>.csv, columns timestamp, value. value >= 0 is a manual people count (indoor up to 65, outdoor up to 43); value ∈ {-1, -2} are rail-vehicle presence markers, not counts — filter them out before any counting analysis. Indoor has 3 label days (05-17, 05-19, 07-17 — 05-18 has RSSI but no labels); outdoor has 3.
  • Node layoutwsn_indoor_environment.json / wsn_outdoor_environment.geojson: GeoJSON FeatureCollections of gateway + node positions. Indoor CRS is RELATIVE_XYZ_METERS (origin = NW corner of platform, z = m above ground); outdoor has 13 point features (gateway + 12 nodes).
  • Size — 15 files, 210,466,236 bytes decompressed (indoor ~176 MB, outdoor ~34 MB).

Acquisition & storage

Decompressed and mirrored to our object store (both platform trees preserved):

s3://monad-knowledge/datasets/transport-crowd-rssi/
    _manifest.json
    data_platform_indoor/{rssi_data,training_data}/… , wsn_indoor_environment.json
    data_platform_outdoor/{rssi_data,training_data}/… , wsn_outdoor_environment.geojson

Load per the datasets contract (read _manifest.json first; the files[] carry site / kind / date / ext facets). CLI:

AWS="aws --profile monad-knowledge --endpoint-url https://fsn1.your-objectstorage.com"
$AWS s3 cp s3://monad-knowledge/datasets/transport-crowd-rssi/_manifest.json -

For a reduction, join rssi_data to training_data on timestamp within a (site, day), drop training rows with value < 0, and build per-link RSSI-attenuation features against the empty-platform baseline. LOEO folds = the two sites (indoor/outdoor) or per-day within a site. License CC BY 4.0 — redistributable with attribution; cite janssens2026_7bc3 (data) and janssens2024_2f53 (method).

Why it matters here

  • Real-world anchor for the RSSI/BLE occupancy mechanism — now measured. csi-recalibration-plane §4/§6 leans on a synthetic co-registered BLE RSSI anchor (ρ(N,RSSI) ≈ −0.83, −0.115 dB/person in silico). The measured counterpart, computed here by monad_knowledge/notebooks/python/rssi_transport_crowd_anchor.py (mean link RSSI vs manual count, ±30 s windows, rail-masked, B=3000 bootstrap; artefact _attachments/transport-crowd-rssi/rssi_transport_crowd_anchor.metrics.json): within-site ρ(count, RSSI) = −0.69 (indoor) / −0.62 (outdoor), slope ≈ −0.044 dB/person (both), fixed-effects pooled ρ = −0.65 [−0.70, −0.60], −0.044 [−0.048, −0.040] dB/person, resolvable step ≈ 12 people. So the anchor mechanism is real but ~2.6× shallower and noisier than the ray-traced prior, and coarser (a ~12-person step, vs the synthetic 3–10). Two independent corroborations of the paper's thesis fall out: (i) the sign and monotonicity hold on real BLE hardware across two sites; (ii) naive cross-site pooling flips the slope to +0.05 dB/person (Simpson's paradox) — the anchor's absolute scale is site-local, the exact "mechanism travels, scale does not" claim, now visible in the RSSI channel. Feeds ble-periodic-calibration.
  • Cross-modality, not cross-CSI. It does not extend the CSI temporal-CV LOEO (WiMANS + meneghello); the feature is link RSSI, not CSI amplitude variance. Its value to occupancy-csi-variance is as an independent-modality check that device-free counting scale is site-local (two sites, distinct node geometries) — the same mechanism-vs-scale question in a different radio.
  • Rail-vehicle confound is a labelled event, which makes this a clean testbed for the "geometry/event changes near the links force re-anchoring" claim (a train at the platform is a large, labelled, recurring scatterer change).