心电信号多功能滤波与QRS波检测系统
项目介绍
本系统是一个集成了模拟心电信号生成、多级数字滤波预处理器以及QRS复合波自动检测算法的综合性MATLAB分析平台。系统针对心电信号(ECG)在采集过程中易受到的基线漂移、工频干扰及高频噪声影响,设计了一套完整的信号增强方案。通过经典的Pan-Tompkins算法思想,系统能够实现R波峰值的精确精化与定位,并自动计算瞬时心率、平均心率及心率变异性(HRV)相关指标,为生物医学信号处理提供直观的分析工具。
功能特性
- 信号模拟与仿真:系统能够自主生成包含标准P波、QRS波群和T波特征的模拟心电信号,并允许叠加基线漂移、50Hz工频干扰和高斯白噪声,用于测试算法的鲁棒性。
- 多级数字滤波:集成了高性能的高通滤波器(去除基线)、低通滤波器(去除肌电干扰)以及精密IIR陷波器(去除工频干扰)。
- 动态特征增强:利用微分算子和平方算子突出QRS波群的斜率特征,削弱低频成分。
- 移动平均积分:采用滑动窗口积分法平滑非线性处理后的信号,形成便于检测的特征包络。
- 自适应双门限检测:基于信号阈值和噪声阈值的动态更新机制,自动识别QRS峰值。
- 精确R波校准:在积分窗口检测的基础上,回归原始滤波信号进行局部极值检索,确保R点定位精度。
- 生理参数统计:自动计算R-R间期、瞬时心率(BPM)、平均心率以及SDNN(心率标准差)等量化指标。
- 可视化分析报告:提供时域滤波对比图、功率谱密度(PSD)分析图以及检测结果轨迹图。
系统逻辑与实现细节
1. 参数初始化与信号构建
系统首先设定500Hz的采样频率,生成持续10秒的时间序列。通过循环叠加高斯脉冲模拟典型的心电波形组件。随后,人为引入0.3Hz/0.1Hz的复合基线漂移、50Hz的正弦工频干扰以及标准差为0.1的随机噪声,构造出复杂的待处理信号。
2. 三级滤波器设计
- 高通滤波:采用3阶巴特沃斯(Butterworth)高通滤波器,截止频率设为0.5Hz,有效抑制心电基线随呼吸发生的缓慢偏移。
- 低通滤波:采用5阶巴特沃斯低通滤波器,截止频率设为40Hz,滤除工频以上的高频噪声和肌电干扰。
- 陷波处理:使用iirnotch函数设计50Hz陷波器,带宽因子(Q值)经过优化,在消除电力线干扰的同时减小对心电形态的损伤。
- 相位补偿:所有滤波过程均采用filtfilt零相位滤波技术,确保滤波后信号相位不发生偏移。
3. QRS波群处理逻辑
- 微分运算:利用五点导数算子执行数值微分,增强R波的前导斜率。
- 非线性叠加:通过平方运算使微分后的信号特征转化为正向脉冲,并进一步扩大QRS区与非QRS区的幅值差距。
- 窗口积分:设定150ms(约75个采样点)的移动平均窗口,对平方信号进行卷积运算,产生代表QRS能量的平滑脉冲。
4. 自适应阈值算法
系统对积分后的信号进行波峰检索,并维护两个动态阈值:
- 信号阈值(threshold_sig):根据已识别出的QRS波峰值按0.25:0.75的比例持续更新。
- 噪声阈值(threshold_noise):根据被判定为噪声的局部峰值进行同步更新。
- 最终判定标准:结合两个阈值生成的综合门限,配合最小300ms的检测间隔(MinPeakDistance)防止误触发。
5. 峰值精化与指标计算
系统在检测到积分信号的能量窗口后,会在中心点前后100ms范围内搜索滤波信号的最大值,以此确定真R波的位置。基于R点坐标计算差分,获得R-R间期序列,进而导出平均心率。
关键函数与算法分析
- butter/filtfilt:实现了巴特沃斯数字滤波器的系数计算与零相位应用,保证了心电信号波形不发生畸变。
- iirnotch:专门用于生成针对工频干扰的阶跃响应,在保持高频成分的前提下实现窄带滤除。
- findpeaks/findpeaks_local:系统内置了对局部最大值的搜寻逻辑,不仅支持工具箱函数,还提供了底层逻辑实现以保证在不同环境下的兼容性。
- Pan-Tompkins 衍生逻辑:通过“微分-平方-积分”三个核心步骤,成功将复杂的波段识别问题转化为能量包络检测问题。
- periodogram:利用周期图法计算信号在滤波前后的功率谱密度,量化分析滤波器对特定干扰的抑制效果。
使用方法
- 启动环境:打开MATLAB软件。
- 运行分析:直接运行该脚本。
- 交互查看:
* 图形窗口上方将显示原始信号与滤波信号的对比。
* 中间图表通过对数坐标展示50Hz等频点的能量压制情况。
* 下方图表实时标记出检测到的R波顶点,并在标题处显示平均心率。
- 结果审阅:检查MATLAB命令行输出的分析报告,查看检测到的R波总数、心率均值、极值以及SDNN等生理指标。
系统要求
- MATLAB R2016b 或更高版本。
- Signal Processing Toolbox(信号处理工具箱):用于调用butter、iirnotch、findpeaks等函数。若无该工具箱,系统已内置简化的自研峰值查找函数作为备选。