Wi-Fi CSI 完全指南:从信道状态信息到人体感知

作者 Wu Jun · 更新于 2026-11-02 · 约 7 分钟

Wi-Fi CSI(Channel State Information,信道状态信息)是 Wi-Fi 接收端对无线信道"此刻长什么样"的测量结果。 它比我们熟悉的 RSSI 细得多:RSSI 是一个数(信号强度),CSI 是每个子载波、每条收发链上的复数(幅度 + 相位)。

本站的全部内容来自一台 GL-MT6000(MT7986)路由器的实测:5GHz、80MHz、256 子载波、tx 0/1 × rx 0/1/2/3, 10 分钟连续抓到 57,293 条链记录、平均 95.5 条/秒;按 bit15 组合并后是 7,609 次独立测量, 约 12.68Hz;再剔除记录规则公开的异常组后,分析率为 12.64Hz。daemon 常驻内存约 5.2MB (原始数据可核对 [1])。

一个够用的测量模型

对每个子载波和空间流,可以先用一个简化模型理解 CSI:

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

其中 X[k] 是接收端能够利用的已知训练信息,Y[k] 是实际收到的信号,H[k] 是估计出的信道响应。 |H[k]| 是 CSI 幅度,H[k] 的角度是 CSI 相位。人移动时会改变多条无线传播路径,于是大量 H[k] 会随时间一起变化,这就是 Wi-Fi 感知能够利用的物理信号 [2]。

这个模型也说明边界:CSI 是信道测量,不是摄像头画面。原始数据里没有房间图像、人脸或直接的人体模型。 论文可能从受控的多天线数据中推断粗略动作甚至姿态,但那仍然是从信道变化做出的推断,不是 CSI 中“看得见”的照片。

四个不能混用的数量

CSI 文章最容易把记录数、数值数、链数和时间采样数混在一起。下面这些单位必须分开:

本项目的数量 实际在数什么 不代表什么
256 个子载波 一条链内部的频域采样 256 个时间快照
8 条链(2 Tx × 4 Rx) 与一个测量组关联的空间测量 8 个独立用户或 8 个房间
57,293 条链记录 10 分钟文件中的外层记录总数 57,293 次独立测量
7,609 个 bit15 组 把同一测量的链记录归并后的测量组 7,609 个固定 8 链数据包
95.5 条链记录/秒 载荷记录吞吐率 95.5 次独立快照/秒
约 12.68 个闭合组/秒 按 bit15 分组后的独立测量率 每个链数值的更新率
约 12.64 个分析组/秒 执行公开异常过滤(7,583 组)后的测量率 另一份独立数据集

这份 10 分钟抓包里同时存在 8 链组与 4 链组。把 57,293 条记录当成独立样本,或者直接除以 8, 都会得到错误的时间轴,甚至制造出物理信号里并不存在的频谱峰。公开解析器按 chain_info bit15 闭合测量组, 而不是假设每帧固定八条链 [3]。

CSI 和 RSSI 有什么本质区别

维度 RSSI CSI
输出 一个标量(dBm) 每个子载波的复数(I/Q)
频率分辨率 无 有(80MHz 下 256 个子载波)
空间分辨率 无 有(多天线链路)
典型用途 链路质量、粗略距离 动作识别、呼吸/心率、定位、手势
受环境影响 强(多径一锅端) 可解析多径,因此能看到"人动了"

一句话:RSSI 告诉你"信号多强",CSI 告诉你"信号走的每条路都发生了什么"。

CSI 能做什么、不能做什么

已被论文与开源项目验证的方向

(这些方向在领域综述里有系统梳理 [2]。)

容易翻车的地方

  1. 穿墙"看人"被夸大:能看到的是运动引起的信道变化,不是图像。 静止且无呼吸扰动时,信号几乎不变,算法会"失明"。
  2. 环境依赖:换房间、换家具、换人体姿态,模型准确率大幅下降。
  3. 采样率与算法匹配:呼吸/心率需要稳定的低频信号,帧率抖动会直接毁掉频谱分析。
  4. 多径与硬件差异:不同芯片、不同带宽拿到的 CSI 形态完全不同,模型几乎不能直接迁移。

五条主流硬件路线对比

路线 带宽/子载波 成本 覆盖范围 适合谁
Intel 5300(CSI Tool)[4] [5] 20MHz / 30 二手网卡 一台 PC 复现论文(工具最近提交为 2020 年、更新停滞)
Atheros(Atheros CSI Tool)[6] 40MHz / 114 二手网卡 一台 PC 数据集复现
ESP32(esp-csi / CSI Tool)[7] 20MHz / 30–64 ¥20 起 单点 入门、IoT、智能家居
Nexmon CSI(树莓派/手机)[8] 80MHz / 256 ¥300 起 单点 抓包灵活、社区活跃
路由器(MT7986 + mt76 CSI) 80MHz / 256 一台路由器 全屋覆盖 想长期部署、做真实场景
科研平台(PicoScenes / SDR)[9] 任意 ¥1 万+ 实验台 高校科研

如果目标是"长期、真实家庭环境、不动声色的感知",路由器形态有明显优势: 它本来就 7×24 供电、放在房子中央、有多个天线,而且不用额外买设备。

用路由器拿 CSI 的整体思路

路由器(采集)                本机/服务器(分析)
┌───────────────────┐        ┌──────────────────────────┐
│ OpenWrt + mt76    │  UDP   │ 解析 → 缓冲 → 特征 → 检测 │
│ CSI 补丁          │ ─────▶ │ 可视化(热图/瀑布/多普勒)│
│ mt76-csi-daemon   │ 8888   │ 存储(HDF5/Zarr)+ 回放  │
└───────────────────┘        └──────────────────────────┘

关键点:

  1. 驱动与固件:MT7986 需要带 CSI 支持的 mt76 补丁 + 20260515 版 Wi-Fi 固件;
  2. 必须设置 frame-type 过滤(frame_type = 0,34),否则固件不会上报任何 CSI;
  3. 必须把目标设备加入 MAC 过滤表,否则拿不到该设备的测量;
  4. CSI 是"接收端测量":要有稳定流量,且目标设备与 AP 之间保持关联。

10 分钟验收流程

在训练分类器之前,先证明采集链路本身可信:

  1. 冻结无线电变量:记录路由器型号、驱动与 Wi-Fi 固件版本、信道、带宽、天线状态、国家/监管设置和客户端型号。
  2. 制造可控流量:使用局域网主机反复传输或 ping;不要把公网测速服务器当作发包时钟。
  3. 采集已知区间:先跑 60 秒,再跑 10 分钟;除 CSI 文件外,也要在外部记录开始与结束时间。
  4. 检查记录完整性:解析每一条外层记录,检查时间戳是否大致单调、是否有长空档、头部是否损坏、末尾是否残留字节。
  5. 先分组再重采样:用 chain_info bit15 闭合一次测量,分别统计 4 链组、8 链组和未闭合残片。
  6. 检查质量而不只看数量:画出组间隔、链完整度、零值比例、RSSI 和 SNR 随时间的变化;异常只能按公开规则剔除。
  7. 公开证据链:保留原始抓包、解析器版本、manifest、SHA-256 与失败结果。只有热图、没有输入的“复现” 无法被第三方核验 [10]。

本站这份 10 分钟数据产生了 57,293 条外层记录、7,609 个完整测量组和约 12.68 组/秒。三个数来自同一文件, 但回答的是不同问题;数据集页公开了完整统计与限制,读者可以自己核对 [3]。

如何判断一条 CSI 结论可不可信

看到的主张 应该先问什么 为什么重要
“采到了 256 个子载波” 每条链,还是插值后的结果? 频域点数不等于时间采样率
“有 2,048 个 CSI 数值” 数值、链记录,还是独立快照? 256 × 8 是一个测量组,不代表 8 秒时间序列
“采样率是 95Hz” 记录率还是分组后的测量率? 算法使用的是时间轴,不是文件行数
“呼吸准确率 95%” 距离、姿态、窗口长度和参考设备是什么? 没有实验协议的准确率无法迁移到另一个房间
“可以隔墙工作” 受控研究装置还是消费级产品? 阵列、墙体材料与真值标注决定结论范围
“模型可以泛化” 是否换过房间、受试者和硬件? 三者都会改变 CSI 分布

常见失败怎么定位

现象 先检查 不要做什么
CSI 使能成功,但没有记录 固件版本、frame-type 过滤、MAC 过滤和接收流量 直接认定客户端损坏
有记录,但测量组数量不对 chain_info bit15 和末尾残余字节 用总记录数直接除以 8
有测量组,但时间轴出现假峰 发包触发、省电、组间隔和重采样 在错误时间轴上调分类器
离线检测指标异常漂亮 窗口重叠、受试者泄漏、同场次训练/测试划分 把它当成真实场景准确率
启用 CSI 后家庭 Wi-Fi 塌陷 独立 AP、速率控制状态和客户端带宽 不做回退继续叠加 CSI 参数
结论需要身份或图像 物理量到底测到了什么 把信道响应实验描述成摄像头

采到数据之后:一条流水线

环节 做什么 常见坑
解析 24 字节头 + int16 I/Q,按子载波交错 字节序、链标记(chain_info bit15)
清洗 相位去卷绕、去 CFO/SFO、去直流 不做校正直接用相位 → 噪声
特征 幅度方差、STFT 多普勒、PCA 帧率抖动会污染频谱
检测 阈值/机器学习(SenseFi 等) 换环境后模型失效
可视化 热图、瀑布图、运动指标曲线 256×N 的点数必须用 WebGL/位图

本项目已经公开的东西

研究 Wi-Fi 感知时请遵守当地法律与伦理边界:不要用于未经同意的监控, CSI 即使没有图像和声音,也可能暴露是否在家与生活规律。应取得知情同意、缩短保留时间, 只公开脱敏后的数据,并在论文/项目中说明数据来源。

延伸阅读

参考与数据来源

本文的每条外部结论都标注来源与证据等级(分级标准);标注 E 级的是本项目可复现的实测数据。

  1. E 级 · 本项目实测 本项目 10 分钟实测抓包(57,293 条 / 600.0 s,SHA-256 00373f83…95e2)
    Router CSI Lab · 2026
    okwujun.pw/zh/datasets/ · 核实: 分片重组逐字节校验通过(2026-10-11) · 本地原始母片 SHA-256 为 00373f83…95e2;公开下载的是去标识派生文件,SHA-256 为 527466ce…a440,两者不可混用。
  2. A 级 · 标准/综述 WiFi Sensing with Channel State Information: A Survey
    W. Ma, W. Zhou, X. Wang · ACM Computing Surveys · 2019
    doi:10.1145/3310194 · 被引 857 · 核实: CrossRef API, 2026-10-11 · 领域内最常被引用的 CSI 感知综述(被引 857 次,核实于 CrossRef)。
  3. E 级 · 本项目实测 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 · 核实: CC BY 4.0;SHA-256 已发布;Zenodo DOI 10.5281/zenodo.23434789 · 数据集已获 Zenodo DOI(10.5281/zenodo.23434789),可直接引用。
  4. B 级 · 同行评审 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 · 被引 1713 · 核实: CrossRef API, 2026-10-11 · Intel 5300 CSI Tool 的正式论文(被引 1713 次),是 CSI 采集被广泛复现的起点。
  5. C 级 · 官方资料 dhalperi/linux-80211n-csitool-supplementary — Intel 5300 CSI Tool (code)
    D. Halperin et al.
    github.com/dhalperi/linux-80211n-csitool-supplementary · 核实: GitHub API 2026-10-11 (stars 221, last push 2020-05-25) · Intel 5300 采集工具的代码仓库;最近一次提交为 2020 年,可作为“工具更新停滞”的依据。
  6. B 级 · 同行评审 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 · 被引 521 · 核实: CrossRef API, 2026-10-11 · Atheros CSI Tool 的论文(被引 521 次),给出 40MHz 下的 CSI/功率时延剖面采集方法。
  7. C 级 · 官方资料 espressif/esp-csi — Applications based on Wi-Fi CSI
    Espressif Systems
    github.com/espressif/esp-csi · 核实: GitHub API 2026-10-29 (stars 1,723; README confirms the complete ESP32 series list and three sender/receiver routes) · 官方 README 原文:“All ESP32 series support CSI, including ESP32 / ESP32-S2 / ESP32-C3 / ESP32-S3 / ESP32-C5 / ESP32-C6 / ESP32-C61.”
  8. C 级 · 官方资料 seemoo-lab/nexmon_csi — CSI extraction on various Broadcom Wi-Fi chips
    SEEMOO Lab, TU Darmstadt
    github.com/seemoo-lab/nexmon_csi · 核实: GitHub API 2026-10-29 (stars 479, last push 2026-09-30; README lists bcm43455c0 on Raspberry Pi 3B+/4B/5)
  9. C 级 · 官方资料 PicoScenes — modern Wi-Fi ISAC research platform
    Z. Jiang et al. (PicoScenes project)
    ps.zpj.io/ · 核实: ps.zpj.io HTTP 200, 2026-10-11 · 面向 Wi-Fi ISAC 研究的软硬件平台官网(SDR 路线)。
  10. E 级 · 本项目实测 Router CSI Toolkit — 采集/分析/守护脚本(MIT,公开仓库)
    Router CSI Lab · 2026
    github.com/jjjwu/router-csi-toolkit · 核实: GitHub API 于 2026-11-02 核实公开仓库、抓包质量预检、成功 CI 与 v0.1.3 Release;归档 SHA-256 为 59f144c0…adea7 · 公开版含无第三方依赖的抓包质量预检;网页端检查器使用同一容器定义和边界口径。
  11. A 级 · 标准/综述 IEEE 802.11bf — WLAN Sensing (standard project)
    IEEE Standards Association · IEEE 802.11 Working Group · 2020
    standards.ieee.org/ieee/802.11bf/10331/ · 核实: standards.ieee.org HTTP 200, 2026-10-11 · 把“感知”变成 WLAN 标准能力的官方项目页(2020-09 立项)。
  12. C 级 · 官方资料 WST — Hands-on Wireless Sensing with Wi-Fi (Tsinghua tutorial)
    Tsinghua University TNS group
    tns.thss.tsinghua.edu.cn/wst/ · 核实: tns.thss.tsinghua.edu.cn HTTP 200, 2026-10-11 · 高校发布的 Wi-Fi 感知动手教程(含讲义与数据集),非同行评审论文。
  13. D 级 · 预印本/百科 ruvnet/RuView — community Wi-Fi spatial-intelligence project
    r. u. v. (community maintainer) · 2026
    github.com/ruvnet/RuView · 核实: GitHub API 2026-10-11 (stars 97,237; created 2025-06-07) · 社区项目,非同行评审:宣传语(实时“空间智能/体征监测”)未见于独立复现,仅作线索、不作结论。