1. 心电图信号处理与QRS波检测概述
心电信号(ECG)是临床诊断中最常用的生物电信号之一,能够反映心脏的电活动状态。一个典型的心电周期包含P波、QRS波群和T波,其中QRS波群是心室去极化产生的特征波形,其检测精度直接影响心率计算和心律失常分析的准确性。
在实际应用中,ECG信号常受到以下干扰:
- 基线漂移(0.5Hz以下)
- 工频干扰(50/60Hz)
- 肌电噪声(5-2000Hz)
- 运动伪影
注意:未经处理的原始ECG信号信噪比可能低至-10dB,直接进行峰值检测会导致大量误检和漏检。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. QRS波检测算法设计原理
2.1 预处理阶段关键技术
2.1.1 数字滤波设计
采用级联滤波器消除噪声:
- 高通滤波(截止频率0.5Hz)消除基线漂移
matlab复制[b,a] = butter(4, 0.5/(fs/2), 'high'); ecg_filtered = filtfilt(b, a, ecg_raw); - 低通滤波(截止频率40Hz)抑制肌电噪声
- 陷波滤波器(50Hz)消除工频干扰
2.1.2 信号微分与平方
增强QRS波斜率特征:
matlab复制diff_ecg = diff(ecg_filtered);
squared_ecg = diff_ecg .^ 2;
2.2 自适应阈值检测算法
采用Pan-Tompkins算法改进方案:
- 滑动窗口积分(窗宽150ms)
matlab复制window_size = round(0.15 * fs); integrated_ecg = movsum(squared_ecg, window_size); - 动态阈值更新:
- 噪声阈值 = 0.25 × 最近8个QRS峰值的平均幅度
- 信号阈值 = 噪声阈值 × 2.5
- refractory period设置(200ms)避免重复检测
3. Matlab实现与优化技巧
3.1 完整处理流程代码
matlab复制function [qrs_peaks, heart_rate] = detect_qrs(ecg_signal, fs
