Simulation · 2026
RuView
ForkHuman sensing from WiFi Channel State Information — presence, vital signs, activity and pose, with no camera in the room.
0 Cameras used
Simulation
2026
My contribution
Rust workspace architecture and the DSP chain — CSI acquisition, phase sanitisation, breathing-band extraction — together with the ESP32-S3 and mmWave edge firmware that feeds it.
Built on ruvnet/RuView , which deserves the credit for the engine underneath.
Key decisions
- The DSP chain starts with phase sanitisation — linear detrending and conjugate multiplication between antenna pairs — because carrier and sampling offsets introduce phase drift that dwarfs the signal of interest.
- Respiration is isolated with a bandpass at roughly 0.1–0.5 Hz, since chest displacement is periodic and nothing else in a quiet room is periodic at that rate.
- Coarse pose is labelled as the hardest and least certain output rather than presented at the same confidence as presence, because the channel tensor yields reliable motion signatures long before it supports skeletal keypoints.
- Acquisition and the first stages of the chain run on the ESP32-S3 and mmWave edge firmware, so what leaves the sensor is derived features rather than a raw recording of the room.
The physical idea
A WiFi radio estimates the channel between transmitter and receiver on every subcarrier so it can equalise the signal. That estimate — Channel State Information — is a fine-grained measurement of how the radio environment is shaped, and a human body is part of the radio environment. Move, breathe, or simply be present, and the channel changes measurably.
So the sensing already exists. It is discarded as a by-product. RuView keeps it.
Every WiFi radio in the building is already measuring the room. The question was never whether the signal is there — only whether anyone reads it.
Signal chain
Raw CSI is unusable as it arrives. Carrier frequency offset and sampling time offset introduce phase drift that dwarfs the signal of interest, so the chain starts with phase sanitisation — linear detrending across subcarriers, conjugate multiplication between antenna pairs to cancel common-mode error.
From the cleaned tensor: amplitude and phase variance over a short window gives presence — even a motionless body raises the variance floor. A bandpass at roughly 0.1–0.5 Hz on the wrapped phase isolates respiration, since chest displacement is periodic and nothing else in a quiet room is periodic at that rate; zero-crossing on the bandpassed trace yields breaths per minute. Activity classification runs on spectral features across a longer window. Coarse pose — a 17-keypoint skeletal estimate — is the hardest and least certain of the four, and is labelled as such in the output rather than presented at the same confidence as presence.
Why edge firmware matters
Streaming raw CSI to a server is bandwidth the deployment does not have and a privacy posture the use case cannot survive. The ESP32-S3 and mmWave firmware run acquisition and the first stages of the chain on-device, so what leaves the sensor is already derived features rather than a raw recording of the room.
What sensing without cameras is for
Elder-care presence and fall detection in bathrooms and bedrooms — the rooms where a camera is unacceptable and where falls actually happen. Respiration monitoring without a worn device. Occupancy for building systems that does not create a surveillance archive as a side effect.