基于集成经验模态分解的心电信号降噪和基于希尔伯特变换的R峰检测(MATLAB R2018)

近年来,心脏病已成为危害人类健康最常见的疾病。为了有效预防心脏疾病的发生,往往需要更加准确地采集与诊断心电信号,以便于更好地反映心脏情况。心电信号作为人体生理信号,对于识别心脏异常和心脏疾病具有重要的参考价值。心电信号,是由心脏的电活动引起心脏周围的导电组织和体液反映到身体表面上而产生的电压变化。正常心电信号主要由P波、QRS复合波、T波与U波组成。由于心电信号频率与振幅较低,在采集心电信号时往往伴随着不可避免的噪声,因而降噪成为心电信号处理的核心。心电信号中存在多种低频和高频噪声,常见的噪声有加性高斯白噪声(AdditiveWhiteGaussianNoise,AWGN)、基线漂移(BaselineWander,BW)、肌电干扰(MuscleArtefacts,MA)、运动伪影(ElectrodeMotion,EM)、工频干扰(PowerLineInterference,PLI)。

基线漂移(BW):BW是一种低频噪声信号,主要是由呼吸、身体运动、电极接触不良与皮肤电极阻抗所引起的。BW噪声会使心电信号中的ST段与其他低频成分失真。

工频干扰(PLI):PLI主要是由供电设备产生的,它会扭曲低振幅心电信号波(P波或T波)的振幅与形状。

肌电干扰(MA):MA作为最主要的心电噪声信号之一,是由肌肉的收缩与颤动或身体突然运动而产生的电活动。肌电信号导致心电信号的局部波失真。

运动伪影(EM):由测量心电信号的电极与皮肤之间的阻抗随着相对位移而发生改变所引起的,与P波、T波的频谱几乎完全重合。

ECG处理主要是从采集到有噪声的信号中通过技术提取纯信号,以便于更精确地分析与诊断心脏问题。因此,希望设计一种能够完全消除噪声而不影响信号的技术。然而事实上,这是不可能的。因为噪声的频率与信号的频率在一个阶段非常接近以至于重叠,会无法滤除噪声或会使信号失真。因此,尽最大可能去除噪声而不影响信号是目前最主要的技术。近年来,众多学者采用不同学科不同领域方法来研究如何降噪,取得了较满意效果。

鉴于此,提出一种基于集成经验模态分解的心电信号降噪和基于希尔伯特变换的R峰检测,运行环境为MATLAB 2018,主代码如下:

%% Data Loading
ecg=load ('ecg1.mat');          % loading the signal 
ecg=struct2cell(ecg);
ecg=cell2mat(ecg);
ecg = (ecg - 1024)/200;     % you have to remove "base" and "gain"
ecg1=ecg(1,:);              %Noisy ecg
ecg2=ecg(2,:);              %filtered ecg
Fs =500;                    % sampling frequecy
t =linspace(0,length(ecg1)/Fs,length(ecg1)); %time vector

%% ECG signal denoising
imf=eemd(ecg1,.2,70); %Apply the EEMD to the noisy signal .2->ratio of the standard deviation 70->ensemble number
imfs=imf';             %transpose the imf's matrix
reconstruction=imfs(4,:)+imfs(5,:)+imfs(6,:);  %We consider that these 3 imf's possess the important information

%4 order Butterworth filter bandpass .05-230Hz. 
fclowpass=230; % Low pass cut-off frequency 230Hz
fchighpass=.05; % Low pass cut-off frequency .05Hz
filterorder=4;  %filter order

[b,a]=butter(filterorder,[filterorder*fchighpass/Fs,2*fclowpass/Fs]);
filtered_ECG=filter(b,a,reconstruction);

%% Emphasizing R peaks of the ECG
%Getting the maxima and minima of the ECG signal, to emphasize the R peaks
decg=(1/Fs)*(diff(filtered_ECG));  %derivative of the ecg
hecg=hilbert(decg); %hilbert transform of the derivative. 
envelope=abs(hecg);  %It returns the envelope of the ecg

%% R peaks detection 
maximum=(max(envelope));
Threshold=.6*(maximum); 
[pks,locs] = findpeaks(envelope,'MinPeakHeight',Threshold);
time=(1/Fs)*length(ecg1);
timefactor=60/time;
cardiacFreq=round(timefactor*length(pks));
%% Plots
figure (1)
plot(t,ecg1); xlabel('time (s)'); ylabel('mV'); title('Raw ECG');
figure(2)
subplot(7,1,1);
plot(t,imfs(1,:)); xlabel('time (s)'); ylabel('mV'); title('Original ECG');
subplot(7,1,2);
plot(t,imfs(2,:)); xlabel('time (s)'); ylabel('mV'); title('1st IMF');
subplot(7,1,3);
plot(t,imfs(3,:)); xlabel('time (s)'); ylabel('mV'); title('2nd IMF');
subplot(7,1,4);
plot(t,imfs(4,:)); xlabel('time (s)'); ylabel('mV'); title('3rd IMF');
subplot(7,1,5);
plot(t,imfs(5,:)); xlabel('time (s)'); ylabel('mV'); title('4th IMF');
subplot(7,1,6);
plot(t,imfs(6,:)); xlabel('time (s)'); ylabel('mV'); title('5th IMF');
subplot(7,1,7);
plot(t,imfs(7,:)); xlabel('time (s)'); ylabel('mV'); title('6th IMF');
figure (3)
subplot(7,1,1);
plot(t,imfs(8,:)); xlabel('time (s)'); ylabel('mV'); title('7th IMF');
subplot(7,1,2);
plot(t,imfs(9,:)); xlabel('time (s)'); ylabel('mV'); title('8th IMF');
subplot(7,1,3);
plot(t,imfs(10,:)); xlabel('time (s)'); ylabel('mV'); title('9th IMF');
subplot(7,1,4);
plot(t,imfs(11,:)); xlabel('time (s)'); ylabel('mV'); title('10th IMF');
subplot(7,1,5);
plot(t,imfs(12,:)); xlabel('time (s)'); ylabel('mV'); title('11th IMF');
subplot(7,1,6);
plot(t,imfs(13,:)); xlabel('time (s)'); ylabel('mV'); title('12th IMF');
subplot(7,1,7);
plot(t,imfs(14,:)); xlabel('time (s)'); ylabel('mV'); title('13th IMF');
figure (4)
plot(t,reconstruction); xlabel('time (s)'); ylabel('mV'); title('IMFs reconstruction');
figure(5)
plot(t,filtered_ECG); xlabel('time (s)'); ylabel('mV'); title('Filtered ECG (IMF+bandPass)');
figure(6)
plot(t(1:9999),decg); xlabel('time (s)'); ylabel('d(ECG)/dt'); title('ECG derivative');
figure(7)
plot(t(1:9999),hecg); xlabel('time (s)'); ylabel('H(d(ECG)/dt)'); title('Hilbert Transform of derivate');
figure(8)
plot(t(1:9999),envelope); xlabel('time (s)'); ylabel('B(d(ECG)/dt)'); title('Envelope');
figure (9)
plot(t(1:9999),envelope,locs,pks,'or');
%完整代码:mbd.pub/o/bread/mbd-ZJablZ5x
legend('ECG','R peaks','Location','NorthWest');

图片

图片

图片

图片

图片

图片

图片

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

K8S认证|CKA题库+答案| 16. 升级集群

目录 16、升级集群 CKA v1.29.0模拟系统 下载试用 题目: 开始操作: 1)、切换集群 2)、 隔离节点 ​3)、登录提权 ​4)、解锁版本 ​5)、查看版本 6)、升级版本 7)、其他…

Taipy快速打造数据驱动的Web应用

Taipy: 用Taipy,让数据洞察与应用开发无缝对接- 精选真开源,释放新价值。 概览 Taipy快速打造数据驱动的 Web 应用。这是一个基于 Python 和 Flask 的项目,结合了 React 等前端技术,为开发者提供了一个简洁、高效的开…

Python考试复习--day3

1.统计字符串个数 ninput() z0 s0 k0 o0 for i in n:if i.isalpha():zz1elif i.isnumeric():ss1elif i.isspace():k1else:o1 print(字母有{}个,数字有{}个,空格有{}个,其他字符{}个.format(z,s,k,o))2.分类统计字符 ninput() x0 d0 s0 k0 o0 for i in n:if i.islower():x1elif …

2.1 数据类型-常量-变量(整型-浮点-字符)

目录 1 数据类型 1.1 关键字 2 常量 3 变量 3.1 命名规则 4 整形数据 4.1 符号常量 4.2 整型变量 5 浮点型数据 5.1 浮点型常量 5.2 浮点型变量 6 字符型数据 6.1 字符型常量 转义字符 6.2 字符数据在内存中的存储形式及其使用方法 6.3 ASCII码表 7 字符串型常…

吉大计科软件工程个人错题

文章目录 Chapter oneChapter two——软件过程Chapter three——可行性研究Chapter four——需求分析Chapter five——总体设计Chapter six——详细设计Chapter seven——实现Chapter eight——软件维护Chapter nine——软件项目管理Chapter ten——面向对象一些不会的题一些可…

windows安装SQL Server

1、下载 下载网页:SQL Server 下載 | Microsoft 2022版下载地址:https://go.microsoft.com/fwlink/p/?linkid2215158&clcid0x404&culturezh-tw&countrytw 下载结果:SQL2022-SSEI-Dev.exe 打开选第三个,下载介质&…

二叉树——经典练习题

目录 前言: 一、单值二叉树 题目描述: 思路分析: 代码实现: 二、二叉树最大深度 题目描述: 思路分析: 代码实现: 三、检查两颗树是否相同 题目描述: 思路分析: 代…

AI图书推荐:ChatGPT解码—人工智能增强生活指南

《ChatGPT解码—人工智能增强生活指南》(ChatGPT Decoded. A Beginners Guide to AI-Enhanced Living )是一本由 大卫维恩斯(David Wiens )所著的书籍,旨在帮助读者了解并有效利用GPT-4语言模型这一强大工具来提升日常…

OceanBase SQL 诊断和调优实践——【DBA从入门到实践】第七期

数据库作为绝大多数应用系统储存数据的核心系统,在用户系统需要访问数据时,有着至关重要的作用。在这些交互中,SQL 语言是应用与数据库系统之间“沟通”的桥梁,它负责将应用的指令传达给数据库。因此,SQL 的性能好坏直…

网络工程师---第三十八天

ISIS: ISIS含义:中间系统到中间系统IS-IS。 ISIS特点:①内部网关协议IGP(Interior Gateway Protocol),用于自治系统内部; ②IS-IS也是一种链路状态协议,使用最短路径优先SPF算法进…

Jenkins 流水线(Pipeline)详解

大家好,Jenkins 流水线(Pipeline)是一种可编排的持续集成和交付(CI/CD)方法,它以代码的方式定义整个软件开发过程中的构建、测试和部署流程。接下来就跟大家分享一下Jenkins 流水线(Pipeline&am…

云计算-基础设施和管理机制(Infrastructure and Management Mechanisms)

逻辑网络边界(Logical Network Perimeter) 逻辑网络边界是软件控制的虚拟网络,它是物理网络的一部分。其主要思想是隔离逻辑网络,防止不希望的访问,同时仍然为合法用户提供访问权限。下图显示了云系统中一个简单的逻辑…

【Qt】Qt入门

思维导图 学习目标 这一系列是学习Qt,在C中,会发现有不少岗位的要求是熟悉Qt,所以Qt的学习是不能推迟的。 一、Qt的概述 1.1 Qt的特点 Qt是一个跨平台的C应用程序开发框架: 具有短平快的优秀特质:投资少&#xff0…

每日练习——同余方程以及格雷码

同余方程 题目描述 运行代码 #include<iostream> #define ll long long using namespace std; ll exgcd(ll a, ll b, ll& x, ll& y) {if (!b)return x 1, y 0, a;ll d exgcd(b, a % b, y, x);y - a / b * x;return d; } int main() {ll a, b, x, y;cin >…

【教学类-58-05】黑白三角拼图05(2-10宫格,每个宫格随机1张-6张,带空格纸,1页3张黑白3张白卡)

背景需求&#xff1a; 【教学类-58-04】黑白三角拼图04&#xff08;2-10宫格&#xff0c;每个宫格随机1张-6张&#xff0c;带空格纸&#xff0c;1页6张黑白&#xff0c;1张6张白卡&#xff09;-CSDN博客文章浏览阅读582次&#xff0c;点赞16次&#xff0c;收藏3次。【教学类-58…

Kafka 安装教程和基本操作

一、简介 Kafka 是最初由 Linkedin 公司开发&#xff0c;是一个分布式、分区的、多副本的、多订阅者&#xff0c;基于 zookeeper 协调的分布式日志系统&#xff08;也可以当做 MQ 系统&#xff09;&#xff0c;常见可以用于 web/nginx 日志、访问日志&#xff0c;消息服务等等…

C++之lambda函数与std::bind区别及用法实例(二百八十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

AI网络爬虫-从当当网批量获取图书信息

工作任务和目标&#xff1a;用户输入一个图书名称&#xff0c;然后程序自动从当当网批量获取图书信息 查看相关元素在源代码中的位置&#xff1a; 第一步&#xff1a;在deepseek中输入提示词&#xff1a; 你是一个Python爬虫专家&#xff0c;一步步的思考&#xff0c;完成以下…

5.26机器人基础-DH参数 正解

1.建立DH坐标系 1.确定Zi轴&#xff08;关节轴&#xff09; 2.确定基础坐标系 3.确定Xi方向&#xff08;垂直于zi和zi1的平面&#xff09; 4.完全确定各个坐标系 例子&#xff1a; 坐标系的布局是由个人决定的&#xff0c;可以有不同的选择 标准坐标系布局&#xff1a; …

HAL库LED点灯

一、搭建开发环境 &#xff08;一&#xff09;安装MDK5 具体安装请参照下面链接&#xff1a;如何开始一个stm32的简单程序的编译_stm32程序编译-CSDN博客 &#xff08;二&#xff09;安装Jdk 由于STM32CubeMX需要用到JAVA&#xff0c;因此需要安装jdk环境。 jdk官网下载链接…