WiFi 信号在日常环境中无处不在,利用其 Channel State Information (CSI) 可以实现非接触式人体姿态估计、生命体征监测和存在检测,而无需部署摄像头或可穿戴设备。这种方法的核心在于捕捉人体运动对 WiFi 多径传播引起的微小扰动,特别是胸腔呼吸和心跳导致的相位 / 幅度变化。通过物理建模和机器学习融合,系统能以毫秒级延迟输出可靠结果,特别适用于隐私敏感场景如医疗、养老和智能家居。
WiFi DensePose 项目展示了这一技术的成熟实现。它将 CSI 子载波的幅度和相位转换为 DensePose UV 映射用于姿态,同时提取呼吸(6-30 BPM)和心率(40-120 BPM)。存在检测则依赖 RSSI 方差和运动频带功率,延迟小于 1ms,甚至支持穿墙检测达 5m 深度。该项目采用 Rust 重写管道,实现 54K fps 处理速度,vital signs 模块达 11,665 fps,远超 Python 基线 810 倍。
CSI 采集与预处理管道
工程化从硬件采集开始。推荐使用 ESP32-S3 mesh(3-6 个节点,总成本约 54 美元),以 20 Hz 采样率输出二进制 CSI 帧(56-192 子载波)。标准消费 WiFi(如笔记本)仅支持 RSSI 粗粒度存在检测,准确率较低。
预处理管道包括:
- 相位校正:SpotFi 共轭乘法消除 CFO/SFO,公式 H1 [k] * conj (H2 [k]),保留环境相位差。
- 异常值滤除:Hampel 滤波器,使用中位数绝对偏差 (MAD) 替换离群点,阈值 σ̂ = 1.4826 × MAD,抵抗 50% 污染。
- 子载波选择:ruvector-mincut 算法选 top-K 敏感子载波(variance ratio > 阈值),提升 SNR 6-10 dB,默认 K=20。
这些步骤在 Rust 中单线程下仅 18.47 µs / 帧,确保实时性。
生命体征提取参数
vital signs 聚焦周期信号:
- 呼吸检测:带通滤波 0.1-0.5 Hz(对应 6-30 BPM),后 FFT 峰值检测。窗口大小 10s(200 样本 @20Hz),峰值置信度 >0.7。Fresnel 区建模补偿多径:ΔΦ = 2π × 2Δd / λ,胸腔位移 5-10mm 引起幅度调制。
- 心率检测:带通 0.8-2.0 Hz(40-120 BPM),同 FFT。使用谱相干性过滤伪峰,阈值 0.6。微多普勒从子载波相位差提取。
参数清单:
| 参数 | 值 | 作用 | 调整建议 |
|---|---|---|---|
| breath_low_hz | 0.1 | 滤波下限 | 儿童调 0.15 |
| breath_high_hz | 0.5 | 滤波上限 | 成人默认 |
| heart_low_hz | 0.8 | 心率下限 | 运动后上调 1.0 |
| fft_window_sec | 10 | 频率分辨率 0.1 Hz | 低功耗调 5s |
| confidence_thresh | 0.7 | 峰值置信 | 噪声环境 0.5 |
| snr_min_db | 10 | 信号质量门 | <5dB 丢弃帧 |
监控点:每帧输出置信度(0-1),异常时 fallback 到运动分数。回滚策略:若连续 30s 无有效 vitals,警报 “信号丢失” 并切换 RSSI 模式。
存在检测集成
存在检测更鲁棒:
- 核心指标:RSSI 方差 > 0.5 dB 或运动频带(1-5 Hz)功率 > 阈值(-20 dB)。
- 多径建模:ruvector-solver 计算 Fresnel 区,穿墙阈值 depth=5m。
- 多人支持:每个 AP 区分 3-5 人(56 子载波限),多 AP 线性扩展。
参数:
| 参数 | 值 | 作用 |
|---|---|---|
| rssi_var_thresh | 0.5 dB | 静态阈值 |
| motion_power_db | -20 | 频带功率 |
| presence_timeout_s | 5 | 无扰动清零 |
| max_persons | 5 | 物理上限 |
集成到系统中:Docker 一键部署 docker run -p 3000:3000 ruvnet/wifi-densepose:latest,REST API /api/v1/sensing 获取最新帧,WebSocket :3001/ws/sensing 实时流。ESP32 固件闪存后 UDP 5005 推流。
部署与优化清单
- 硬件准备:3x ESP32-S3,provision SSID/password,target-ip 192.168.1.20。
- Docker 启动:暴露 3000 (REST)/3001 (WS)/5005 (UDP)。
- 模型加载:
--model model.rvf --progressive,Layer A 瞬载 vitals。 - 阈值调优:日志 RUST_LOG=debug,观察 SNR/confidence,迭代 thresh。
- 监控仪表:Prometheus 端点追踪 fps、丢帧率、vitals 准确率。
- 回滚:环境多径强 → 降采样率 10Hz;无 CSI 硬件 → RSSI-only。
风险:多径干扰伪高峰值(解:子载波选择 + 相干性);功耗(ESP32 休眠模式,采样 duty cycle 50%)。测试:--source simulate 无硬件验证管道。
实际部署中,医院病房单 ESP32 监测呼吸异常,零售店多 AP 流量计数,均避开 GDPR 视频合规。未来 SONA 自适应将进一步提升跨环境泛化。
资料来源:
- WiFi DensePose GitHub:核心管道、参数、基准。
- 项目 ADR-021:vital signs 细节。