用 Wi-Fi CSI 测呼吸与心率:原理、可行做法与真实局限
2026-10-11 · 约 2 分钟
呼吸与心率检测的原理很简单:胸腔起伏会周期性改变无线多径,这种变化体现在 CSI 的幅度/相位上(综述见 [1])。 但工程上它比"检测有没有人"难得多,因为你要从噪声里提取 0.1–0.5 Hz(呼吸) 与 0.8–2.0 Hz(心率) 的微弱周期成分。
1. 采样率够不够
本项目实测约 95 条记录/秒(8 条链),远高于心率上限(2 Hz)所需的采样率。 所以瓶颈不是采样率,而是:
- 相位噪声(CFO/SFO、硬件漂移);
- 人体其他动作(说话、翻身)淹没微动;
- 观察窗口太短,频谱分辨率不足。
广告位(上线后接入 AdSense/Ezoic)
2. 可运行的估计流程
import numpy as np
from numpy.fft import rfft, rfftfreq
FS = 95.0 # 实测帧率(条/秒);务必用时间戳重采样,不要假设恒定
WINDOW_S = 30 # 呼吸 20–30s;心率建议 15–30s
def bandpass(x, fs, lo, hi):
n = len(x)
X = rfft(x - x.mean())
f = rfftfreq(n, 1 / fs)
X[(f < lo) | (f > hi)] = 0
return np.fft.irfft(X, n)
def estimate(signal, fs=FS, band=(0.1, 0.5)):
n = len(signal)
x = bandpass(signal, fs, *band)
spec = np.abs(rfft(x * np.hanning(n)))
freqs = rfftfreq(n, 1 / fs)
mask = (freqs >= band[0]) & (freqs <= band[1])
peak = freqs[mask][np.argmax(spec[mask])]
return peak * 60.0 # bpm
# signal 建议用「相邻子载波的相位差」或幅度,先做去趋势
# breath_bpm = estimate(phase_diff, band=(0.1, 0.5))
# hr_bpm = estimate(phase_diff, band=(0.8, 2.0))
关键处理顺序:去卷绕 → 去 CFO/SFO 线性漂移 → 带通 → 窗函数 → 谱峰——用相位差做体征监测的代表性工作是 PhaseBeat [3]。
3. 什么条件下才可能准
| 条件 | 说明 |
|---|---|
| 受试者静坐/静卧 | 运动幅度远大于呼吸,必须门控 |
| 有人-AP 之间有稳定反射路径 | 直视或稳定多径;金属遮挡会失效 |
| 窗口 ≥ 20 s | 30 s 窗口频率分辨率 ≈0.033 Hz(约 2 bpm) |
| 帧率稳定且按时间戳重采样 | 帧率抖动会污染频谱、产生假峰 |
| 单目标 | 多人时相位叠加,谱峰会混在一起 |
4. 必须承认的局限
- 不是医疗设备:不能用于诊断,也不应给出医疗承诺;
- 心率比呼吸难得多(幅度更小、更容易被呼吸谐波干扰);
- 换房间/换姿势后参数需要重新标定;
- 我们的平台里"呼吸/心率"模块默认是门控状态(未满足静止/信噪比条件时输出
Unavailable),这比强行输出一个数字更诚实。
已发表工作同样报告了距离与环境依赖:FarSense 用两天线的 CSI ratio 把呼吸检测距离上限进一步推远 [2], 说明"能测到"与"在任何房间都能测到"是两回事。
5. 参考实现与数据
- 相位处理与谱估计:本文示例 + Python 处理链路
- 用真实数据练手:10 秒样例 + 10 分钟数据集
- 算法库:
SenseFi(深度学习)、PhaseBeat/FarSense 等论文实现
参考与数据来源
本文的每条外部结论都标注来源与证据等级(分级标准);标注 E 级的是本项目可复现的实测数据。
- 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)。 - B 级 · 同行评审
FarSense: Pushing the Range Limit of WiFi-based Respiration Sensing with CSI Ratio of Two Antennas
Y. Zeng, D. Wu, J. Xiong, et al. · Proceedings of the ACM on Interactive, Mobile, Wearable and Ubiquitous Technologies (IMWUT) · 2019
doi:10.1145/3351279 · 被引 461 · 核实: CrossRef API, 2026-10-11 · 呼吸感知的距离上限与 CSI ratio 方法(被引 461 次)。 - B 级 · 同行评审
PhaseBeat: Exploiting CSI Phase Data for Vital Sign Monitoring with Commodity WiFi Devices
X. Wang, C. Yang, S. Mao · IEEE ICDCS 2017 · 2017
doi:10.1109/icdcs.2017.206 · 被引 325 · 核实: CrossRef API, 2026-10-11 · 用 CSI 相位做呼吸/心率监测的代表性工作(被引 325 次)。