基于MATLAB的心电信号R波峰值自动检测系统
项目介绍
本项目是一个基于MATLAB开发的心电(ECG)信号处理与分析系统。系统利用数字信号处理技术,从含噪的心电信号中提取特征,实现对R波峰值的高精度定位。除核心的检测功能外,系统还包含模拟信号生成、多级噪声抑制预处理、心率变异性(HRV)统计分析以及全流程的可视化展示功能。该系统实现了经典的Pan-Tompkins算法流程,并结合自适应阈值策略,能够有效应对基线漂移、工频干扰和肌电噪声的影响。
功能特性
- 模拟信号生成:内置合成ECG生成器,能够模拟包含P、Q、R、S、T波的完整心动周期,并支持随机的心率变异性(HRV)模拟。
- 环境噪声仿真:自动叠加基线漂移(0.5Hz)、工频干扰(50Hz)和高频肌电噪声,模拟真实的信号采集环境。
- 多级信号预处理:
*
基线校正:采用两级中值滤波技术去除低频基线漂移。
*
陷波滤波:精准滤除50Hz电源线干扰。
*
高频去噪:使用低通滤波器抑制高频肌电噪声。
- Pan-Tompkins算法实现:完整复现了微分、平方、移动窗口积分(MWI)等特征增强步骤。
- 自适应R波检测:
* 动态阈值调整机制,根据信号和噪声水平自动更新检测门限。
* 回溯修正算法,解决积分处理带来的波峰延迟问题,精准定位原始波形中的R波。
- 临床指标分析:自动计算平均心率(BPM)、RR间期、SDNN和RMSSD等HRV时域指标。
- 数据可视化:提供包含原始信号对比、算法中间过程、最终检测标记的三栏波形图。
系统要求
- MATLAB R2016a 或更高版本
- Signal Processing Toolbox(信号处理工具箱)
* 项目依赖
filtfilt (零相位滤波),
butter (巴特沃斯滤波器设计),
iirnotch (陷波器设计),
findpeaks (寻峰),
medfilt1 (一维中值滤波) 等函数。
使用方法
- 将代码保存为MATLAB脚本文件。
- 确保MATLAB路径中已包含所需的工具箱。
- 直接运行脚本,系统将自动依次执行:参数初始化、信号生成、噪声添加、预处理、R波检测及绘图。
- 运行结束后,控制台将输出心率统计数据,并弹出一个包含三个子图的分析窗口。
详细实现与算法逻辑
本项目的主要执行逻辑包含以下六个关键阶段,完全对应代码的实际执行流程:
1. 参数设置与信号生成
系统首先设定采样率(360Hz)、信号时长(10秒)和目标心率(75 BPM)。
- 信号合成:通过本地辅助函数,利用高斯函数叠加模拟P、Q、R、S、T波的形态,并引入微小的随机时间偏移来模拟真实的心率变异性。
- 噪声叠加:在纯净信号上线性叠加0.5Hz的正弦波(模拟呼吸造成的基线漂移)、50Hz正弦波(模拟工频干扰)以及高斯白噪声(模拟肌电干扰),构建待处理的
noisy_ecg 信号。
2. 信号预处理
为了从强噪声背景中恢复信号,代码实施了以下级联滤波策略:
- 去除基线漂移:采用中值滤波法。首先使用200ms窗口滤除QRS波群,随后对结果进行600ms窗口滤波提取基线轮廓,最后将原始信号减去该基线。
- 滤除工频干扰:设计一个中心频率为50Hz的IIR陷波器(Notch Filter),并使用零相位滤波函数
filtfilt 处理,防止相位失真。 - 宽带滤波:使用截止频率约为20Hz的二阶巴特沃斯低通滤波器进行初步清洗,为后续算法做准备。
3. Pan-Tompkins 算法核心
该模块旨在最大化QRS波群的特征能量,同时抑制其他波段:
- 带通滤波:使用5-15Hz的巴特沃斯带通滤波器,保留QRS波群的主要频谱能量,滤除低频P/T波和高频噪声。
- 微分变换:应用5点差分滤波器(系数
[1, 2, 0, -2, -1]),突出信号斜率变化剧烈的部分(即R波的上升沿和下降沿)。 - 非线性平方:对微分信号进行平方运算,将所有数据转换为正值,并非线性地放大高幅度的QRS波群成分。
- 移动窗口积分 (MWI):使用宽度约150ms的矩形窗口进行卷积积分,将离散的波形特征平滑聚合成一个宽大的波峰,便于后续检测。
4. R波峰值自适应检测
检测逻辑分为粗定位和精定位两个步骤:
- 基于MWI的粗检测:在积分信号上寻找局部极大值(最小峰值距离设为200ms),并利用双阈值(信号阈值和噪声阈值)策略进行筛选。
*
自适应更新:若峰值超过当前阈值,判定为QRS波,更新信号水平
signal_level;否则判定为噪声,更新噪声水平
noise_level。阈值根据通过公式动态调整:
Threshold = Noise + 0.25 * (Signal - Noise)。
- 回溯修正(精定位):由于积分过程会导致波峰位置在时间轴上滞后,算法以MWI检测到的位置为基准,在预处理后的滤波信号(
ecg_filtered)上向前回溯搜索(搜索窗约150ms),找到真实的信号极大值点作为最终的R波位置。
5. 心率计算与统计分析
根据最终确定的R波位置索引计算时域指标:
- RR间期:计算相邻R波之间的时间差。
- 平均心率:60除以平均RR间期。
- HRV分析:
*
SDNN:RR间期的标准差,反映整体心率变异程度。
*
RMSSD:相邻RR间期差值的均方根,反映副交感神经活性。
结果将直接通过
fprintf 输出至控制台。
6. 可视化绘图
系统生成一个包含三个子图的Figure窗口:
- 预处理效果:灰色显示原始带噪信号,蓝色显示去噪及基线校正后的信号,直观展示预处理对信噪比的提升。
- 算法中间态:绿色虚线显示平方后的信号,黑色实线显示移动积分后的信号(MWI),并标注红色虚线阈值,展示特征增强过程。
- 最终复律:在滤波后的ECG信号上,用红色圆点标记检测到的R波峰值,并在波峰上方标注具体的RR间期数值(秒),便于人工核验。