PhysioDSP:一个面向可穿戴设备的 Python 信号处理库
可穿戴设备里的生理信号处理,说是个“老大难”问题一点都不为过。无论是处理心电图(ECG)记录、心率变异性(HRV)指标,还是加速度计数据,从原始传感器输出到最终生成有意义的生物标志物,这条链路往往都是碎片化的——算法散落在不同的论文、代码仓库和临时脚本里,接口各异,数据模型也无法互通。

PhysioDSP 这个开源 Python 库,就是想改变这个现状。它提供了一套统一、可扩展的框架来处理和分析生理传感器数据,核心关注点放在算法一致性、类型安全与可复现性上。项目托管在 GitHub,直接用 pip 就能安装:
pip install physiodsp
核心架构
PhysioDSP 的算法架构非常清晰,各组件之间的集成、扩展和测试都相当方便。
每个算法都遵循同一套设计模式:一个基于 Pydantic 的
Settings 类
BaseAlgorithm 的 Algorithm 类
run() 方法;最后,结果以 Pandas DataFrame 的形式返回,可以直接接入下游处理流程。
传感器数据则被封装在 AccelerometerData、EcgData、HrvData 这些类型化的数据模型中,实例化时就会执行 schema 校验。这意味着,切换算法或调整参数时,你完全不需要改动数据处理代码——只需要把数组包进对应的数据类,就能接入 PhysioDSP 的处理流水线。
from physiodsp.ecg.peak_detector import EcgPeakDetector
from physiodsp.sensors.ecg import EcgData
ecg_data = EcgData(timestamps=timestamps, values=ecg_values, fs=250)
detector = EcgPeakDetector()
result = detector.run(ecg_data)
# 这是一个包含 RR 间期和心率的 DataFrame
print(result.biomarker)
已实现的算法
当前版本已经包含了四个功能模块,覆盖了从基础运动到心电分析的常见场景。
在活动分析方面,activity/ 模块实现了多种体动记录算法,并且都经过单元测试,可以直接用于生产环境。具体包括:ENMO(欧几里得范数减一)、过零率、高于阈值时间(用于量化剧烈活动),以及 PIM(比例积分模式,用于处理多轴数据)。更有意思的是一套个性化活动评分方案,它能输出一个归一化的 0–100 分的每日活动与恢复指数,并且支持根据基线数据进行个性化调整。
ECG 处理集中在 ecg/ 模块,核心是一个基于类 Pan-Tompkins 滤波和峰值检测流水线的 QRS 波群检测器。你只需要传入任意采样频率的 EcgData 对象,它就能在一个 DataFrame 中返回心跳时间戳、RR 间期与瞬时心率。而 hrv/ 模块则负责 HRV 评分,算法将 RMSSD(连续差值均方根)经过 sigmoid 归一化映射到 0–100 分,同时还纳入了趋势和稳定性分量。整个计算基于滑动窗口,非常适合纵向监测场景。
底层的 dsp/ 模块提供了卷积和滤波工具,它既是上述各模块的计算基础,也可以独立拿出来,用于构建你自己的自定义信号处理流水线。
传感器支持与数据模型
传感器层对三种 IMU 模态——加速度计、陀螺仪、磁力计——以及 ECG 和 HRV 时间序列做了统一抽象。每个数据类都接收原始 NumPy 数组、时间戳和采样频率,经 Pydantic 校验输入后,向下游算法提供一致的接口。这种传感器抽象与算法逻辑的分离,带来一个直接的好处:当你需要接入新硬件或新信号类型时,完全不需要改动已有的算法实现。运行环境要求 Python ≥ 3.11,依赖 NumPy、Pandas、SciPy 和 Pydantic。
总结
尽管 PhysioDSP 刚刚发布,但它已经是一个可用的生理信号处理基础框架。当前版本(0.1.0b0)覆盖了活动分析、ECG 峰值检测和 HRV 评分三个方向,架构统一且易于测试。根据后续计划,开发团队还在筹备能量消耗估算、睡眠质量指标以及基于机器学习的活动识别模块,值得保持关注。