1、为什么关注 Wi-Fi CSI?
如果你正在做智能家居、健康监护或室内安防相关的项目,你一定遇到过这个难题:怎样在不侵犯隐私的前提下感知环境中的人?
摄像头方案效果好,但隐私问题始终是硬伤。可穿戴设备需要用户主动佩戴,老人和儿童很难保持配合。红外 PIR 传感器只能做粗粒度的有/无人检测,无法识别具体活动。
Wi-Fi CSI(Channel State Information,信道状态信息)提供了一条全新的路径。它利用 Wi-Fi 设备在通信过程中天然产生的信道估计数据,来推断环境中的物理变化------包括人的存在、位置和行为。无需额外硬件部署(你的路由器和手机已经在不断交换这些数据),不采集图像,穿墙可用。
2、CSI 到底是什么?
2.1. 从 RSSI 到 CSI
大多数开发者对 RSSI(Received Signal Strength Indicator)并不陌生------它就是你手机上显示的 Wi-Fi 信号强度。但 RSSI 只是一个标量值,它告诉你"信号有多强",却丢失了大量关于信号传播路径的信息。
CSI 则完全不同。在 OFDM(正交频分复用)系统中,Wi-Fi 信号被分成多个子载波(subcarriers)进行传输。CSI 描述的是每个子载波上的信道频率响应(Channel Frequency Response),包含了该子载波的振幅 和相位信息。
用数学表达,对于第 <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k 个子载波,CSI 可以表示为:
scss
H(k) = |H(k)| · e^{j∠H(k)}
其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> ' ∣ H ( k ) ∣ ' `|H(k)|` </math>'∣H(k)∣' 是振幅, <math xmlns="http://www.w3.org/1998/Math/MathML"> ' ∠ H ( k ) ' `∠H(k)` </math>'∠H(k)' 是相位。
2.3. 为什么 CSI 能感知人?
Wi-Fi 信号从发射端到接收端,不只走一条路径。它会经历反射、散射、衍射等多径效应。当环境中有人移动时,这些传播路径会发生变化------有些路径被人体遮挡,有些产生了新的反射。
这些变化直接反映在 CSI 数据中:振幅会出现波动,相位会发生偏移。通过分析这些变化的模式,我们就能推断出环境中发生了什么。
关键洞察在于:不同的人体活动会产生不同的 CSI 变化模式。走路会引起周期性的大幅波动,静坐时的呼吸则表现为微弱而规律的振荡,跌倒会产生突然的剧烈变化。这就是 CSI 感知的物理基础。
3、CSI 数据采集:工具链全景
要开始 CSI 实验,第一步是获取 CSI 数据。目前主流的开源工具包括以下几种。
3.1. Intel IWL5300 Linux CSI Tool
这是最早也是最经典的 CSI 采集工具,由 Daniel Halperin 等人在 2011 年发布。它通过修改 Intel IWL5300 网卡的驱动,在 Linux 环境下提取 802.11n 的 CSI 数据。每个数据包可以获取 30 组子载波的 CSI,支持最多 3×3 MIMO 天线配置。
虽然该工具在学术界的引用量极高,但它依赖特定的老旧硬件(IWL5300 网卡),且仅支持 802.11n,在实际部署中的局限性越来越明显。
3.2. Nexmon CSI Extractor
Nexmon 是一个针对 Broadcom Wi-Fi 芯片的固件修改框架。其 CSI 提取模块(nexmon_csi)可以运行在 Raspberry Pi 3B+/4B 以及部分 Asus 路由器上,支持 802.11ac,带宽可达 80 MHz。
bash
# 在 Raspberry Pi 上使用 Nexmon CSI 的典型流程
# 1. 编译并安装 Nexmon 补丁
cd /home/pi/nexmon/patches/bcm43455c0/7_45_189/nexmon_csi
make install-firmware
# 2. 配置监听模式和信道
sudo ifconfig wlan0 up
sudo nexutil -Iwlan0 -s500 -b -l34 \
-v$(makecsiparams -c 36/80 -C 1 -N 1)
# 3. 使用 tcpdump 捕获数据包
sudo tcpdump -i wlan0 dst port 5500 -w output.pcap
Nexmon 的优势在于硬件成本低(一块 Raspberry Pi 即可),但固件修改过程对新手不太友好。
3.3. ESP32 CSI Toolkit
ESP32 是目前门槛最低的 CSI 采集方案。Espressif 官方提供了完整的 CSI 支持,全系列芯片(ESP32、ESP32-S2、ESP32-C3、ESP32-S3、ESP32-C6)均可使用。ESP32 能提供所有 52 个 OFDM 子载波的 CSI 数据,包括振幅和相位信息。
Espressif 在 GitHub 上维护的 esp-csi 项目提供了多种部署场景:
- 单 ESP32 + 路由器:ESP32 向路由器发送 Ping,从路由器回包中提取 CSI。最简单的部署方式。
- 双 ESP32 + 路由器:两个 ESP32 通过路由器通信,互相采集 CSI,不受路由器位置限制。
- 多 ESP32 组网:一个发包设备在多个信道上广播,多个接收节点同时采集 CSI,检测精度最高。
c
// ESP-IDF 中启用 CSI 回调的核心代码
static void wifi_csi_rx_cb(void *ctx, wifi_csi_info_t *info)
{
// info->buf 包含 CSI 原始数据
// info->len 为数据长度
// info->rx_ctrl 包含 RSSI、噪底、时间戳等元信息
wifi_csi_info_t *d = info;
int8_t *my_ptr = (int8_t *)d->buf;
// 解析每个子载波的虚部和实部
for (int i = 0; i < d->len; i += 2) {
int8_t imaginary = my_ptr[i];
int8_t real = my_ptr[i + 1];
float amplitude = sqrt(imaginary * imaginary + real * real);
float phase = atan2(imaginary, real);
// 处理振幅和相位数据...
}
}
// 注册 CSI 回调
esp_wifi_set_csi_rx_cb(&wifi_csi_rx_cb, NULL);
esp_wifi_set_csi(true);
3.4. ZTECSITool(2025 年新工具)
2025 年发布的 ZTECSITool 值得关注。它基于 ZTE AX3000 系列商用 AP,支持 802.11ax(Wi-Fi 6),带宽高达 160 MHz,可采集多达 512 个子载波的 CSI 数据,支持 6 链路天线。这是目前已知规格最高的开源 CSI 采集工具,特别适合穿墙检测和大规模部署场景的研究。
3.5. CSIKit:统一的 Python 解析框架
当你手头有了 CSI 原始数据,CSIKit 可以帮你省去很多解析工作。它是一个 Python 库,能统一处理来自 Intel、Atheros、Nexmon、ESP32、FeitCSI 和 PicoScenes 等多种格式的 CSI 数据。
python
# 使用 CSIKit 解析和可视化 CSI 数据
from CSIKit.reader import get_reader
# 自动识别文件格式并解析
reader = get_reader("path/to/csi_data.pcap")
csi_data = reader.read_file("path/to/csi_data.pcap")
# 命令行快速可视化
# csikit --graph --graph_type all_subcarriers data.pcap
4、数据处理 Pipeline
拿到原始 CSI 数据后,通常需要经过以下处理阶段才能用于具体应用。
4.1. 降噪(Noise Reduction)
原始 CSI 数据噪声很大,常用方法包括:
- 低通滤波 / Butterworth 滤波器:去除高频噪声,保留人体运动引起的低频变化。
- Hampel 滤波器:检测并替换离群点,适合处理 CSI 中的突发脉冲噪声。
- 小波去噪(Wavelet Denoising):在时频域同时处理,对非平稳 CSI 信号效果好。
python
import numpy as np
from scipy.signal import butter, filtfilt
def butterworth_filter(data, cutoff=10, fs=100, order=4):
"""对 CSI 振幅序列进行低通滤波"""
nyq = 0.5 * fs
normal_cutoff = cutoff / nyq
b, a = butter(order, normal_cutoff, btype='low', analog=False)
return filtfilt(b, a, data)
4.2. 相位校准(Phase Calibration)
CSI 的相位数据比振幅更敏感,但也更容易受到硬件时钟偏移的影响。常用的线性拟合校准方法如下:
python
def phase_calibration(phase_array, subcarrier_indices):
"""
去除由采样频率偏移(SFO)和包检测延迟(PDD)
引入的线性相位误差
"""
n = len(subcarrier_indices)
k = subcarrier_indices
# 线性拟合: phase = a * k + b + true_phase
a = (phase_array[-1] - phase_array[0]) / (k[-1] - k[0])
b = np.mean(phase_array)
calibrated = phase_array - a * k - b
return calibrated
4.3. 特征提取(Feature Extraction)
从处理后的 CSI 数据中,可以提取多种统计和频域特征:
- 时域特征:均值、方差、最大值、最小值、中位数绝对偏差
- 频域特征:FFT 主频率分量、频谱能量分布
- 信号变换:PCA 降维(通常前 2-3 个主成分就能保留 90%+ 的信息量)、DWT(离散小波变换)
5、核心应用场景
5.1. 室内定位(Indoor Localization)
CSI 指纹定位的思路与 RSSI 指纹类似,但精度更高。基本流程是:在离线阶段,采集各参考点的 CSI 指纹并构建指纹数据库;在线阶段,将实时 CSI 与数据库匹配。利用 CSI 的多子载波信息,定位精度通常可以达到亚米级。
5.2. 人体活动识别(Human Activity Recognition)
这是 CSI 感知最活跃的研究方向。典型的分类任务包括:空房间检测、坐/站/走/躺、跌倒检测、手势识别等。
目前主流的做法是将 CSI 数据组织成时间序列或时频图,然后使用深度学习模型进行分类。常用的模型架构包括:
- 1D-CNN:直接处理 CSI 时间序列
- LSTM / BiLSTM:捕获时序依赖关系
- CNN + LSTM 混合架构:先用 CNN 提取空间特征,再用 LSTM 建模时序关系
- DenseNet 变体:2025 年的研究表明,经过优化的轻量级 DenseNet 可以部署在边缘设备上,通过 EMD 数据增强将准确率从约 60% 提升到超过 97%
5.3. 生命体征监测(Vital Signs Monitoring)
CSI 甚至可以检测人体呼吸和心跳等微弱的生理运动。原理是:呼吸导致的胸腔起伏虽然幅度只有几毫米,但会引起 Wi-Fi 信号传播路径的微小变化,这些变化在 CSI 相位数据中是可观测的。通过频谱分析,可以从中提取呼吸频率(约 0.2-0.5 Hz)和心率(约 1-2 Hz)信息。
6、实战建议
如果你想动手实验 Wi-Fi CSI 感知,这里有一些实用建议。
硬件选择上,如果你是初学者或做原型验证,ESP32 是最佳起点------成本低(单板不到 30 元)、文档完善、社区活跃。如果你需要更高的子载波分辨率和 Wi-Fi 6 支持,可以考虑 ZTECSITool 配合 ZTE AX3000 AP。
环境部署上,CSI 对环境变化非常敏感。开始实验时,尽量选择受控的室内环境,减少无关干扰(如宠物、风扇、窗帘飘动等)。发射端和接收端之间的距离、角度、以及是否有视距(LoS)路径都会显著影响结果。
数据处理上,不要跳过降噪和相位校准步骤。原始 CSI 数据的噪声水平通常很高,直接喂给模型效果会很差。PCA 降维是一个简单有效的基线方法------研究表明,仅保留前 2 个主成分并量化到 3 bit,在人员存在检测任务上 F1 分数仅下降约 2%。
模型训练上,CSI 数据具有高度的环境依赖性。在 A 房间训练的模型,放到 B 房间很可能效果大幅下降。跨环境泛化仍然是该领域的核心挑战之一。数据增强技术(如基于 EMD 的方法)可以在一定程度上缓解数据不足的问题。
7、当前挑战与未来方向
CSI 感知技术虽然前景广阔,但目前仍面临几个关键挑战。
标准化缺失是最突出的问题。不同硬件平台、不同采集工具产生的 CSI 数据格式各异,评价指标也不统一,导致不同研究之间难以直接比较。IEEE 802.11bf 标准正在推动 Wi-Fi Sensing 的标准化,这将是行业发展的重要里程碑。
跨环境泛化是制约实际落地的核心瓶颈。CSI 数据高度依赖于具体的物理环境,模型在新环境中需要重新标注和训练,部署成本高。迁移学习和域自适应方法是目前的主要研究方向。
通信与感知共存(Joint Communication and Sensing,JCAS)是未来的技术趋势。如何在不影响正常 Wi-Fi 通信质量的前提下实现高质量的 CSI 感知,是 Wi-Fi 7 及后续标准需要解决的问题。
隐私与安全同样值得关注。CSI 感知技术在带来便利的同时,也可能被恶意利用。如何防止未授权的 Wi-Fi 感知监测,以及如何在 CSI 数据中实现隐私保护分析,是需要技术社区认真对待的议题。
8、写在最后
Wi-Fi CSI 感知正在从学术研究走向产业应用。2025 年华为联合合作伙伴发布了基于 Wi-Fi CSI 的商用感知方案,用于园区节能和安全管理,这标志着该技术进入了新阶段。
对于开发者来说,现在是介入这个领域的好时机:硬件成本持续降低,开源工具链日趋成熟,从 ESP32 到 ZTECSITool 的选择越来越丰富。如果你对无线感知技术感兴趣,不妨从一块 ESP32 开始,亲手感受 Wi-Fi 信号中隐藏的"第六感"。
参考资源
- Espressif ESP-CSI:
github.com/espressif/esp-csi - CSIKit (Python CSI 解析框架):
github.com/Gi-z/CSIKit - ZTECSITool:
github.com/WiFiZTE2025/ZTE_WiFi_Sensing - ESP32-CSI-Tool:
github.com/StevenMHernandez/ESP32-CSI-Tool - Nexmon CSI Extractor:
nexmon.org