「ECG信号处理——(26)模拟心电生成器与Pan-Tompkins算法检测R波」2025年9月24日
一、引言
心电图(ECG)是反映心脏电活动的重要生理信号,广泛应用于心血管疾病诊断、健康监测等场景。然而,实际采集的 ECG 信号易受多种噪声干扰(如基线漂移、肌电干扰、工频干扰、异常尖峰),导致 QRS 波(心脏收缩期电活动的核心波形)识别困难,进而影响心率计算的准确性。
本文实现一套完整的 ECG 信号处理流程,涵盖信号生成与噪声添加、增强型预处理(多噪声去除)、QRS 波精准检测、心率统计分析四大模块,重点解析各环节的核心原理与工程实现逻辑,为 ECG 信号分析提供可复用的技术方案。
二、ECG 信号处理核心原理
ECG 信号处理的核心目标是 “去噪保真”(去除噪声同时保留 QRS 波等关键特征)与 “精准定位”(准确检测 QRS 波位置以计算心率)。以下分 “噪声去除原理” 与 “QRS 波检测原理” 两部分展开。
2.1 常见噪声类型与去除原理
实际 ECG 信号中的噪声主要源于生理干扰(呼吸、肌肉收缩)、环境干扰(电网)与设备干扰(突发尖峰),需针对性设计滤波方案。
2.1.1 异常尖峰噪声(突发干扰)
- 产生原因:设备接触不良、电极脱落等导致的瞬时脉冲噪声,幅度大、持续时间短(通常 < 0.02 秒)。
- 去除原理:滑动窗口阈值检测 + 插值修复
- 滑动窗口遍历信号,计算窗口内 “除当前点外” 的均值(避免当前点干扰);
- 若当前点与窗口均值的差值超过K 倍信号标准差(本文 K=5),判定为尖峰;
- 用尖峰左右最近的非尖峰点均值替换尖峰(避免信号断层)。
2.1.2 基线漂移(低频干扰)
- 产生原因:呼吸运动(0.05~0.3Hz)、身体姿势变化(0.1~0.5Hz),导致 ECG 基线缓慢波动,掩盖 P 波、T 波等弱信号。
- 去除原理:Butterworth 高通滤波Butterworth 滤波器在通带内幅频特性平坦,衰减随频率单调变化,适合抑制低频漂移。
相关内容见我主页的如下链接,👇
「ECG信号处理——(6)基线漂移去噪与实现方法(高通滤波器)」2025年1月7日_心电信号去噪-CSDN博客
2.1.3 肌电干扰(高频干扰)
- 产生原因:胸部肌肉收缩产生的肌电信号(20~200Hz),表现为 ECG 信号上的高频抖动,掩盖 QRS 波细节。
- 去除原理:Butterworth 带通滤波保留 ECG 有效频段(2~45Hz,包含 P 波、QRS 波、T 波),抑制高频肌电噪声。
相关内容见我主页的如下链接,👇
「ECG信号处理——(8)肌电干扰去噪与实现方法(带通滤波器)」2025年2月12日_emg信号带通滤波器-CSDN博客
2.1.4 工频干扰(50Hz/60Hz 窄带干扰)
- 产生原因:电网供电频率干扰(中国为 50Hz),表现为 ECG 信号上的等幅正弦波动,叠加在 QRS 波上影响识别。
- 去除原理:IIR 陷波滤波对特定频率(50Hz)进行深度衰减,同时保留其他频段信号。
1.2 QRS 波检测核心原理
QRS 波是 ECG 信号中幅度最大、变化最陡峭的波形(典型宽度 0.06~0.1 秒),检测流程需解决 “突出特征、抑制干扰、动态适应” 三大问题,本文采用 **“滤波增强→波峰检测→动态阈值→漏检补偿→误检排除”** 五步法。
相关内容见我主页的如下链接,👇
「ECG信号处理——(10)Pan-Tompkins算法(R峰检测)」2025年3月17日-CSDN博客
1.3 心率计算原理
心率(HR)是 QRS 波检测的核心应用,基于 RR 间期计算:
- RR 间期:相邻两个 QRS 波的时间差,公式:RR = t_{i+1} - t_{i} )(t_{i}为第 i 个 QRS 波的时间,单位 s);
- 瞬时心率:HR_{inst} = 60/RR(单位 bpm,次 / 分钟);
- 心率统计:过滤异常 RR 间期(0.3~1.5s,对应 HR 40~200bpm,超出范围为误检),计算:
- 平均心率:HR_{avg} = mean(HR_{inst, valid}));
- 心率范围:HR_{min}=min(HR_{inst, valid}),HR_{max}=max(HR_{inst, valid})。
二、系统实现步骤
基于上述原理,实现完整 ECG 信号处理流程,步骤如下:
2.1 信号生成与噪声添加
- 纯净 ECG 生成 ecg_{pure}:使用
ecgsyn
函数生成平均心率 60bpm、采样率 200Hz 的纯净 ECG 信号,共 60 个心跳; - 基线漂移 baseline_{drift} 添加:模拟呼吸(0.08Hz)与身体运动(0.2Hz)干扰;
- 合成带噪声信号:ecg_{with\_drift} = ecg_{pure} + baseline_{drift}。
2.2 增强型预处理(多噪声去除)
- 异常尖峰去除:调用自定义函数
remove_spikes
,设置阈值 5 倍标准差、窗口 0.02s; - 基线漂移去除:2 阶 Butterworth 高通滤波,截止频率 0.5Hz;
- 肌电干扰去除:4 阶 Butterworth 带通滤波,频段 2~45Hz;
- 工频干扰去除:IIR 陷波滤波,中心频率 50Hz,带宽 5Hz。
2.3 QRS 波检测与心率计算
- 信号预处理:低通 + 高通滤波,进一步净化信号;
- 信号增强:求导→平方→移动窗口均值,突出 QRS 波;
- 波峰检测:
findpeaks
提取峰值,最小峰间距 0.2s; - 动态阈值更新:按 1.2.3 节逻辑实时更新阈值,区分 QRS 波与噪声;
- 漏检补偿与 T 波排除:基于 RR 间期补全漏检波,通过斜率排除 T 波;
- 心率计算:过滤异常 RR 间期,统计平均、最小、最大心率。
三、结果与分析
基于上述内容,下列的结果与分析涵盖 “信号生成 - 预处理 - QRS 检测” 全流程,以下结合信号处理原理与实际应用需求,逐一分析各图结果的特征与意义。
3.1 QRS 波检测
(1)下图是纯净 ECG 与带基线漂移 ECG 对比图。
图1:模拟心电生成信号 + 添加基线漂移后的ECG信号
纯净ECG信号。波形特征清晰可辨,每个心跳周期内的 “P 波 - QRS 波 - T 波” 完整呈现 ——QRS 波(幅度最高,约 1.0mV)、P 波(QRS 波前的小幅度正向波,约 0.2mV)、T 波(QRS 波后的低幅度正向波,约 0.1mV)无任何干扰,基线稳定在 0mV 附近,心跳间隔均匀(对应平均心率 60bpm,RR 间期约 1 秒),符合成年人静息状态下的正常 ECG 特征。
带基线漂移 ECG。原始 ECG 波形被低频波动的基线 “抬升 / 下拉”,表现为:
- 基线随时间缓慢变化(蓝色曲线),波动周期与呼吸(0.08Hz)、身体运动(0.2Hz)频率匹配,最大漂移幅度约 ±0.15mV;
- 弱信号(P 波、T 波)被基线漂移部分掩盖,部分时段 QRS 波的 “峰值位置” 随基线波动偏移(如第 10 秒、第 40 秒处),但 QRS 波因幅度较高仍可初步识别;
- 黑色虚线标注的 “基线漂移成分” 单独呈现,其波形为 “低频正弦叠加缓慢趋势项”。
(2)下图是ECG 预处理全流程对比图。
该图为 5 行 1 列的子图布局,按 “原始信号→预处理逐步优化” 的顺序排列,依次为:
- 原始带漂移 ECG;2. 去除异常尖峰后;3. 去除基线漂移后;4. 去除肌电干扰后;5. 去除工频干扰后(干净信号)。
图2:ECG信号预处理全流程对比
(3)下图是ECG信号各预处理步骤去除的噪声成分图。
该图为 4 行 1 列的子图布局,依次对应 “异常尖峰噪声”“基线漂移噪声”“肌电干扰噪声”“工频干扰噪声”。
图3:ECG信号各预处理步骤去除的噪声成分图
(4)下图是QRS 检测信号预处理结果图。
该图为 3 行 2 列的子图布局,按 “信号增强逐步递进” 的顺序排列,依次为:
- 原始干净 ECG(预处理后的最终信号);2. 低通滤波后;3. 带通滤波后;4. 求导增强后;5. 平方后;6. 移动窗口均值后。
图4:QRS 检测信号预处理结果图
(5)下图是QRS 检测最终结果图。
该图为 2 行 1 列的子图布局,上子图展示带通滤波信号与 R 波检测结果,下子图展示移动窗口均值信号与 R 波检测结果。
图5:QRS 检测最终结果图
3.2 心率计算结果
图6:心率计算结果
3.3 模拟 ECG 输入参数与 QRS 检测结果对比分析
图7:模拟 ECG 输入参数
通过对比模拟心电信号的输入参数与QRS检测结果可以看出,系统生成的纯净ECG信号与检测结果高度吻合。
设定心跳数 60 个,实际检测到 65 个 R 波,差异源于hrstd=5 bpm
导致的心率波动使 60 秒内实际心跳略增,非算法误检;平均心率设定 60 bpm,检测结果 60.7 bpm,0.7 bpm 偏差远低于临床 ±2 bpm 误差允许范围;瞬时心率范围 49.6~74.1 bpm 与hrstd=5 bpm
、lfhfratio=0.5
设定的心率变异性特征一致,仅个别值略超理论区间属信号生成正常波动;
在Anoise=0
的无噪声场景下,无漏检、误检情况,R 波精准标记于生理特征显著的高幅度位置,未混淆 P/T 波,充分验证了算法 “信号增强 - 峰检测 - 动态阈值” 逻辑的可靠性,整体结果证明整套 ECG 处理系统性能符合预期,QRS 检测与心率计算结果临床可信。
Tips:下一讲,我们将进一步探讨,心电信号处理与应用的其他部分。
以上就是模拟心电生成器与Pan-Tompkins算法检测R波的全部内容啦~
我们下期再见,拜拜(⭐v⭐) ~
(Ps:有代码实现需求,请见主页信息,谢谢支持!~)