心电信号降噪方法(滤波器/移动平均/小波等,MATLAB环境)

对于一个正常的、完整的心动周期,对应的心电图波形如下图所示,各个波形都对应着心脏兴奋活动的生理过程,包含P波,PR段,QRS波群,ST段,T波,U波。

(1)P波心电图中,起始的P波对应心房的兴奋过程,一个完整的心动周期起始于窦房结,P波的起始,代表窦房结将心脏兴奋传递至心房使得心房全部受到激励的过程。P波的方向及形态与兴奋在心房内的传播途径密切相关,在各个导联中,P波形态不尽一致,一般来说,P波顶部圆钝,其幅值不高于0.25mV,时限宽度在0.11s以内。

(2)QRS复合波在心电图中,QRS复合波也称为QRS波群,表征着心室除极的心脏电位变化状态,由于心室各部位受到激励顺序有先后,因此QRS复合波是代表心室几个部分兴奋过程的综合波形,是由方向向下的Q波,波形宽大且幅值较高的R波,以及波形方向向下的S波组合形成的。QRS复合波在心电图中波形最为明显,有波形宽,斜率大的特点,因此最容易被识别,常作为心电信号研究的基础,应用广泛。一般正常情况下,QRS波的时限宽度在0.06-0.10s。而在不同的导联中,Q波,R波,S波的振幅、方向不尽一致,致使QRS波形态各异。一般来说Q波振幅小于同一导联中R波的1/4~1/2。在双极肢体导联I、II、III中,R波的振幅一般不超过1.5mV,2.5mV,2.0mV。在标准导联中,S波的振幅的变化量不超过0.6mV。

(3)S-T段在QRS波群的终点到与之相继出现的T波起点中间的水平连线是S-T段,表征着从心室除极结束至缓慢复极的心电活动状态。一般来说,S-T段正常情况下其时限宽度在0.10-0.14s,接近于基线,偏移量较小,一般下移量在0.05mV以内,ST段的抬高量在不同导联中有不同范围,例如在V3导联中抬高量在0.5mV内,ST段的偏移量超过正常范围针对心肌类疾病诊断意义重大。

(4)T波在QRS波群之后出现的顶部圆钝的波形是T波,表征心室复极的状态,通常T波与其同一心动周期的QRS主波方向统一,但也存在T波倒置,双向等情况,其所占时限较长,一般为0.05-0.250s,在不同导联中其幅值也不尽相同,一般应大于与其相邻的R波幅值的1/10。

(5)Q-T间期Q-T间期是从Q波的起始点到T波的终点之间的距离,表征的是心室除极开始到复极完成的心脏活动过程。此段间期与心搏速率相关联,心率越慢,间期越长,相反则越短。一般情况下,若心率在70次/分左右,那么Q-T间期在0.32-0.44s左右,超过正常Q-T间期最高值0.03s被称为Q-T间期显著延长。

(6)U波U波出现在T波之后,是因心室复极化而形成,波形宽而低平,振幅较小,一般不超过0.05mV,时限宽度在0.02~0.04s。U波一般与T波方向相同,其振幅约在0.03mV左右,U波不一定出现在所有导联中,在胸导联中其波形较为明显。

鉴于此,采用滤波器/移动平均/小波等方法进行心电信号降噪,运行环境为MATLAB,运行代码如下:

clc
clear all;
close all;folderType = 'AVRT';
fileName = strcat('JS10493');
% folderType = 'AF';
% fileName = strcat('JS10361');
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);
endoutput_path = fullfile('data/processed/', folderType, matFileName);
save(output_path, 'out');source_file_path_hea = fullfile('data/raw/', folderType, heaFileName);
destination_file_path_hea = fullfile("data/processed/", folderType, heaFileName);copyfile(source_file_path_hea, destination_file_path_hea);%完整代码:https://mbd.pub/o/bread/mbd-ZZiUmJhw%assess_signals(ecg, out, fs)

图片

图片

图片

图片

图片

图片

图片

图片

工学博士,担任《Mechanical System and Signal Processing》《中国电机工程学报》《控制与决策》等期刊审稿专家,擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。

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

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

相关文章

OpenBMC相关的网站

openbmc官方网站 https://github.com/openbmchttps://github.com/openbmc Dashboard [Jenkins]https://jenkins.openbmc.org/ https://gerrit.openbmc.org/Gerrit Code Reviewhttps://gerrit.openbmc.org/ Searchhttps://grok.openbmc.org/ openbmc参考网站 https://www.c…

R实验 正交试验设计与一元线性回归分析

实验目的: 掌握正交试验设计记号的意义;掌握正交试验设计的直观分析和方差分析;掌握一元线性回归模型的相关概念;掌握最小二乘法的思想;掌握一元线性回归方程的显著性检验和预测。 实验内容: 1…

C++ day1 作业练习

整理思维导图 定义自己的命名空间my_sapce&#xff0c;在my_sapce中定义string类型的变量s1&#xff0c;再定义一个函数完成对字符串的逆置。 #include <iostream> #include <cstring>using namespace std; namespace my_space {string s1; }void show() {cout<…

NASA数据集——严格校准的臭氧(O3)、甲醛(HCHO)、二氧化碳(CO2)和甲烷(CH4)混合比,以及包括三维风在内的气象数据

Alpha Jet Atmopsheric eXperiment Meteorological Measurement System (MMS) Data 阿尔法喷气式大气实验气象测量系统&#xff08;MMS&#xff09;数据 简介 Alpha Jet Atmospheric eXperiment (AJAX) 是美国国家航空航天局艾姆斯研究中心与 H211, L.L.C. 公司的合作项目&a…

C#面:当一个线程进入一个对象的方法后,其它线程是否可以进入该对象的方法?

一个线程在访问一个对象的一个synchronized方法时&#xff1a; 另一个线程可以同时访问这个对象的非同步方法。另一个线程不可以同时访问这个对象的普通同步方法。另一个线程可以同时访问这个对象的静态同步方法 &#xff0c;即static synchronized修饰的方法 。另一个线程不可…

win10 cmake vs2019 qt opencv contrib 下载 编译 提供编译好的全套文件下载

本文意在提供 win10系统下 使用 cmake-gui 配置 opencv源码 再使用vs2019编译的全套过程 为什么是win10系统? 主要提供给使用pc端的人使用,例如工厂员工 或 上课教学 还可以是什么系统? 当然这一切也可以在arm上操作 例如一块stm32及其配套的硬件 装在无人机上 图像中就…

【Python】 去除空白字符的艺术:Python中的字符串修剪技巧

基本原理 在Python编程中&#xff0c;经常会遇到需要去除字符串两端空白字符&#xff08;也称为“修剪”&#xff09;的情况。空白字符包括空格、制表符、换行符等。Python提供了多种方法来处理字符串中的空白字符&#xff0c;其中最常见的是使用字符串的strip()方法。 strip…

SpringSecurity6从入门到实战之引言和基本概念

SpringSecurity6从入门到实战之引言和基本概念 前言 在当今数字化时代&#xff0c;随着网络应用的日益普及&#xff0c;保护用户数据和系统安全变得至关重要。作为Java开发社区的中坚力量&#xff0c;Spring框架提供了一整套解决方案来构建企业级应用程序。然而&#xff0c;随…

APM2.8飞控

ArduPilotMega 主控可应用于 固定翼、直升机、多旋翼、地面车辆 APM2.8飞控供电有两种 1.电流计供电&#xff0c; 2.带BEC&#xff08;稳压功能&#xff09;的电调供电 ArduPilotMega 内部的硬件结构图&#xff1a; 调试时&#xff0c;不要使用向导&#xff0c;由于向导功能不…

Linux中的SCP:有你,一切都不遥远

引言 在Linux系统中&#xff0c;文件传输是一个常见的任务。SCP&#xff08;Secure Copy Protocol&#xff09;命令提供了一种安全的方式来在本地和远程计算机之间复制文件。本文将详细介绍SCP命令的使用方法&#xff0c;并提供一些实用的示例以及故障排除指南。 SCP命令简介…

vue组件通讯$parent和$children获取单签组件的⽗组件和当前组件的⼦组件的例子

在 Vue 中&#xff0c;$parent 和 $children 是实例属性&#xff0c;允许你访问组件的父组件和子组件。但是&#xff0c;请注意&#xff0c;这些属性主要用于在开发过程中进行调试和临时访问&#xff0c;并不推荐在正常的组件通信中使用&#xff0c;因为它们破坏了组件的封装性…

React Native 之 Linking(链接)(十五)

URL Scheme是什么 URL Scheme是一种机制&#xff0c;主要用于在移动应用程序中打开另一个应用程序或执行特定操作。 定义与原理&#xff1a; URL Scheme允许应用程序通过特定的URL格式与其他应用程序进行交互。 它通过在应用程序中注册一个自定义的URL Scheme&#xff0c;并在…

[GDB] GDB调试

目录 一 简介 二 功能: 三 命令: 四 调试准备: 五 开始调试: 5.1 添加断点&#xff1a; 5.2 条件编译 5.3 断点查看 5.4 断点删除: 5.5 查看源码 5.6 单步调试(逐过程)&#xff1a; 5.7 断点调试: 5.8 单步跟踪(逐语句): 5.9 调试过程&#xff1a; 5.9.1 开始调…

在CentOS 8上卸载与安装MySQL 8的详细步骤

关键词&#xff1a;MySQL 8安装、CentOS 8、YUM源配置、卸载MySQL、MySQL残留文件删除、首次登录MySQL临时密码、服务状态检查、MySQL社区服务器 阅读建议&#xff1a;本文适合需要在CentOS 8操作系统上部署最新MySQL 8数据库的系统管理员或开发者阅读。文中步骤简洁清晰&#…

Spring (23)如何在Spring中配置数据源

在Spring中配置数据源是一个基本且重要的任务&#xff0c;特别是在构建依赖于数据库操作的应用程序时。数据源&#xff08;DataSource&#xff09;是数据库连接的工厂&#xff0c;Spring通过数据源抽象简化了数据库连接的管理。配置数据源通常涉及定义一个或多个DataSourcebean…

ssm145基于java的电脑硬件库存管理系统+jsp

电脑硬件库存管理系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对电脑硬件库存信息管理混乱&…

【设计模式】创建型-抽象工厂模式

前言 在软件开发领域&#xff0c;设计模式是一种被广泛接受的解决方案&#xff0c;用于解决特定问题并提供可维护和可扩展的代码结构。抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是其中之一&#xff0c;它提供了一种方法来创建一系列相关或相互依赖的对象…

Prime算法构造最小生成树(加点法)

一、算法逻辑 想要轻松形象理解Prime的算法逻辑&#xff0c;视频肯定比图文好。 小编看过很多求相关的教学视频&#xff0c;这里选出一个我认为最好理解的这一款安利给大家。 因为他不仅讲解细致&#xff0c;而且还配合了动画演示&#xff0c;可以说把一个抽象的东西讲的非常…

linux下重启oracle数据库步骤

Linux下重启oracle数据库步骤&#xff1a; 1.使用oracle用户登录数据库服务器&#xff08;root登录的话进入数据库时会找不到sqlplus命令&#xff09; su – oracle 2.通过数据库管理员sysdba进入oracle数据库 sqlplus / as sysdba 3.关闭数据库 shutdown immediate &#xff0…

编码电机脉冲数统计,测速

脉冲统计代码 int reducation 90;//减速比&#xff0c;根据电机参数设置&#xff0c;比如 15 | 30 | 60 int pulse 11; //编码器旋转一圈产生的脉冲数该值需要参考商家电机参数 int per_round pulse * reducation * 4;//车轮旋转一圈产生的脉冲数 long start_time millis…