One packet, one matrix
When an ESP32 receives a WiFi frame, the PHY layer reports CSI as a complex vector:k is one OFDM subcarrier, a narrow frequency slice of the channel. A typical 20 MHz WiFi channel has 64 subcarriers (52 data-bearing). You get 52 complex numbers per packet: 52 amplitude-phase pairs describing how the signal traveled at each frequency.
Stack packets over time and you have a 2D matrix:
Multipath as superposition: a worked example
Suppose a WiFi link crosses a 5 m room. Three dominant paths reach the receiver:
The channel at frequency f is:
What RSSI throws away
RSSI integrates power across all subcarriers (and often across antennas and packets):Implications for system design
- Never reduce CSI to RSSI for sensing. If your pipeline only uses signal strength, you are leaving the mechanism on the table.
- Subcarrier selection matters. Not all subcarriers respond equally to a given motion. FreeDetector uses greedy selection of the most occupancy-responsive subcarriers. Feature extraction should use the full vector, learned attention, or selected indices, not a single arbitrary subcarrier.
- Time resolution is packet-rate. Each row in the CSI matrix arrives with one WiFi frame. At 100 packets/second, your Nyquist limit for motion is 50 Hz, fine for walking, marginal for heartbeat. CARM recommended ~800 samples/s for fine activity boundaries; ESP32 deployments typically run well below that.
The ill-posed recovery problem
Recovering body pose from CSI is fundamentally underdetermined. Person-in-WiFi (ICCV 2019) frames it explicitly: 9 antenna pairs × 30 subcarriers = ~270 scalar equations per frame to recover a high-dimensional skeleton. The system does not solve this geometrically. It learns segmentation masks and joint heatmaps from video labels. That is why pose estimation requires research-grade antenna arrays and labeled training pipelines, not a single ESP32 sniffing ambient traffic.Where to go next
How It Works
Macro vs micro-Doppler, phase challenges, and the physics of WiFi sensing.
Sensing Pipeline
What happens to the CSI matrix before inference: preprocessing, filtering, and feature extraction.
ESP32 CSI
What commodity ESP32 hardware actually delivers and where it falls short.
