基于MATLAB的高精度ECG心电信号检测与分析系统
项目简介
本项目是一个基于MATLAB开发的完整心电(ECG)信号处理与分析平台。系统集成了从数据生成、信号预处理、特征增强到R波精确检测与心率计算的全套流程。核心算法基于经典的Pan-Tompkins方法并进行了针对性的优化,特别是引入了自适应阈值更新机制和双层回溯搜索策略,能够在存在工频干扰、基线漂移和肌电噪声的复杂环境下,实现对QRS波群的精准定位。
功能特性
- 模拟数据生成:内置基于高斯模型的心电信号生成器,可模拟P、Q、R、S、T波特性,并自动叠加基线漂移、工频干扰和随机高斯白噪声。
- 稳健的预处理流程:采用级联滤波方案(陷波滤波器+带通滤波器),有效分离有效信号与环境噪声。
- Pan-Tompkins特征提取:完整复现了经典的微分、平方和移动窗口积分(MWI)步骤,显著增强QRS波群能量。
- 自适应R波检测:通过动态更新信号电平和噪声电平来调整检测阈值,并结合“回溯搜索”策略,将MWI检测到的粗略位置修正为原始信号中的精确R波峰值。
- 不应期处理:包含基于幅度判决的不应期逻辑,有效消除误检。
- 多维可视化展示:单窗口集成显示原始信号、滤波信号、微分信号、积分波形以及最终标记结果。
系统要求
- MATLAB R2016b 或更高版本
- Signal Processing Toolbox(信号处理工具箱)
使用方法
- 运行程序:直接在MATLAB中运行
main 函数即可启动系统。 - 默认模式:程序默认
use_synthetic = true,使用内置算法生成长度为10秒的模拟加噪ECG信号进行演示。 - 加载外部数据:
* 如需处理真实数据,请在代码中将
use_synthetic 设置为
false。
* 取消相关代码块的注释,并修改数据加载路径。
* 确保输入数据为单列向量,并根据实际采样率修改
fs 参数。
算法实现细节与核心逻辑
本系统的实现严格遵循
main.m 中的逻辑,具体流程如下:
1. 参数设置与数据获取
- 设定采样率(默认为360Hz)。
- 根据标志位选择数据源。如果使用模拟数据,系统会通过高斯函数合成各个波段,并叠加0.3Hz的正弦基线漂移、50Hz的正弦工频干扰以及随机肌电噪声。
2. 信号预处理
代码采用了两级IIR滤波器结构,利用
filtfilt 函数实现零相位滤波,防止波形发生相位失真:
- 去工频干扰:设计50Hz的IIR陷波器(Notch Filter),带宽系数设置为中心频率的1/35,精准滤除电源线干扰。
- 去基线与高频噪声:设计4阶巴特沃斯(Butterworth)带通滤波器,通带范围设定为0.5Hz至45Hz。这不仅去除了低频的呼吸基线漂移,也抑制了高频的肌电干扰。
3. Pan-Tompkins 特征增强
该模块旨在最大化QRS复合波的信噪比:
- 微分变换:使用特定的5点差分滤波器(系数为
[1, 2, 0, -2, -1]),突出信号中斜率变化剧烈的QRS波部分,同时进行了相应的延迟校正。 - 非线性平方:对微分信号进行逐点平方操作,将所有数据转换为正值,并非线性地放大幅值较大的高频成分(即QRS波)。
- 移动窗口积分 (MWI):使用宽度约为150ms(
0.150 * fs)的矩形窗口对平方信号进行平滑积分。此步骤将离散的波峰融合成平滑的波包,便于后续阈值检测,同样进行了窗口延迟校正。
4. 自适应阈值与R波精确定位
这是本系统的核心检测逻辑:
- 初始候选点:使用
findpeaks 函数在MWI信号中寻找距离间隔大于200ms的局部峰值。 - 自适应阈值判决:
* 维护两个电平变量:信号电平(Signal Level)和噪声电平(Noise Level)。
* 如果MWI波峰超过当前阈值,判定为QRS波,更新信号电平(更新权重为0.125)。
* 如果未超过阈值,判定为噪声,更新噪声电平。
* 阈值动态公式:
阈值 = 噪声电平 + 0.25 × (信号电平 - 噪声电平)。
- 回溯精确搜索:由于滤波器和积分过程会造成峰值位置偏移,一旦在MWI信号上确认了波峰,算法会以此为中心,在预处理后的滤波信号(ecg_filtered)的一定范围内(向前0.15秒)回溯搜索最大值。这一步确保了R波标记位置的绝对精确。
- 不应期(Refractory Period)处理:检测完成后,代码会对所有检测到的R波位置进行校验。如果两个R波的时间间隔小于200ms,系统会比较两者在滤波信号中的幅值,仅保留幅值较大的一个,从而剔除T波误检或重复检测。
5. 心率计算
- 系统根据最终确认的R波位置索引计算RR间期(秒)。
- 基于RR间期计算瞬时心率(BPM)向量。
- 计算整个数据段的平均心率,并在控制台输出统计结果(R波数量、平均BPM、最小/最大RR间期)。
6. 结果可视化
程序会生成一个包含6个子图的图形窗口:
- 原始信号:展示带有显著噪声和基线漂移的输入数据。
- 预处理信号:展示经过去噪后的清晰波形。
- 微分信号:展示斜率特征提取结果。
- MWI积分波形:展示特征融合后的波包及最终采用的自适应阈值线。
- 最终检测结果:在预处理信号上用红色圆圈标记确定的R波峰值,并标注部分瞬时心率数值,便于直观验证算法准确性。