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) anddata_platform_outdoor/(open platform), upstream trees preserved verbatim. - RSSI data —
rssi_data/rssi_platform_<site>_<YYYY-MM-DD>.csv, columnstimestamp, node_id, cycle_id, rssi_gw, rssi_values.rssi_valuesis a length-60 array of per-peer RSSI (positive integer magnitude;0= no measurement that cycle);rssi_gwis 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 truth —
training_data/training_platform_<site>_<date>.csv, columnstimestamp, value.value >= 0is 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 layout —
wsn_indoor_environment.json/wsn_outdoor_environment.geojson: GeoJSON FeatureCollections of gateway + node positions. Indoor CRS isRELATIVE_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 bymonad_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).