Wi-Fi CSI explained: from channel state information to human sensing

By Wu Jun · Updated 2026-11-02 · 6 min read

Wi-Fi CSI (Channel State Information) is the per-subcarrier, per-antenna complex channel measurement taken by a Wi-Fi receiver. Where RSSI gives you one number (how strong the signal is), CSI gives you amplitude and phase for every subcarrier — which is why it can see motion, not just strength.

Everything on this site comes from a real lab: a GL-MT6000 (MT7986) router, 5 GHz / 80 MHz, 256 subcarriers, tx 0/1 × rx 0/1/2/3. A 10-minute run captured 57,293 chain records at 95.5 records/s, which collapse to 7,609 grouped measurements, or about 12.68 Hz; the anomaly-filtered analysis uses 12.64 Hz. The daemon used about 5.2 MB resident memory (raw capture published [1]).

A useful mental model

For each measured subcarrier and spatial stream, a simplified receiver model is:

H[k] = Y[k] / X[k]

X[k] is the known training information the receiver can use, Y[k] is what arrived, and H[k] is the estimated channel response. Its magnitude (|H[k]|) is the CSI amplitude; its angle is the CSI phase. A moving person changes the paths through which the radio wave travels, so many H[k] values change together over time. That is the measurable signal behind Wi-Fi sensing [2].

This model also explains the main limitation: CSI is a channel measurement, not a camera frame. It does not contain a room image, a face or a direct body map. Research may estimate coarse activity or pose from a controlled multi-antenna capture, but that is an inference from channel changes, not something visible in a raw CSI record.

Four quantities that are not interchangeable

CSI articles often mix records, values, chains and time samples. Keep these units separate:

Quantity in this project What it counts What it does not mean
256 subcarriers frequency-domain samples within one chain 256 snapshots over time
8 chains (2 Tx × 4 Rx) spatial measurements associated with one group 8 independent users or 8 rooms
57,293 chain records outer records in the 10-minute file 57,293 independent measurements
7,609 bit-15 groups measurements after joining chain records 7,609 fixed 8-chain packets
95.5 chain records/s payload record throughput 95.5 independent snapshots/s
about 12.68 closed groups/s independent measurement rate after grouping the rate of every individual chain value
about 12.64 analysis groups/s rate after the documented anomaly filter (7,583 groups) a second independent data set

The 10-minute capture contains both 8-chain and 4-chain groups. Treating all 57,293 records as independent samples, or blindly dividing them by eight, produces the wrong time axis and can create a spectral peak that is not in the physical signal. The public parser groups on chain_info bit 15 instead [3].

RSSI vs CSI

RSSI CSI
Output one scalar (dBm) complex I/Q per subcarrier
Frequency resolution none 256 subcarriers @ 80 MHz
Spatial resolution none per Tx/Rx chain
Typical use link quality activity, breathing, gestures, positioning

What it can and cannot do

Proven directions: presence/occupancy, activity and fall detection, respiration and heart rate (seated, still), gesture recognition, coarse localisation — all surveyed in the field's most-cited review [2].

Where projects fail:

  1. "Seeing through walls" is over-hyped — you detect channel changes caused by motion, not images.
  2. Models do not transfer across rooms, furniture or body poses.
  3. Sampling jitter destroys low-frequency analysis (breathing/heart rate).
  4. Different chips produce very different CSI — model portability is poor.

Five hardware routes

Route Bandwidth / subcarriers Cost Coverage
Intel 5300 CSI Tool [4] [5] 20 MHz / 30 used NIC one PC
Atheros CSI Tool [6] 40 MHz / 114 used NIC one PC
ESP32 (esp-csi / CSI Tool) [7] 20 MHz / 30–64 from $3 single point
Nexmon CSI (Pi/phone) [8] 80 MHz / 256 from $40 single point
Router (MT7986 + mt76 CSI) 80 MHz / 256 one router whole home
Research (PicoScenes / SDR) [9] any $1k+ bench

For long-running, whole-home sensing the router form factor wins: it is already powered 24/7, sits in the middle of the house and needs no extra hardware.

Pipeline

router (capture)                     host (analysis)
OpenWrt + mt76 CSI patch   --UDP-->  parse → buffer → features → detection
mt76-csi-daemon :8888                visualise (heatmap/waterfall/doppler) + storage

Three things are mandatory for CSI to work at all:

  1. a CSI-capable firmware (MT7986: the 2026-05-15 build),
  2. the frame-type filter (frame_type = 0,34) — without it the firmware reports nothing,
  3. the target station's MAC in the MAC filter list.

A 10-minute verification protocol

Before building a classifier, prove that the capture itself is trustworthy:

  1. Freeze the radio variables. Record router model, driver and Wi-Fi firmware versions, channel, band width, antenna state, country/regulatory setting and the client model.
  2. Create controllable traffic. Use a LAN host and a repeating transfer or ping workload; do not use an internet speed-test server as the packet clock.
  3. Capture a known interval. Start with 60 seconds and repeat for 10 minutes. Record the expected start/end time outside the CSI file as well as in it.
  4. Check record integrity. Parse every outer record, confirm that timestamps are monotonic enough for the format, and look for long gaps, malformed headers and an unread tail.
  5. Group before resampling. Close a measurement on chain_info bit 15. Report the counts of 4-chain, 8-chain and incomplete groups separately.
  6. Measure quality, not just volume. Plot group interval, chain completeness, zero-value ratio, RSSI and SNR over time; exclude anomalies only with a documented rule.
  7. Publish the chain of evidence. Keep the raw capture, parser version, manifest, SHA-256 and negative results. A polished heatmap without those inputs is not independently reproducible [10].

The 10-minute run on this site produced 57,293 outer records, 7,609 complete groups and about 12.68 groups/s. Those three numbers were calculated from the same file but answer different questions; the dataset page exposes the counts and caveats so readers can verify them [3].

How to read a CSI claim

Claim First question to ask Why it matters
"We captured 256 subcarriers" per chain, or after undocumented interpolation? the number of frequency points is not the temporal sample rate
"We have 2,048 CSI values" values, chain records, or independent snapshots? 256 × 8 describes one grouped measurement, not eight seconds of data
"The sample rate is 95 Hz" record rate or grouped measurement rate? algorithms use the time axis, not file-row count
"Breathing accuracy is 95%" distance, posture, window length and reference device? accuracy without a protocol cannot transfer to another room
"It works through a wall" controlled research setup or consumer product? array geometry, wall material and ground truth dominate the result
"The model generalises" was it tested in a different room, subject and hardware setup? CSI distributions change with all three

Failure map

Symptom Check first Do not do this
CSI enable command succeeds but no records arrive firmware build, frame-type filter, MAC filter and receive traffic assume the client is broken
Records exist but the group count is wrong chain_info bit 15 and unread tail bytes divide the total record count by eight
Groups exist but the time axis has false peaks packet trigger, power save, group interval and resampling tune a classifier on the broken axis
A detector looks excellent offline window overlap, subject leakage and same-session train/test split report the result as real-world accuracy
Normal Wi-Fi collapses after CSI is enabled separate AP interface, rate-control state and client width keep stacking CSI settings without a rollback
The interpretation needs identity or images the physical quantity actually measured describe a channel-response experiment as a camera

Start here

Standards and further reading

Please respect local law and ethics: do not use Wi-Fi sensing for non-consensual surveillance. CSI can reveal presence and routines even without images or audio. Obtain consent, minimise retention and publish only anonymised data.

References and data sources

Every external claim carries a source and an evidence grade (grading scheme). Grade E marks first-party, reproducible measurements from this project.

  1. Grade E · first-party measurement This project's 10-minute raw capture (57,293 records / 600.0 s, SHA-256 00373f83…95e2)
    Router CSI Lab · 2026
    okwujun.pw/en/datasets/ · verified: Reassembled chunks verified byte-identical (2026-10-11) · The local raw master has SHA-256 00373f83…95e2; the public de-identified derivative has SHA-256 527466ce…a440. They must not be confused.
  2. Grade A · standard/review WiFi Sensing with Channel State Information: A Survey
    W. Ma, W. Zhou, X. Wang · ACM Computing Surveys · 2019
    doi:10.1145/3310194 · citations 857 · verified: CrossRef API, 2026-10-11 · The field's most-cited CSI sensing survey (857 citations, verified via CrossRef).
  3. Grade E · first-party measurement Router CSI Lab — GL-MT6000 (MT7986) Wi-Fi CSI dataset, 10 s sample + 10 min capture
    Router CSI Lab · 2026
    doi:10.5281/zenodo.23434789 · verified: CC BY 4.0; SHA-256 published; Zenodo DOI 10.5281/zenodo.23434789 · The dataset has a Zenodo DOI (10.5281/zenodo.23434789) and can be cited directly.
  4. Grade B · peer-reviewed Tool release: gathering 802.11n traces with channel state information
    D. Halperin, W. Hu, A. Sheth, D. Wetherall · ACM SIGCOMM Computer Communication Review · 2011
    doi:10.1145/1925861.1925870 · citations 1713 · verified: CrossRef API, 2026-10-11 · The formal paper for the Intel 5300 CSI Tool (1713 citations) — the widely reproduced starting point for CSI capture.
  5. Grade C · official docs dhalperi/linux-80211n-csitool-supplementary — Intel 5300 CSI Tool (code)
    D. Halperin et al.
    github.com/dhalperi/linux-80211n-csitool-supplementary · verified: GitHub API 2026-10-11 (stars 221, last push 2020-05-25) · Code repository for the Intel 5300 tool; its last commit was in 2020, which is the basis for calling it unmaintained.
  6. Grade B · peer-reviewed Precise Power Delay Profiling with Commodity WiFi (Atheros CSI Tool)
    Y. Xie, Z. Li, M. Li · ACM MobiCom 2015 · 2015
    doi:10.1145/2789168.2790124 · citations 521 · verified: CrossRef API, 2026-10-11 · The paper behind the Atheros CSI Tool (521 citations); describes CSI / power-delay-profile capture at 40 MHz.
  7. Grade C · official docs espressif/esp-csi — Applications based on Wi-Fi CSI
    Espressif Systems
    github.com/espressif/esp-csi · verified: GitHub API 2026-10-29 (stars 1,723; README confirms the complete ESP32 series list and three sender/receiver routes) · The official README states: "All ESP32 series support CSI, including ESP32 / ESP32-S2 / ESP32-C3 / ESP32-S3 / ESP32-C5 / ESP32-C6 / ESP32-C61."
  8. Grade C · official docs seemoo-lab/nexmon_csi — CSI extraction on various Broadcom Wi-Fi chips
    SEEMOO Lab, TU Darmstadt
    github.com/seemoo-lab/nexmon_csi · verified: GitHub API 2026-10-29 (stars 479, last push 2026-09-30; README lists bcm43455c0 on Raspberry Pi 3B+/4B/5)
  9. Grade C · official docs PicoScenes — modern Wi-Fi ISAC research platform
    Z. Jiang et al. (PicoScenes project)
    ps.zpj.io/ · verified: ps.zpj.io HTTP 200, 2026-10-11 · Official site of a software/hardware platform for Wi-Fi ISAC research (the SDR route).
  10. Grade E · first-party measurement Router CSI Toolkit — capture/analysis/watchdog scripts (MIT, public repository)
    Router CSI Lab · 2026
    github.com/jjjwu/router-csi-toolkit · verified: GitHub API verified the public repository, capture-quality preflight, successful CI and the v0.1.3 release on 2026-11-02; the archive SHA-256 is 59f144c0…adea7 · The public repository includes a dependency-free capture preflight; the browser checker uses the same container definition and evidence boundaries.
  11. Grade A · standard/review IEEE 802.11bf — WLAN Sensing (standard project)
    IEEE Standards Association · IEEE 802.11 Working Group · 2020
    standards.ieee.org/ieee/802.11bf/10331/ · verified: standards.ieee.org HTTP 200, 2026-10-11 · Official project page for turning sensing into a WLAN standard capability (approved September 2020).
  12. Grade C · official docs WST — Hands-on Wireless Sensing with Wi-Fi (Tsinghua tutorial)
    Tsinghua University TNS group
    tns.thss.tsinghua.edu.cn/wst/ · verified: tns.thss.tsinghua.edu.cn HTTP 200, 2026-10-11 · A university-run hands-on Wi-Fi sensing course (slides and datasets); not a peer-reviewed paper.
  13. Grade D · preprint/wiki ruvnet/RuView — community Wi-Fi spatial-intelligence project
    r. u. v. (community maintainer) · 2026
    github.com/ruvnet/RuView · verified: GitHub API 2026-10-11 (stars 97,237; created 2025-06-07) · Community project, not peer-reviewed: its marketing claims (real-time “spatial intelligence” / vital signs) have no independent reproduction — treat as a lead, not a conclusion.