基于MATLAB的心电信号R波自动识别系统
项目介绍
本项目是一款基于MATLAB开发的高效心电图(ECG)信号处理与R波自动检测系统。项目旨在通过经典的Pan-Tompkins算法,实现对复杂心电数据中R波特征点的精准定位与提取。系统集成了信号模拟、预处理滤波、非线性特征增强及动态阈值决策等一系列功能模块。该系统能够有效应对基线漂移、工频干扰和肌电噪声,为临床心率统计及心脏健康评估提供可靠的技术手段。
功能特性
- 全流程信号预处理:内置二阶巴特沃斯带通滤波器(5-15Hz),专门针对心电信号中的基线漂移、高频噪声及P波/T波干扰进行抑制。
- Pan-Tompkins 算法核心实现:通过五点导数运算突出R波斜率,结合能量平方处理及移动平均窗口提取信号包络。
- 动态双阈值检测:系统具备自适应调节能力,能够实时计算并更新信号电平(SPKI)与噪声电平(NPKI),显著提高系统在不同患者及异常波形下的鲁棒性。
- 自动化心率分析:自动识别R波位置,计算瞬时RR间期及实时心率,并统计平均心率值。
- 多维度数据可视化:提供原始信号、能量包络检测以及最终精确定位的多级时域对比图表。
使用方法
- 环境配置:启动MATLAB软件,将包含相关逻辑的脚本文件放置于工作空间。
- 数据输入:
* 默认模式:运行程序后,系统将自动生成一段包含心率变异性及多种复合噪声(50Hz工频、0.5Hz基线偏移、随机肌电干扰)的模拟ECG信号。
* 外部数据:用户可通过修改加载代码,将MIT-BIH等数据库的真实采样数据输入系统。
- 执行识别:点击“运行”按钮,系统将自动按照预设频率(360Hz)进行全自动化处理。
- 查看结果:
* 查看弹出图形窗口:第一幅图展示滤波前后的信号对比;第二幅图展示能量积分包络与检测到的峰值;第三幅图在滤波后的心电图上标注R波位置并显示瞬时心率。
* 查看命令行窗口:获取总心跳次数及平均心率数值。
实现逻辑与算法细节
1. 模拟信号生成模块
通过特征点叠加法模拟ECG波形。逻辑上定义了P波、QRS复合波(含Q、R、S分量)及T波的相对时序与幅值。加入随机扰动以模拟心率变异性,并叠加正弦及随机噪声用于测试滤波效果。
2. 数字降噪预处理
- 带通滤波:采用3-dB截止频率为5Hz和15Hz的二阶带通滤波器,此范围保留了QRS复合波的主要能量。
- 归一化处理:将滤波后的信号幅值映射至[-1, 1]区间,保证后续算法阈值计算的一致性。
3. 特征增强(Pan-Tompkins逻辑)
- 导数运算:应用五点线性近似导数滤波器,用于增强R波陡峭的上升和下降斜率。
- 平方处理:对导数结果进行平方运算,通过非线性变换进一步放大R波特征,同时抑制幅值较小的背景噪声。
- 窗口积分:采用150ms(对于360Hz采样率约为54个采样点)的移动平均窗口计算能量包络,平滑波形并获取代表QRS复合波能量宽度的脉冲。
4. 动态阈值峰值查找逻辑
系统不使用固定硬阈值,其实现逻辑如下:
- 局部极大值提取:通过设置最小峰值间距(200ms)寻找信号中的潜在候选峰。
- 自适应更新:
* 若候选峰超过动态阈值(计算方法为噪声电平加上信号与噪声差值的四分之一),则判定为R波。
*
信号电平更新:当检测到R波时,按 $0.125 times 峰值 + 0.875 times 原信号电平$ 的比例调节。
*
噪声电平更新:若被判定为噪声,则按相同比例调整噪声电平估计。
5. 心率计算模块
根据检出的R波索引值计算相邻波峰之间的时间差(RR间期),通过 $60/(RR)$ 得到瞬时心率,并最终计算全段信号的平均BPM。
系统要求
- 软件版本:MATLAB 2018b 或更高版本。
- 工具箱需求:Signal Processing Toolbox(信号处理工具箱),用于执行
filtfilt、butter 及 findpeaks 等核心函数。 - 硬件建议:标准PC环境,由于算法采用向量化处理,计算资源占用极低,支持秒级处理长时段信号。