wifi-densepose/examples
rUv d9ca9b3684
research(R8): RSSI-only person count retains 95% of full-CSI accuracy (#703)
Builds directly on R5's band-spread observation. If the count-task
signal is spread across the WiFi band (R5: max/mean ratio 2.85× across
56 subcarriers), then RSSI — which is the integral of |H_k|^2 across
the band — keeps most of the information. The naive prior (RSSI throws
away 98% of CSI bytes) is misleading; the relevant metric is how much
of the *signal* is in the integral, not how many bytes are in the
representation.

Tested by aggregating each existing [56 × 20] CSI window down to a
[20]-vector RSSI proxy (mean across subcarriers per frame), training a
tiny MLP (Linear 20→32→8, 656 params, 5 KB) with vanilla NumPy SGD for
200 epochs on the same random 80/20 split as cog-person-count v0.0.2.

Result:

  Full CSI v0.0.2   62.3% accuracy
  RSSI-only (this)  59.1% accuracy   = 94.82% retained

Per-class is also markedly more *balanced* (RSSI: 59.5 / 58.6 ; full
CSI: 86.2 / 34.3) — the tiny model on a low-dim input can't cheat by
leaning on class 0 the way v0.0.2's larger model does at inference.

What this enables on a 10-year horizon: phones, laptops, smart
speakers, smart TVs, smart lights — anything with WiFi reports RSSI
and anything with a CPU can run a 656-param MLP. Person counting
becomes a federated property of any room with WiFi, not a property of
the ESP32-S3 fleet.

What this doesn't prove (called out explicitly in the research note):
- Single room, single operator, single 30-min recording
- 2-class problem (label distribution is {0, 1})
- Single random draw — needs K-fold + multi-room replication

Three follow-up experiments queued in R8-rssi-only-count.md §'What's
next on this thread':
- Multi-room replication once #645 lands
- 3-class extension (0 / 1 / 2+) — measure the info-rate cliff
- Run on a non-ESP32 RSSI source (e.g. iw event on Linux laptop)

Files:
* examples/research-sota/r8_rssi_only_count.py — pure-NumPy, no
  framework deps. Trains + evals in 0.72 s on CPU.
* examples/research-sota/r8_rssi_only_results.json — full JSON dump
  for cross-tick reproducibility.
* docs/research/sota-2026-05-22/R8-rssi-only-count.md — method,
  measured numbers, interpretation, what doesn't work yet.
* docs/research/sota-2026-05-22/PROGRESS.md — updated index + Done
  log.

Coordination note: horizon-tracker is working on tools/ruview-mcp/
+ tools/ruview-cli/ + ADR-104 — this commit deliberately stays out
of those paths.
2026-05-21 23:18:09 -04:00
..
environment feat: 4 sensing examples — sleep apnea, stress, room environment 2026-03-15 16:50:04 -04:00
happiness-vector chore(repo): rename rust-port/wifi-densepose-rs → v2/ (flatten to one level) (#427) 2026-04-25 21:28:13 -04:00
medical feat: 10-in-1 medical vitals suite from single mmWave sensor 2026-03-15 18:05:42 -04:00
research-sota research(R8): RSSI-only person count retains 95% of full-CSI accuracy (#703) 2026-05-21 23:18:09 -04:00
sleep feat: 4 sensing examples — sleep apnea, stress, room environment 2026-03-15 16:50:04 -04:00
stress feat: 4 sensing examples — sleep apnea, stress, room environment 2026-03-15 16:50:04 -04:00
three.js fix(three.js): graceful banner when X Bot.fbx 404s on gh-pages (#651) 2026-05-19 18:43:21 -04:00
README.md feat: 10-in-1 medical vitals suite from single mmWave sensor 2026-03-15 18:05:42 -04:00
ruview_live.py feat: happiness scoring pipeline + ESP32 swarm with Cognitum Seed (#285) 2026-03-20 18:46:34 -04:00

README.md

Examples

Real-time sensing applications built on the RuView platform.

Unified Dashboard (start here)

pip install pyserial numpy
python examples/ruview_live.py --csi COM7 --mmwave COM4

The live dashboard auto-detects available sensors and displays fused vitals, environment data, and events in real-time. Works with any combination of sensors.

Individual Examples

Example Sensors What It Does
ruview_live.py CSI + mmWave + Light Unified dashboard: HR, BR, BP, stress, presence, light, RSSI
Medical: Blood Pressure mmWave Contactless BP estimation from HRV
Medical: Vitals Suite mmWave 10-in-1: HR, BR, BP, HRV, sleep stages, apnea, cough, snoring, activity, meditation
Sleep: Apnea Screener mmWave Detects breathing cessation events, computes AHI
Stress: HRV Monitor mmWave Real-time stress level from heart rate variability
Environment: Room Monitor CSI + mmWave Occupancy, light, RF fingerprint, activity events

Hardware

Port Device Cost What It Provides
COM7 ESP32-S3 (WiFi CSI) ~$9 Presence, motion, breathing, heart rate (through walls)
COM4 ESP32-C6 + Seeed MR60BHA2 ~$15 Precise HR/BR, presence, distance, ambient light

Either sensor works alone. Both together enable fusion (mmWave 80% + CSI 20%).

Quick Start

pip install pyserial numpy

# Unified dashboard (recommended)
python examples/ruview_live.py --csi COM7 --mmwave COM4

# Blood pressure estimation
python examples/medical/bp_estimator.py --port COM4

# Sleep apnea screening (run overnight)
python examples/sleep/apnea_screener.py --port COM4 --duration 28800

# Stress monitoring (workday session)
python examples/stress/hrv_stress_monitor.py --port COM4 --duration 3600

# Room environment monitor
python examples/environment/room_monitor.py --csi-port COM7 --mmwave-port COM4

# CSI only (no mmWave)
python examples/ruview_live.py --csi COM7 --mmwave none