Of everything Wi-Fi sensing claims to do, measuring breathing is the one that most sounds like a magic trick. It is not magic, and it is not medical. It is a careful reading of a very small, very slow signal — and understanding exactly how small and how slow is the whole point of this article.
01The idea, honestly
As covered in our complete CSI guide, Channel State Information is the receiver's measurement of how a Wi-Fi signal was reshaped crossing a room, reported as amplitude and phase for each subcarrier. Anything that moves changes that pattern. Breathing is just a very small, very regular motion, so it leaves a very small, very regular change in the CSI.
That regularity is the key. A random fidget is hard to pick out, but breathing repeats at a steady pace, and periodic signals are exactly what frequency analysis is built to find, even when they are faint. So the task is not "see the chest move" but "find the one slow rhythm hiding in a noisy stream of numbers". When the subject cooperates by staying still, that rhythm is recoverable. When they do not, it is gone.
02The physics of a breath in the channel
When you inhale, your chest and abdomen expand by a small amount — on the order of a few millimetres to a centimetre or so of surface movement. The Wi-Fi signal reaching the receiver is the sum of many copies that bounced off the walls, the furniture and you. As your chest surface moves, the length of the paths that reflect off your body changes by that same small amount, so those reflected copies arrive with a slightly different phase and add up slightly differently.
Because 2.4 GHz and 5 GHz wavelengths are only centimetres long, a path-length change of even a few millimetres is a meaningful fraction of a wavelength, so it produces a measurable swing in the CSI. Breathe in, breathe out, and the CSI amplitude and phase rise and fall in step with your chest. Repeat it steadily and you get the slow, near-sinusoidal wave in the figure above.
03Finding the breathing rate: band-pass, then FFT
The chest signal arrives buried under three kinds of nuisance: fast jitter from radio noise and small movements, slow drift as the room and hardware warm up, and the occasional large jump when the subject shifts. The classic pipeline peels these away in order.
- Pick a stable stream. Take CSI amplitude (or an unwrapped phase difference) from the subcarriers that respond most to the subject, and sample it steadily — tens of samples per second is plenty for breathing, because the signal itself is below 1 Hz.
- Band-pass filter. Keep only the frequencies where breathing lives: roughly 0.1 to 0.5 Hz, that is 6 to 30 breaths per minute for a resting adult. This single step rejects both the slow drift below the band and the faster noise above it, leaving mostly the breathing wave.
- Transform to frequency. Run an FFT over a window of the filtered signal. A clean recording shows a clear peak; the frequency of that peak, times 60, is the breathing rate in breaths per minute.
- Window length matters. Frequency resolution is roughly one divided by the window length, so to tell 12 from 15 breaths per minute apart you need a window of tens of seconds — commonly 30 to 60 seconds. Shorter windows react faster but give a coarser, jumpier rate.
There is a real trade-off in that last point. A long window gives a precise, stable rate but cannot track a change quickly; a short window updates often but is noisy and can latch onto a harmonic or a stray movement. Picking the window is the main tuning decision in a breathing monitor. The filtering and baseline work that feeds this pipeline is the subject of cleaning CSI data.
04What the setup actually needs
Breathing detection is far less forgiving than motion or presence. It works in a narrow band of conditions, and knowing them is the difference between a clean reading and a flat line of noise.
| Condition | Why it matters |
|---|---|
| Subject is still | Breathing is tiny; any larger movement swamps it completely |
| Subject is close to the link | Reflections off a nearby body dominate the channel more strongly |
| Stable link with steady packets | FFT needs an even stream; gaps distort the frequency estimate |
| Quiet environment | Fans, pets and other people add competing periodic motion |
The happy accident is that these conditions line up with when breathing monitoring is useful anyway: someone resting, reading, or sleeping in their own room, close to a bedside device. A person walking around does not need their breathing counted, and could not have it counted by this method regardless.
05Why heart rate is a much harder problem
It is tempting to assume that if Wi-Fi can read breathing it can read a heartbeat too. Be sceptical. A heartbeat moves the body surface far less than breathing does — a fraction of a millimetre versus several millimetres — so the signal is much smaller to begin with. It also sits at a higher frequency, roughly 0.8 to 2 Hz for about 50 to 120 beats per minute, right where breathing's own harmonics and ordinary movement noise live, so it is both tiny and crowded.
Research setups have shown heart-rate estimates from radio signals, but they lean on cleaner, often multi-antenna hardware, a completely motionless subject, and heavy processing. On a single hobby board, treat heart rate as an experiment, not a feature, and be honest in anything you build that breathing is the reliable vital sign and heart rate is not. Over-claiming here is how Wi-Fi sensing projects lose credibility.
06Limits and keeping it to your own space
Two honest limits sit on top of that warning. First, it is single-subject: two people breathing in the same link produce two overlapping rhythms that a simple FFT cannot cleanly separate. Second, it is fragile — lose stillness or lose steady packets and the reading collapses, often without any obvious sign that it has.
And as with all Wi-Fi sensing, build it for your own space and your own body, or someone who has agreed to it, on a network you control. The point of camera-free sensing is privacy; that only holds if you respect the privacy of others while you experiment. If you want to see the kind of still-subject, close-range micro-motion this relies on put to a gentler use, our fall-detection explainer works the same signal from the opposite end — the sudden large movement rather than the tiny steady one.
07FAQ
Can Wi-Fi really measure breathing without touching you?
Yes, within limits. The small rise and fall of the chest changes the Wi-Fi channel, and that slow change shows up in CSI. With a still subject close to the link you can recover a breathing rate, but it is nothing like a medical device and it fails as soon as the person moves.
What breathing rate range can CSI pick up?
Normal adult breathing sits around 0.1 to 0.5 Hz, which is about 6 to 30 breaths per minute. A band-pass filter is set to that window so slow drift and faster movement are both rejected, leaving the periodic chest signal for the rate estimate.
Can Wi-Fi CSI measure heart rate too?
In theory, but it is much harder than breathing. The heartbeat moves the body surface far less than breathing does, so its signal is tiny and easily buried. Reliable heart-rate sensing needs cleaner hardware and heavier processing than a single hobby board, so treat it as experimental.
Does the person have to stay still for CSI breathing detection?
Almost completely still, yes. Breathing is a tiny, slow motion, so any larger movement such as typing or shifting in a chair swamps it entirely. The method works best on someone resting quietly, close to the link, which is exactly the situation where it is also most useful.