心电信号降噪前处理(MATLAB R2018)

news2024/11/15 8:41:25

心电信号降噪方法分析

(1)基线漂移的常用滤除法是拟合基线抵消法,此法先估计或提取信号基线,然后进行减法运算去掉信号中漂移成分,达到滤波的目的。抑制基线漂移的另一种方法是采用线性相位滤波器,因为基线漂移的频带通常处于低频段。所以采用高通滤波器消除基线漂移,值得注意的是选择滤波器的阶数,阶次较高时,计算量较大,此外还有用基于神经网络设计的非线性自适应滤波器去除基线漂移影响的方法,这种滤波器容易受 QRS 组合波形变异的影响,算法复杂,计算工作量大。近年来,随着小波变换及其在心电信号的数字化滤波中应用新技术的兴起,将小波分解与重构法应用到心电信号滤波去噪技术可以较好抑制信号中的基线漂移,可以认为基线漂移相对集中,其主要成分在某子空间存在,如果抑制其能量,就能很好的去除基线漂移。

(2)对工频干扰抑制方法较多,主要有平滑滤波、简单整系数带阻滤波器、Levkov 滤波、自适应滤波器等。平滑滤波是较早人们所采用的数字化滤波方法,优点是算法简单,处理速度快,滤波效果较好,但其滤波通带窄,造成心电信号中的 QRS 波群削峰严重,信号衰减较大,因此使用该方法有局限性。简单整系数带阻滤波器填补了 IIR 滤波器计算量较大和 FIR 滤波器不能实现严格线性相位的缺点,它用 IIR 结构实现 FIR 滤波器功能,既保证计算量较少,又具有严格的线性相位特性。同时用较少次数递归运算实现非递归 FIR 滤波,减少运算需要的计算机,滤波效果较好,常用于信号实时处理。但滤波有很大延时,滤除的信号频率是固定的,在干扰产生波动时滤波效果下降明显。Levkov滤波法基本原理是先提取一个线性段,滤波后的值为这个线性段原始数据平均值,再算出工频干扰的幅度作为非线性段的噪声模板。对非线性段处理即用原始数据减去临近线性段得出的噪声模板值为真值。此方法算法简单,参数可调,运算量小,能适应干扰频率和幅度变化,滤波效果较好。自适应滤波器是一种能够根据输入信号自动调整自身性能并进行数字信号处理的数字滤波器,具有自学习和自调整能力。如果工频干扰的频率比较稳定,可以采用具有固定中心频率的窄带带阻滤波器(陷波器)来消除。在很多情况下,不易准确知道工频干扰的频率,同时工频干扰会存在一定的频率漂移,所以在心电信号分析处理中常采用自适应噪声抵消原理。在工频电源上取参考信号经降压变压器送入自适应滤波器,调节工频正弦信号的幅度和相位,使之与心电放大器输出的信号的误差信号达到最小,从而保证心电放大器输出中的工频干扰被抵消,而纯净心电信号保留下来。该方法运算速度快,算法也相对比较简单,但需要自学习过程估计噪声,不能跟踪干扰幅度变化。

鉴于此,采用小波分析等信号处理方法对心点信号进行降噪,运行环境为MATLAB 2018。


clc
clear all;
close all;

folderType = 'AF';
fileName = strcat('JS02677');
matFileName = strcat(fileName, '.mat');
heaFileName = strcat(fileName, '.hea');

data_path = fullfile('data/raw/', folderType, matFileName);

data = load(data_path);

ecg_orig = data.val(1, :);
ecg_orig(isinf(ecg_orig)|isnan(ecg_orig)) = 0;


fs = 125;
N = length(ecg_orig);
t = (0:N-1) / fs;
f = (0:N-1) * (fs / N);
frequencies = f(1:N/2+1);

%RESAMPLE SIGNAL To 125Hz
% [ecg, t] = resample_signal_125(ecg_orig, t_orig);

%Assigning new parameter
% fs = 125;
% N = length(ecg);
% f = (0:N-1) * (fs / N);


%Applying high pass and low pass filters
hl_filter = hpf_lpf(ecg_orig, fs);
pl_filter = powerline_removal(hl_filter, fs);
movSignal = moving_avg(pl_filter, 5);
waveletSignal = wavelet_denoise(movSignal, 5);

% Create a single figure with subplots for each signal
figure;

% Original ECG
subplot(5, 1, 1);
plot(t, ecg_orig);
xlabel('Time (s)');
ylabel('Amplitude (mV)');
title('Original Signal');

% HPF + LPF Filtered
subplot(5, 1, 2);
plot(t, hl_filter);
xlabel('Time (s)');
ylabel('Amplitude (mV)');
title('HPF + LPF Signal');

% Powerline Removal
subplot(5, 1, 3);
plot(t, pl_filter);
xlabel('Time (s)');
ylabel('Amplitude (mV)');
title('Powerline Removal');

% Moving Average applied
subplot(5, 1, 4);
plot(t, movSignal);
xlabel('Time (s)');
ylabel('Amplitude (mV)');
title('Moving Average Applied');

% Wavelet Denoised
subplot(5, 1, 5);
plot(t, waveletSignal);
xlabel('Time (s)');
ylabel('Amplitude (mV)');
title('Wavelet Denoised');


out = waveletSignal;

figure
subplot(4, 1, 1);

[Pxx,F] = periodogram(ecg_orig,[],length(ecg_orig),fs);
plot(F,10*log10(Pxx))

title('Original Signal Spectrum');
xlabel('Frequency');

subplot(4, 1, 2);

[Pxx_out,F_out] = periodogram(out,[],length(out),fs);   
plot(F,10*log10(Pxx_out))

title('Output Signal Spectrum');
xlabel('Frequency');

subplot(4, 1, 3)
input_fft = fft(ecg_orig)/N;
input_fft = 2 * abs(input_fft(1:N/2+1));
plot(frequencies, input_fft)

title('Original Signal FFT');
xlabel('Frequency');

subplot(4, 1, 4)
output_fft = fft(out)/N;
output_fft = 2 * abs(output_fft(1:N/2+1));
plot(frequencies, output_fft)

title('Output Signal FFT');
xlabel('Frequency');

output_folder_path = fullfile('data/processed/', folderType);
if ~exist(output_folder_path, 'dir')
  mkdir(output_folder_path);
end

output_path = fullfile('data/processed/', folderType, matFileName);

图片

图片

完整数据和代码通过知乎学术咨询获得:https://www.zhihu.com/consult/people/792359672131756032?isMe=1
擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1915277.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是 GC Roots??一文带你看懂!!

什么是 GC Roots ? JVM 是如何判断哪些对象应该回收,哪些应该保留呢?GC Roots 堆是一个巨大的对象集合,其中包含许多对象实例。 这些对象在堆中有不同的引用层次。一些接口会被频繁调用,每秒生成大量对象。这些对象之间…

【网络安全】实验七(ISA防火墙的规则设置)

一、实验目的 二、配置环境 1、打开两台虚拟机,并参照下图,搭建网络拓扑环境,要求两台虚拟机的IP地址要按照图中的标识进行设置,并根据搭建完成情况,勾选对应选项。注:此处的学号本人学号的最后两位数字&a…

MVC之 Controller 》》 ModelState ValidationMessageFor ValidationSummary

ModelState是Controller的一个属性,可以被继承自System.Web.Mvc.Controller的那些类访问。它表示在一次POST提交中被提交到服务器的 键值对集合,每个记录到ModelState内的值都有一个错误信息集。尽管ModelState的名字中含有“Model”,但它只有…

Monorepo仓库管理策略之 Lerna

这里写目录标题 前言:一、简介二、新建项目使用安装生成结构 三、复用现有项目执行命令查看包 四、配置package相互引用导入现有的包 五、发布包确定项目版本发布项目添加项目到到git发布包到NPM包发布出错解决方案 五、实例代码 前言: 将大型代码仓库分…

中国光储充一体化行业:有望成为全球能源转型的重要驱动力

光储充一体化系统,又称微电网解决方案,系一种整合分布式光伏能源、用电负载管理、配电设施以及监控与保护设备的自给型能源供应体系。该系统核心组件包括光伏发电系统、储能装置及充电站,其工作原理为:光伏发电系统捕获太阳能并转…

Floyd判圈算法——寻找重复数(C++)

287. 寻找重复数 - 力扣(LeetCode) 题目描述 给定一个包含 n 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,返…

系统分析师-基础知识

基础知识 一、计算机组成与结构1、计算机系统基础知识1.1 计算机硬件组成1.2 中央处理单元(CPU)1.3 数据表示1.3.1 R进制转十进制:1.3.2 十进制转R进制: 1.4 校验码(3种校验码)1.4.1 基本知识1.4.2 奇偶校验…

Security认证要点速记

登录校验流程 springSecurity已经为我们默认实现了一个用不着的登录功能,我们需要自己实现个符合我们需求的登录功能,所以我们需要去了解默认登录功能的流程,对其中的部分进行替换 SpringSecurity底层就是过滤器链,包含实现了各种…

滑动变阻器在实际应用中需要注意哪些安全事项?

滑动变阻器在实际应用中,为了确保其正常运作及保护电路安全,需要注意以下安全事项: 一、了解并遵守规格参数 最大电阻值和允许通过的最大电流值:使用前,必须清楚滑动变阻器的最大电阻值和允许通过的最大电流值&#x…

RISC-V异常处理流程概述(2):异常处理机制

RISC-V异常处理流程概述(2):异常处理机制 一、异常处理流程和异常委托1.1 异常处理流程1.2 异常委托二、RISC-V异常处理中软件相关内容2.1 异常处理准备工作2.2 异常处理函数2.3 Opensbi系统调用的注册一、异常处理流程和异常委托 1.1 异常处理流程 发生异常时,首先需要执…

软件工程(下)

目录 需求工程 概述 需求获取 分层 获取方法 项目管理维度 需求开发---需求分析 UML(统一建模语言):平台无关、语言无关 UML 41视图 需求的定义、验证、跟踪、变更 需求定义 需求验证 需求跟踪 需求变更管理 软件系统建模 软件…

.NET周刊【7月第1期 2024-07-07】

国内文章 学习.NET 8 MiniApis入门 https://www.cnblogs.com/hejiale010426/p/18280441 MiniApis是ASP.NET Core中的轻量级框架,用最少的代码和配置创建HTTP API。其特点包括简洁明了、性能卓越、灵活多变、易于学习使用,并与ASP.NET Core生态系统完美…

深入了解java锁升级可以应对各种疑难问题

对于java锁升级,很多人都停留在比较浅层的表面理解,一定程度下也许够用,但如果学习其中的细节,我们更好地理解多线程并发时各种疑难问题的应对方式! 因此我将锁升级过程中可能涉及的大部分细节或者疑问都整合成了一篇…

01MFC建立单个文件类型——画线

文章目录 选择模式初始化文件作用解析各初始化文件解析类导向创建鼠标按键按下抬起操作函数添加一个变量记录起始位置注意事项代码实现效果图虚实/颜色线选择模式 初始化文件作用解析 运行: 各初始化文件解析 MFC(Microsoft Foundation Classes)是一个C++类库,用于在Win…

fm足球经理Football Manager 2022 for mac 下载安装包

《Football Manager 2022》(足球经理2022)是一款由Sports Interactive开发并由SEGA发行的足球管理模拟游戏。这款游戏让玩家扮演足球俱乐部的 manager(经理),负责球队的所有管理工作,包括战术制定、球员转会…

美业收银系统怎么选?哪些功能实用?美业门店管理系统|拓客系统

选择美业会员系统时,你可以考虑以下几个方面的功能来确定哪些对你最实用: 1.会员管理: 系统应该能够轻松管理会员资料、积分、消费记录等信息,以便更好地了解客户需求并提供个性化服务。 2.促销与营销工具: 包括发…

RS NGP804 直流电源

直流电源 R&S NGP804 -借助四核功率提升效率- R&SNGP800 直流电源系列共有五种不同型号,功率为 400 W 或 800 W,可在多种操作条件下提供最大功率。该电源系列具有两个或四个 200 W 输出通道,每通道的输出电压和电流可达 64 V 及 …

C++入门基础篇(下)

目录 6.引用 6.1 引用的特性 6.2 const引用 7.指针和引用的关系 8.内联函数 9.nullptr 6.引用 引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,编译器不会为引⽤变量开辟内存空间, 它和它引⽤的变量共⽤同⼀块内存空间。比如&a…

Java毕业设计 基于SSM vue图书管理系统小程序 微信小程序

Java毕业设计 基于SSM vue图书管理系统小程序 微信小程序 SSM 图书管理系统小程序 功能介绍 用户 登录 注册 首页 图片轮播 图书信息推荐 图书详情 赞 踩 评论 收藏 系统公告 公告详情 用户信息修改 我的待还 图书归还 催还提醒 我的收藏管理 意见反馈 管理员 登录 个人中心…

JAVA--SpringCloud

SpringCloud基础 为什么需要spring cloud 单体结构--Monolith 首先请回想一下我们所开发的服务是什么样子的。通常情况下,这个服务所对应的代码由多个项目(模块)所组成,各个项目会根据自身所提供功能的不同具有一个明确的边界。…