可穿戴设备数据的 AI 分析:从 PPG 信号解码到运动负荷的实时建模
可穿戴设备数据的 AI 分析:从 PPG 信号解码到运动负荷的实时建模
一、手腕上的实验室——从光电信号中提取运动生理特征
可穿戴设备(智能手表/手环)通过光电容积脉搏波(PPG)传感器以每秒 25~100 Hz 的频率采样手腕处毛细血管的血容量变化。原始 PPG 信号中蕴含了心率、心率变异性(HRV)、血氧饱和度(SpO₂)和呼吸频率四种生理信息——但这四种信息的提取需要对原始信号进行不同的滤波和频域变换。
信号处理的核心挑战在于运动伪影(Motion Artifact):当运动员在羽毛球场上快速急停变向时,手腕与传感器的相对位移产生的噪声振幅可达真实 PPG 信号的 3~5 倍。去除运动伪影是 PPG 信号分析在运动场景中是否有效的关键门槛。
二、PPG 信号的多层分析管道
flowchart TD A["PPG 原始信号<br/>(25~100 Hz)"] --> B["预处理"] B --> B1["带通滤波<br/>0.5~5 Hz (心率频段)<br/>Butterworth 4阶"] B --> B2["运动伪影去除<br/>加速度计辅助的<br/>自适应滤波 LMS"] B --> B3["基线漂移去除<br/>多项式拟合 v.s. 高通滤波"] B1 & B2 & B3 --> C{信号质量评估} C -->|SNR > 20 dB| D["可靠信号<br/>进入特征提取"] C -->|SNR < 20 dB| E["标记为低质量<br/>用于准确度置信度计算"] D --> D1["时域特征<br/>HR (心率), SDNN (HRV), RMSSD"] D --> D2["频域特征<br/>LF (0.04-0.15Hz)<br/>HF (0.15-0.4Hz)<br/>LF/HF 平衡比"] D --> D3["非线性特征<br/>Poincaré plot<br/>样本熵 (Sample Entropy)"] D1 & D2 & D3 --> F["运动负荷模型"] F --> F1["TRIMP (Training Impulse)<br/>基于 HR Zone × Duration 的疲劳量化"] F --> F2["恢复状态评估<br/>晨起 HRV 趋势 vs 历史基线"] F --> F3["体能拐点预测<br/>HR 上升速度 vs 输出功率<br/>曲线的二阶导数"]三、运动负荷量化的特征工程
import numpy as np from scipy.signal import butter, filtfilt from scipy.interpolate import interp1d class PPGProcessor: """PPG 信号处理——从原始光电信号到运动生理指标""" def __init__(self, fs: float = 50.0): # 采样率 50 Hz self.fs = fs # 带通滤波器:0.5~5 Hz 覆盖正常心率范围 (30~300 BPM) self.b, self.a = butter(4, [0.5, 5.0], btype='band', fs=fs) def remove_motion_artifact(self, ppg: np.ndarray, accel: np.ndarray) -> np.ndarray: """ 自适应滤波去除运动伪影。 核心思想:加速度计信号与运动伪影高度相关, 通过 Wiener 滤波器从 PPG 中减去加速度计信号的估计贡献。 """ # 标准化加速度信号(合成 3 轴的总加速度) accel_norm = np.sqrt(np.sum(accel ** 2, axis=1)) # 自适应 LMS (Least Mean Square) 滤波器 # 将加速度作为参考噪声信号,估计其对 PPG 的贡献 mu = 0.01 # 学习率——平衡收敛速度和稳态误差 filter_len = 32 # FIR 滤波器阶数 w = np.zeros(filter_len) # 自适应权重 cleaned = np.zeros_like(ppg) for n in range(filter_len, len(ppg)): # 取加速度的滑动窗口 x = accel_norm[n-filter_len:n][::-1] # 估计噪声贡献 noise_est = np.dot(w, x) # 从 PPG 中减去噪声 cleaned[n] = ppg[n] - noise_est # LMS 权重更新 w += mu * cleaned[n] * x return cleaned def extract_hrv(self, ppg: np.ndarray) -> dict: """从 PPG 信号提取心率变异性 (HRV) 指标""" # 带通滤波——仅保留心率频段 filtered = filtfilt(self.b, self.a, ppg) # 峰值检测——定位每个心动周期的收缩期峰值 # 基于一阶差分过零点的峰值检测 peaks = self._detect_peaks(filtered) if len(peaks) < 3: return {"error": "insufficient_peaks"} # RR 间期——相邻峰值的时间间隔 rr_intervals = np.diff(peaks) / self.fs * 1000 # 转换为 ms # 时域 HRV 指标 sdnn = np.std(rr_intervals) # 标准差——整体变异度 # RMSSD: 相邻间期差值的均方根——反映副交感神经活性 rmssd = np.sqrt(np.mean(np.diff(rr_intervals) ** 2)) return { "hr_bpm": 60000 / np.mean(rr_intervals), "sdnn_ms": sdnn, "rmssd_ms": rmssd, "rr_count": len(rr_intervals), } def compute_training_load(self, hr_series: np.ndarray, duration_min: float, max_hr: float = 190.0) -> dict: """ TRIMP (Training Impulse) 计算——量化单次运动负荷。 TRIMP = duration × ΔHR_ratio × exp(k × ΔHR_ratio) 其中 ΔHR_ratio = (HR_avg - HR_rest) / (HR_max - HR_rest) """ hr_rest = 60.0 # 静息心率(个体校准值) hr_avg = np.mean(hr_series) delta_hr_ratio = (hr_avg - hr_rest) / (max_hr - hr_rest) delta_hr_ratio = max(0, min(1, delta_hr_ratio)) # 限幅 # k: 性别系数——女性对强度更敏感(约 1.92 vs 1.67) k = 1.67 trimp = duration_min * delta_hr_ratio * np.exp(k * delta_hr_ratio) # 心率区域分布——反映运动强度结构 zones = { "zone1_light": np.sum(hr_series < 0.60 * max_hr) / len(hr_series), "zone2_moderate": np.sum((hr_series >= 0.60*max_hr) & (hr_series < 0.75*max_hr)) / len(hr_series), "zone3_heavy": np.sum(hr_series >= 0.75 * max_hr) / len(hr_series), } return {"trimp": round(trimp, 1), "zones": zones}四、可穿戴设备的信号分析局限
PPG 传感器与 ECG 的精度差距:PPG 通过光学方式间接测量心率,其峰值检测受肤色、毛发密度、手腕脂肪厚度和设备贴合度的影响。与医学级 ECG(心电图)对比,PPG 的 HRV 测量误差在运动状态下可达 10~20%(RMSSD 指标)。对需要高精度 HRV 分析的场景(如运动员过度训练检测),ECG 胸带仍是不可替代的。
个体化校准的必要性:最大心率(MHR)的 220-年龄公式的个体误差范围达 ±12 BPM。以 MHR 为基础计算的 TRIMP 和心率区间在个体差异上的系统性偏差需要个人化的最大心率测试(如递增负荷试验)来校准。
电池与传感器采样率的权衡:100 Hz 采样率的 PPG 消耗的电流约为 25 Hz 的 2 倍。为延长续航,大多数消费级设备在"运动模式"之外将采样率降至 25 Hz 或更低。但 25 Hz 的采样率无法精确捕获 HRV 的高频成分(HF: 0.15~0.4 Hz,Nyquist 要求 > 0.8 Hz),导致自主神经系统的分析精度受损。
五、总结
可穿戴设备的数据分析是信号处理与机器学习的交汇——从噪声污染的 PPG 信号中提取有效的运动生理指标,需要对运动伪影去除、频域分析和个体化校准有深入理解。核心流程:PPG 预处理(去噪 + 峰值检测)→ HRV 时域/频域分析 → TRIMP 运动负荷量化。
在工程实现中,自适应 LMS 滤波去除运动伪影是提升信号质量的首选方法。PPG 与加速度计的协同分析(Sensor Fusion)能将信号可用率从 60% 提升至 85% 以上。边缘 AI 在这一领域的核心价值在于将频域分析和模式识别从云端迁移到设备端——100 ms 内的本地推理可实时反馈运动员的负荷状态,而云端推理的 500 ms+ 延迟在运动中无法提供即时的训练调整建议。这与 LLM 推理优化的核心目标一致:将智能从"事后分析"推进到"实时反馈"。
