THEORY · 3 MIN READ

How Wi-Fi sensing detects movement

Wi-Fi signals bounce around a room, and their reflections change when people move. ESPectre measures those changes with a low-cost ESP32, without cameras, microphones, or the cloud.

Furnished room with fixed blue Wi-Fi paths and an amber path reflected by a person left of center before reaching an ESP32 1 · First position
The same room and fixed blue Wi-Fi paths after the person moves right and changes the amber reflected path to the ESP32 2 · A moment later
The blue paths stay the same in both frames. When the person moves, the amber path still goes from the same access point to the same ESP32, but it bounces off a different point and gets longer or shorter. The ESP32 sees that change in the signal it receives.

The room becomes part of the signal

A Wi-Fi signal rarely travels in one straight line from the access point to the receiver. It also bounces off walls, furniture, and people. These copies arrive together and add up, sometimes making the signal stronger and sometimes cancelling part of it. This is called multipath.

In a quiet room, these paths stay fairly stable. When somebody moves, the reflections from their body move too: some paths get longer, shorter, stronger, or weaker, and the signal reaching the ESP32 changes.

From a Wi-Fi packet to CSI

Every Wi-Fi packet starts with a known pattern that helps receivers decode it. Because the ESP32 knows what this pattern should look like, its Wi-Fi hardware can estimate how the room changed it along the way. That estimate is called Channel State Information, or CSI: a snapshot of the radio channel at that moment.

Wi-Fi splits its channel into many closely spaced frequencies called subcarriers. CSI describes how much each one was weakened and shifted on its way to the ESP32. Each subcarrier has two values, I and Q, which together give the strength and phase of that part of the signal.

From channel changes to movement

ESPectre follows CSI packet after packet. A quiet room gives a fairly repeatable pattern; movement causes larger changes across several subcarriers at once. The detector filters out ordinary radio noise, combines the changes over time, and turns them into a movement score and a motion state. The score shows how much the channel is changing in that room; it is not a physical unit and cannot be compared between rooms.

Supported ESP32 chips provide CSI and are powerful enough to run the detector themselves. No radar module or external service is needed.

Simplified I and Q plots showing dense, narrow subcarrier orbits in a quiet room and thicker, overlapping orbits during movement
Each dot is one I/Q measurement of one subcarrier; dots of the same color belong to the same subcarrier. Each CSI packet adds one dot to every orbit, so at 100 packets per second each orbit gains about 100 dots per second. A dot’s distance from the center is the subcarrier’s strength. In a quiet room, the orbits stay dense and narrow. During movement, the strength swings, so the orbits get thicker and can overlap. ESPectre looks at many subcarriers over time, never at a single dot.
Wi-Fi sensing detects changes in the radio environment. It does not identify people, count them, reconstruct their exact movement, or replace a safety-certified presence sensor.

Going deeper

The algorithm reference explains the signal processing and the detectors in detail.