Wi-Fi CSI 感知技术用无线信号“看见“室内的人

0 阅读11分钟

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),包含了该子载波的振幅相位信息。

用数学表达,对于第 kk 个子载波,CSI 可以表示为:

H(k) = |H(k)| · e^{j∠H(k)}

其中 H(k)`|H(k)|` 是振幅,H(k)`∠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。

# 在 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,检测精度最高。
// 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 数据。

# 使用 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 信号效果好。
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 的相位数据比振幅更敏感,但也更容易受到硬件时钟偏移的影响。常用的线性拟合校准方法如下:

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