news 2026/5/25 18:10:23

心电信号ECG去噪:Matlab实现低通滤波与小波分解结合

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
心电信号ECG去噪:Matlab实现低通滤波与小波分解结合

心电信号ECG去噪,Matlab程序,使用低通滤波和小波分解结合。 先去除高于80Hz的高频噪声,再去除高于50Hz的噪声和工频干扰等,最后去除基线漂移。 具体工作如下: 1、读取一段ECG信号,采样率为200Hz,时长10秒,画出时域、频域图; 2、构造低通滤波器,截止频率为80Hz,去除ECG高频噪声; 3、使用小波分解,进一步去除高于50Hz的噪声和工频干扰等; 4、使用小波分解去除基线漂移,程序结果如图。 程序运行如遇问题可帮忙远程调通。 换成自己的ECG信号时需要根据信号情况调整程序参数。

在生物医学信号处理领域,心电信号(ECG)的准确分析至关重要。然而,ECG信号在采集过程中常常受到各种噪声的干扰,影响其后续分析与诊断。本文将介绍如何通过Matlab程序,利用低通滤波和小波分解相结合的方法,有效地去除ECG信号中的噪声。

1. 读取ECG信号并绘制时域、频域图

首先,我们需要读取一段ECG信号。假设信号采样率为200Hz,时长10秒。在Matlab中,我们可以这样实现:

fs = 200; % 采样率 t = 0:1/fs:(10 - 1/fs); % 时间向量 % 这里假设已有生成好的ECG信号数据存储在变量ecg_signal中 % 如果是从文件读取,可以使用load函数,例如load('ecg_data.mat'); % 假设文件中ECG信号变量名为ecg_signal ecg_signal = sin(2*pi*10*t) + 0.5*randn(size(t)); % 这里简单模拟一个ECG信号 % 绘制时域图 figure; subplot(2,1,1); plot(t, ecg_signal); xlabel('时间 (s)'); ylabel('幅值'); title('ECG信号时域图'); % 绘制频域图 n = length(ecg_signal); f = (0:n - 1)*(fs/n); ecg_fft = abs(fft(ecg_signal)); subplot(2,1,2); plot(f, ecg_fft(1:length(f))); xlabel('频率 (Hz)'); ylabel('幅值'); title('ECG信号频域图');

上述代码中,首先定义了采样率fs和时间向量t。这里我们简单模拟了一个ECG信号,实际应用中可从文件读取真实数据。通过plot函数绘制了时域图,直观展示信号随时间的变化。利用fft函数进行快速傅里叶变换,得到信号频域信息并绘制频域图,以便观察信号的频率分布情况。

2. 构造低通滤波器去除高频噪声

接下来,构造截止频率为80Hz的低通滤波器,去除高于80Hz的高频噪声。

fc1 = 80; % 截止频率 [b1, a1] = butter(5, fc1/(fs/2)); % 5阶巴特沃斯低通滤波器 ecg_filtered1 = filter(b1, a1, ecg_signal); % 绘制滤波后时域图 figure; subplot(2,1,1); plot(t, ecg_filtered1); xlabel('时间 (s)'); ylabel('幅值'); title('80Hz低通滤波后ECG信号时域图'); % 绘制滤波后频域图 n1 = length(ecg_filtered1); f1 = (0:n1 - 1)*(fs/n1); ecg_fft1 = abs(fft(ecg_filtered1)); subplot(2,1,2); plot(f1, ecg_fft1(1:length(f1))); xlabel('频率 (Hz)'); ylabel('幅值'); title('80Hz低通滤波后ECG信号频域图');

这里使用butter函数设计了一个5阶巴特沃斯低通滤波器,截止频率为fc1filter函数将设计好的滤波器应用到ECG信号上,得到滤波后的信号ecg_filtered1。同样绘制了滤波后信号的时域图和频域图,从频域图中可以清晰看到高于80Hz的高频成分已被有效抑制。

3. 利用小波分解去除高于50Hz的噪声和工频干扰

进一步利用小波分解来去除高于50Hz的噪声和工频干扰等。

% 小波分解 wname = 'db4'; % 选用db4小波 level = 5; % 分解层数 [c, l] = wavedec(ecg_filtered1, level, wname); % 获取高频系数 for i = 1:level detcoeffs{i} = detcoef(c, l, i); end % 获取低频系数 approxcoeff = appcoef(c, l, wname, level); % 设定阈值去除高频噪声 for i = 1:level thresh = wthrmngr('dw1ddenoLVL', 'rigrsure', detcoeffs{i}); detcoeffs{i} = wthresh(detcoeffs{i}, 'h', thresh); end % 重构信号 new_c = [approxcoeff; detcoeffs{:}]; ecg_filtered2 = waverec(new_c, l, wname); % 绘制小波分解后时域图 figure; plot(t, ecg_filtered2); xlabel('时间 (s)'); ylabel('幅值'); title('小波分解去除50Hz以上噪声后ECG信号时域图');

代码中选用db4小波进行5层小波分解,wavedec函数得到分解系数c和长度向量l。通过detcoefappcoef分别获取高频和低频系数。利用wthrmngr函数基于rigrsure准则计算阈值,对高频系数进行阈值处理去除噪声。最后使用waverec函数重构信号,得到进一步滤波后的ecg_filtered2,并绘制其时域图。

4. 使用小波分解去除基线漂移

最后,再次利用小波分解去除基线漂移。

% 再次小波分解去除基线漂移 wname2 = 'db6'; % 选用db6小波 level2 = 8; % 分解层数 [c2, l2] = wavedec(ecg_filtered2, level2, wname2); % 获取低频系数(基线漂移主要在低频部分) approxcoeff2 = appcoef(c2, l2, wname2, level2); % 去除低频系数(即去除基线漂移) new_c2 = c2; new_c2(l2(1):end) = 0; ecg_filtered3 = waverec(new_c2, l2, wname2); % 绘制去除基线漂移后时域图 figure; plot(t, ecg_filtered3); xlabel('时间 (s)'); ylabel('幅值'); title('去除基线漂移后ECG信号时域图');

这里选用db6小波进行8层小波分解,获取低频系数,将低频系数置零(因为基线漂移主要存在于低频部分),然后重构信号得到去除基线漂移后的ecg_filtered3,并绘制其时域图。

总结与注意事项

通过上述Matlab程序,结合低通滤波和小波分解,有效地对ECG信号进行了去噪处理。但在实际应用中,若换成自己的ECG信号,需要根据信号具体情况调整程序参数,如滤波器阶数、小波类型、分解层数等。程序运行过程中如遇问题,可联系帮忙远程调通。希望本文的方法能为从事ECG信号处理的小伙伴们提供一些帮助。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/26 5:25:22

别再错过收益波动!构建你的专属Open-AutoGLM收益预警系统(附源码)

第一章:Open-AutoGLM收益预警系统概述Open-AutoGLM收益预警系统是一套基于大语言模型与自动化数据处理技术构建的智能监控平台,专为金融、投资及企业财务场景设计。系统通过实时采集多源异构数据,结合自然语言理解能力,动态识别潜…

作者头像 李华
网站建设 2026/5/25 13:15:25

基于Flink的实时大数据异常检测系统设计与实现

基于Flink的实时大数据异常检测系统设计与实现 关键词:Flink流处理、实时异常检测、状态管理、窗口计算、大数据系统设计 摘要:在金融风控、物联网设备监控、服务器日志分析等场景中,实时发现异常数据是保障系统安全和业务稳定的关键。传统批…

作者头像 李华
网站建设 2026/5/25 22:29:10

CSP月测试卷三

一、选择题(共15题,每题4分,满分60分)请将正确答案的序号填入答题栏,多选、错选、不选均不得分。1、已知某二叉树的前序序列为ABCDEF,中序序列为BADCFE,则其后序序列为()…

作者头像 李华
网站建设 2026/5/26 6:12:32

【医疗AI新突破】:Open-AutoGLM如何实现个性化用药提醒?

第一章:Open-AutoGLM 用药时间提醒Open-AutoGLM 是一个基于大语言模型的自动化任务调度框架,能够结合自然语言理解与时间触发机制,实现个性化的用药提醒服务。该系统通过解析用户输入的自然语言描述(如“每天上午9点和晚上7点提醒…

作者头像 李华
网站建设 2026/5/25 9:27:21

校园IT负责人必看:Open-AutoGLM如何解决传统预约系统的4大痛点?

第一章:校园IT负责人必看:Open-AutoGLM如何解决传统预约系统的4大痛点?在高校信息化建设中,传统的实验室、会议室和设备预约系统长期面临响应慢、管理复杂、资源冲突频发等问题。Open-AutoGLM作为基于开源大模型的智能调度引擎&am…

作者头像 李华
网站建设 2026/5/25 10:03:32

政务AI革命已来:Open-AutoGLM助力基层工作人员减负80%(附实测数据)

第一章:政务AI革命已来:Open-AutoGLM的时代背景与战略意义人工智能正以前所未有的速度重塑政府治理模式。在数字化转型的浪潮中,政务AI不再仅仅是效率工具,而是成为推动国家治理体系现代化的核心引擎。Open-AutoGLM作为面向政务场…

作者头像 李华