【信号去噪】基于零相FIR和IIR滤波器心电图信号去噪附Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。
🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室
👇 关注我领取海量matlab电子书和数学建模资料
🍊个人信条:做科研,博学之、审问之、慎思之、明辨之、笃行之,是为:博学慎思,明辨笃行。
🔥 内容介绍
一、引言
心电图(ECG)信号是反映心脏电活动的重要生理信号,对于心脏疾病的诊断和监测具有关键意义。然而,在实际采集过程中,ECG 信号不可避免地会受到各种噪声的干扰,如工频干扰、肌电干扰和基线漂移等,这严重影响了信号的质量和后续的分析诊断。零相有限脉冲响应(FIR)滤波器和无限脉冲响应(IIR)滤波器作为常用的数字滤波器,能够有效地去除这些噪声,恢复 ECG 信号的真实特征。本文将详细探讨基于这两种滤波器的 ECG 信号去噪方法及其性能。
二、心电图信号噪声来源及特点
(一)工频干扰
- 来源
:主要由电力系统的交流电产生,其频率通常为 50Hz 或 60Hz(取决于不同国家和地区的电力标准)。在医院环境中,各种电气设备的运行会产生工频干扰,通过电磁耦合等方式混入 ECG 信号中。
- 特点
:呈现周期性,频率固定,幅度相对稳定,在频谱上表现为特定频率的尖峰。
(二)肌电干扰
- 来源
:当患者在采集 ECG 信号时,肌肉的不自主收缩会产生肌电信号,这些信号会干扰到 ECG 信号。例如,患者紧张、运动或颤抖时,肌电干扰会更加明显。
- 特点
:频率范围较宽,一般在 20Hz - 500Hz 之间,具有随机性和非平稳性,其频谱分布较为复杂。
(三)基线漂移
- 来源
:主要由患者呼吸、身体移动以及电极与皮肤接触不良等因素引起。呼吸过程中胸部的起伏会导致电极位置微小变化,从而引起基线漂移。
- 特点
:通常表现为低频信号,频率一般在 0.1Hz - 0.5Hz 之间,其变化相对缓慢,会使 ECG 信号的基线发生上下波动。
三、零相 FIR 滤波器原理与设计
(三)滤波器设计方法
- 窗函数法
:这是一种常用的 FIR 滤波器设计方法。首先根据所需的滤波器性能指标(如截止频率、通带波纹、阻带衰减等)确定滤波器的阶数 N。然后选择合适的窗函数,如矩形窗、汉宁窗、汉明窗等。不同的窗函数具有不同的频谱特性,会影响滤波器的性能。例如,汉明窗能够在保证一定阻带衰减的同时,减小通带波纹。通过将理想低通滤波器的单位脉冲响应与窗函数相乘,得到实际的 FIR 滤波器单位脉冲响应 h(k)。
- 频率采样法
:该方法是在频域对理想滤波器的频率响应进行采样,然后通过离散傅里叶反变换(IDFT)得到时域的单位脉冲响应。在设计过程中,需要根据滤波器的性能要求确定采样点数和采样频率。频率采样法的优点是可以直接控制滤波器在特定频率点的响应,适用于一些对频率特性有特殊要求的应用场景。
四、IIR 滤波器原理与设计
(一)IIR 滤波器基本原理
IIR 滤波器的输出不仅与当前和过去的输入有关,还与过去的输出有关,其数学表达式为:
(二)设计方法
- 模拟滤波器设计与数字化转换
:通常先设计模拟 IIR 滤波器,如巴特沃斯滤波器、切比雪夫滤波器等。巴特沃斯滤波器具有平坦的通带响应,切比雪夫滤波器则可以在通带或阻带实现更陡峭的过渡特性。根据所需的滤波器性能指标(如截止频率、通带波纹、阻带衰减等)确定模拟滤波器的参数。然后通过双线性变换法或脉冲响应不变法等将模拟滤波器转换为数字 IIR 滤波器。双线性变换法能够有效地避免频率混叠现象,在实际应用中较为常用。
- 直接设计法
:直接在数字域设计 IIR 滤波器,通过优化算法直接求解滤波器的系数 a(k) 和 b(k),以满足给定的频率响应要求。这种方法通常需要使用数值优化算法,如最小二乘法、遗传算法等,计算量相对较大,但可以更灵活地设计满足特定需求的滤波器。
五、基于零相 FIR 和 IIR 滤波器的 ECG 信号去噪实现
(一)去噪流程
- 信号采集与预处理
:使用心电图采集设备获取含有噪声的 ECG 信号,并对其进行必要的预处理,如采样、量化等,将其转换为数字信号。
- 滤波器设计与应用
:根据 ECG 信号中噪声的频率特性,分别设计零相 FIR 滤波器和 IIR 滤波器。对于工频干扰,设计一个窄带陷波滤波器;对于肌电干扰,设计一个低通滤波器;对于基线漂移,设计一个高通滤波器。将设计好的滤波器应用于采集到的 ECG 信号,去除相应的噪声。
- 效果评估
:采用一些评估指标,如均方误差(MSE)、峰值信噪比(PSNR)、信号失真度(SD)等,对去噪后的 ECG 信号进行评估,比较零相 FIR 滤波器和 IIR 滤波器的去噪效果。
(二)实例分析
- 数据采集
:采集一组包含工频干扰、肌电干扰和基线漂移的 ECG 信号数据,采样频率为 1000Hz。
- 滤波器设计
:
- 零相 FIR 滤波器
:采用窗函数法设计一个 100 阶的零相 FIR 低通滤波器用于去除肌电干扰,截止频率为 15Hz;设计一个 50 阶的零相 FIR 高通滤波器用于去除基线漂移,截止频率为 0.6Hz;设计一个 80 阶的零相 FIR 陷波滤波器用于去除 50Hz 工频干扰。
- IIR 滤波器
:采用巴特沃斯滤波器设计方法,通过双线性变换法设计一个 8 阶的 IIR 低通滤波器用于去除肌电干扰,截止频率为 15Hz;设计一个 6 阶的 IIR 高通滤波器用于去除基线漂移,截止频率为 0.6Hz;设计一个 10 阶的 IIR 陷波滤波器用于去除 50Hz 工频干扰。
- 零相 FIR 滤波器
- 去噪与评估
:分别使用零相 FIR 滤波器和 IIR 滤波器对采集的 ECG 信号进行去噪处理。计算去噪前后信号的 MSE、PSNR 和 SD 指标。结果显示,零相 FIR 滤波器在保持信号相位信息和减少信号失真方面表现较好,其去噪后的信号 PSNR 相对较高,SD 相对较低;而 IIR 滤波器在去除噪声的同时,可能会引入一定的相位失真,但在相同阶数下,其对噪声的抑制能力更强,MSE 相对较低。
六、总结与展望
(一)研究总结
本文深入探讨了基于零相 FIR 和 IIR 滤波器的 ECG 信号去噪方法。详细介绍了 ECG 信号噪声的来源和特点,阐述了零相 FIR 滤波器和 IIR 滤波器的原理、设计方法以及在 ECG 信号去噪中的应用。通过实例分析比较了两种滤波器的去噪效果,零相 FIR 滤波器在相位保持和信号失真控制方面具有优势,IIR 滤波器则在噪声抑制能力上表现突出。
(二)未来展望
- 滤波器性能优化
:进一步研究如何优化零相 FIR 和 IIR 滤波器的设计方法,提高其在复杂噪声环境下的去噪性能。例如,结合多种设计方法或采用自适应滤波器技术,使滤波器能够根据噪声的实时变化自动调整参数,更好地去除噪声。
- 多滤波器融合
:考虑将零相 FIR 滤波器和 IIR 滤波器进行融合,发挥各自的优势。例如,先用 IIR 滤波器进行初步的噪声抑制,再用零相 FIR 滤波器对信号进行相位校正和进一步的精细去噪,以实现更高效、准确的 ECG 信号去噪。
- 实际应用拓展
:将基于零相 FIR 和 IIR 滤波器的去噪方法应用于更多的临床诊断场景和可穿戴设备中。针对实际应用中的硬件限制和实时性要求,对滤波器进行优化和实现,为心脏疾病的早期诊断和长期监测提供更可靠的信号处理技术支持。
⛳️ 运行结果
📣 部分代码
ecg_max = max(ecg);
ecg_norm = 2 * (ecg - ecg_min) / (ecg_max - ecg_min) - 1; % maps to [-1, 1]
figure;
plot(t, ecg_norm, 'LineWidth', 1);
title('Normalized Original ECG Signal', 'FontSize', 14);
xlabel('Time (s)', 'FontSize', 12); ylabel('Amplitude (Normalized)', 'FontSize', 12);
grid on;
%% Add Noise (now noise amplitude is proportional to signal)
PLI = 0.5 * sin(2*pi*50*t); % PLI
highFreqNoise = 0.05 * randn(size(ecg_norm)); % HF noise
baselineWander = 0.3 * sin(2*pi*0.5*t); % Baseline wander
noisyECG = ecg_norm + PLI + highFreqNoise + baselineWander;
figure;
plot(t, noisyECG, 'LineWidth', 1);
title('Noisy ECG Signal', 'FontSize', 14);
xlabel('Time (s)', 'FontSize', 12); ylabel('Amplitude', 'FontSize', 12);
