• 心电信号噪声消除
  • 心电信号R波提取

HRV波形提取

通过计算心电R波波峰对应时间的一阶差分,得到HRV特征信号。

HRV(i)=R(i+1)-R(i)

其中,i为R波位置的采样点,R(x)为x点的采样时间,即R(x)=x/f

hrvy=diff(rvalue)*(1/800);subplot(2,1,1);
plot(x);
hold on;
plot(rvalue,x(rvalue),'r^');
subplot(2,1,2);
lenhrv=length(hrvy);
plot(1:lenhrv,hrvy,'b');

时域特征

  • SDNN
  • rMSSD
  • pNN50
SDNN=std(hrvy,1);%SDNN
rrdx=abs(diff(hrvy));
rMSSD=rms(rrdx);%rMSSD
nn50=find(rrdx>0.05);
pNN50=length(nn50)/length(rrdx);%pNN50

频域特征

  • 总功率TP
  • 低频功率PLF
  • 高频功率PHF
  • LF/HF
hrvy=diff(rvalue)*(1/800);
lenhrv=length(hrvy);%HRV的采样点数(5min内)
fs=lenhrv/300;%HRV的采样频率nfft=lenhrv;
window=hamming(100);
noverlap=20;
range='onesided';
[Pxx,f]=pwelch(hrvy,window,noverlap,nfft,fs,range);
subplot(2,1,2)
plot(f,(Pxx),'b');
hold on;
plot([0.04,0.04],[0,1],'r');
area(f(f>=0.04&f<=0.15),Pxx(f>=0.04&f<=0.15),'FaceColor','r');
plot([0.15,0.15],[0,1],'r');
ylim([0 0.04]);
subplot(2,1,1);
plot(hrvy);

非线性特征

HRV序列Poincare散点图

  • SD1
  • SD2
  • S=Π*SD1*SD2

(参考自HRV非线性分析PoincarePlot:SD1,SD2计算算法)

sdx=hrvy;
sdx(end)=[];
sdy=hrvy;
sdy(1)=[];
figure(3);
subplot(2,1,1);
scatter(sdx,sdy,5,'filled');
ee=[];
for i=1:length(sdx)e=abs(sdx(i)-sdy(i))/sqrt(2);if e>0.1ee=[ee;i];end
end
for i=1:length(ee)sdx(ee(i))=NaN;sdy(ee(i))=NaN;
end
sdx(isnan(sdx))=[];
sdy(isnan(sdy))=[];
sd1=std(sdy-sdx)/sqrt(2);
sd2=std(sdy+sdx)/sqrt(2);subplot(2,1,2);
scatter(sdx,sdy,3,'filled');
h=refline(1,0);
set(h,'color','red');
hold on;
ecc=axes2ecc(sd2,sd1);
[elat,elon]=ellipse1(0.6,0.6,[sd2 ecc],45);
plot(elat,elon);

小波熵

(参考自基于小波熵的Matlab程序)

wpt=wpdec(hrvy,4,'db3');
plot(wpt);
for i=1:2^4E(i)=sum(abs(wprcoef(wpt,[4,i-1])).^2);
end
E1=sum(E);
dim=length(E);
for i=1:dimp(i)=E(i)/E1;
end
shang=-sum(p.*log(p));

完整代码

converted = table2array(converted);
testy=converted(1:240000,4);%5min[swa,swd]=swt(testy,5,'db3');%平稳小波变换
%[swa,swd] = swt(X,N,'wname')中,X为变换对象,N为分解层数,matlab要求X的长度为2^N的整数倍swd1=swd(1,:);%分解出的各层高频细节信号。下同
swd2=swd(2,:);
swd3=swd(3,:);
swd4=swd(4,:);
swd5=swd(5,:);m1=abs(swd1);
me1=median(m1);
o1=me1/0.6754;
thr1=o1*(2*log(2000))^0.5;%对各层进行噪声的方差估计,确定各层信号的阈值门限。下同
m2=abs(swd2);
me2=median(m2);
o2=me2/0.6754;
thr2=o2*(2*log(2000))^0.5;
m3=abs(swd3);
me3=median(m3);
o3=me3/0.6754;
thr3=o3*(2*log(2000))^0.5;
m4=abs(swd4);
me4=median(m4);
o4=me4/0.6754;
thr4=o4*(2*log(2000))^0.5;
m5=abs(swd5);
me5=median(m5);
o5=me5/0.6754;
thr5=o5*(2*log(2000))^0.5;y1=wthresh(swd1,'h',thr1);%对各层进行硬阈值处理。下同
y2=wthresh(swd2,'h',thr2);
y3=wthresh(swd3,'h',thr3);
y4=wthresh(swd4,'h',thr4);
y5=wthresh(swd5,'h',thr4);swd(1,:)=y1;
swd(2,:)=y2;
swd(3,:)=y3;
swd(4,:)=y4;
swd(5,:)=y5;x=iswt(swa,swd,'db3');
%——心电信号去噪完成后——
yabs=abs(x);
sigtemp=x;
siglen=length(x);
sigmax=[];
for i=1:siglen-2if (x(i+1)>x(i)&x(i+1)>x(i+2))|(x(i+1)<x(i)&x(i+1)<x(i+2))sigmax=[sigmax;(sigtemp(i+1)),i+1];end
end
thrtemp=sort(sigmax);
thrlen=length(sigmax);
thr=0;
for i=(thrlen-7):thrlenthr=thr+thrtemp(i);
end
thrmax=thr/8;               %最大幅度平均值,8个最大幅值点的平均值zerotemp=sort(x);
zerovalue=0;
for i=1:100zerovalue=zerovalue+zerotemp(i);
end
zerovalue=zerovalue/100;    %最小幅度平均值,对消幅度,100个最小幅值点的平均值
thr=(thrmax-zerovalue)*0.3; %最大、最小幅度的差值的30%为判别R波的阈值                      %定位R波
rvalue=[];
for i=1:thrlenif sigmax(i,1)>thrrvalue=[rvalue;sigmax(i,2)];end
end
rvalue_1=rvalue;%排除误检,如果相邻两个极大值间距小于0.4s,则去掉幅度较小的一个
lenvalue=length(rvalue);
i=2;
while i<=lenvalueif (rvalue(i)-rvalue(i-1))*(1/800)<0.3if yabs(rvalue(i))>yabs(rvalue(i-1))rvalue(i-1)=[];elservalue(i)=[];endlenvalue=length(rvalue);i=i-1;endi=i+1;
end      lenvalue=length(rvalue);
% 在原信号上精确校准
for i=1:lenvalueif (x(rvalue(i))>0)k=(rvalue(i)-5):(rvalue(i)+5);[a,b]=max(x(k));rvalue(i)=rvalue(i)-6+b; elsek=(rvalue(i)-5):(rvalue(i)+5);[a,b]=min(x(k));rvalue(i)=rvalue(i)-6+b; end
endhrvy=diff(rvalue)*(1/800);
lenhrv=length(hrvy);%HRV的采样点数(5min内)
fs=lenhrv/(240000/800);%HRV的采样频率SDNN=std(hrvy,1);%SDNN
rrdx=abs(diff(hrvy));
rMSSD=rms(rrdx);%rMSSD
SDSD=std(rrdx,1);%SDSD
nn50=find(rrdx>0.05);
pNN50=length(nn50)/length(rrdx);%pNN50nfft=lenhrv;
window=hamming(lenhrv);
noverlap=10;
range='onesided';
[Pxx,f]=pwelch(hrvy,window,noverlap,nfft,fs,range);
subplot(2,1,2)
plot(f,(Pxx),'b');
hold on;
plot([0.04,0.04],[0,1],'r');
area(f(f>=0.04&f<=0.15),Pxx(f>=0.04&f<=0.15),'FaceColor','r');
plot([0.15,0.15],[0,1],'r');
%xlim([0.02,1]);
%ylim([0 0.2]);
subplot(2,1,1);
plot(hrvy);
tp=bandpower(Pxx,f,'psd');
plf=bandpower(Pxx,f,[0.04,0.15],'psd');
phf=bandpower(Pxx,f,[0.15,0.4],'psd');
lfhf=plf/phf;figure(2);
subplot(2,1,1);
plot(x);
hold on;
plot(rvalue,x(rvalue),'r^');
subplot(2,1,2);
plot(hrvy);sdx=hrvy;
sdx(end)=[];
sdy=hrvy;
sdy(1)=[];
figure(3);
subplot(2,1,1);
scatter(sdx,sdy,5,'filled');
ee=[];
for i=1:length(sdx)e=abs(sdx(i)-sdy(i))/sqrt(2);if e>0.1ee=[ee;i];end
end
for i=1:length(ee)sdx(ee(i))=NaN;sdy(ee(i))=NaN;
end
sdx(isnan(sdx))=[];
sdy(isnan(sdy))=[];
sd1=std(sdy-sdx)/sqrt(2);
sd2=std(sdy+sdx)/sqrt(2);subplot(2,1,2);
scatter(sdx,sdy,3,'filled');
h=refline(1,0);
set(h,'color','red');
hold on;
ecc=axes2ecc(sd2,sd1);
[elat,elon]=ellipse1(0.6,0.6,[sd2 ecc],45);
plot(elat,elon);wpt=wpdec(hrvy,4,'db3');
plot(wpt);
for i=1:2^4E(i)=sum(abs(wprcoef(wpt,[4,i-1])).^2);
end
E1=sum(E);
dim=length(E);
for i=1:dimp(i)=E(i)/E1;
end
shang=-sum(p.*log(p));

matlab心电信号特征提取相关推荐

  1. 【代码补全】matlab心电信号R波提取

    对Matlab心电信号QRS波检测中代码的补充,使其完整可用. 补充内容来自基于matlab的心电信号QRS波检测与分析. x=iswt(swa,swd,'db3'); %--心电信号去噪完成后-- ...

  2. arma模型谱估计matlab_基于机器学习的心律失常分类(四)——心电信号特征提取[MATLAB]...

    目前比较常用的特征提取是提取心电信号的各波形间期长度.波峰高度等,本文是使用ARMA模型对心电信号进行处理,使用其系数来作为特征. 一.心拍划分 大多伴有异常波形的心律失常信号,通常都会具体表现在单个 ...

  3. Matlab心电信号的PQRST模拟-实验报告

    心电信号处理算法设计-实验要求 data4 是一段实际采样得到的心电数据, 采样频率为 100Hz, 波形如下图所示.设计相应的算法, 计算心率, 单位为: 次/分钟.可能会用到的知识为数字滤波器的设 ...

  4. 检测心电信号的p波的matlab代码,matlab心电信号R波检测程序.doc

    <生物医学信号处理>实习报告 学生姓名: 学号:实验室名称:项目名称:心电信号的R波检测项目内容: 总结常用的QRS波检测算法: 选择一种QRS波检测算法,理解该检测算法: 编写程序,检测 ...

  5. 根据心电信号计算心率的matlab代码

    先说说现有的资料: [1][2]弄了FIR1还有hamming窗,搞得老麻烦了,扔一边先. --------------------------------------------------自己另外 ...

  6. 【ECG理论篇】(3)AI实现心律失常判别:心电信号的波形识别与特征提取

    心电图中的各个波形都包含了非常多的信息,例如RR间期可以反映心动周期的时限:相邻心动周期的 RR 间期的比值可以反映室性早搏:R 波和 S 波幅值的比值和 R 波和 S 波之间的时限可以反映房性早搏等 ...

  7. 心电信号matlab处理,基于MATLAB的心电信号的数字滤波处理

    基于MATLAB的心电信号的数字滤波处理 董兵超;于毅;李振新 [期刊名称]<数字技术与应用> [年(卷),期]2012(000)010 [摘要]心电信号是一种基本的人体生理信号,然而体表 ...

  8. 【特征提取】心电信号PTT+HRV+PRV含Matlab源码

    1 简介 ​提取心电信号PTT+HRV+PRV 2 部分代码 clc;clear all;close all;x=load('day2_0917.txt');%% ECG signaly=x(1:95 ...

  9. 【Matlab心音信号】EMD心音信号特征提取【含GUI源码 1735期】

    一.代码运行视频(哔哩哔哩) [Matlab心音信号]EMD心音信号特征提取[含GUI源码 1735期] 二.matlab版本及参考文献 1 matlab版本 2014a *2 参考文献 [1] 沈再 ...

  10. 【心电信号】基于matlab心率检测【含Matlab源码 1993期】

    一.心电信号简介 0 引言 心电信号是人类最早研究的生物信号之一, 相比其他生物信号更易于检测, 且具有直观的规律.心电图的准确分析对心脏病的及早治疗有重大的意义.人体是一个复杂精密的系统, 有许多不 ...

最新文章

  1. 量化指标公式源码_通达信实用指标:《看涨跌》指标公式源码
  2. 类的笔记整理__7-10__
  3. Vue组件之全局组件与局部组件
  4. ie8一下解决圆角,阴影不兼容问题
  5. 《银狐》:对自然精神的尊重与回归
  6. leetcode 278. 第一个错误的版本(二分)
  7. 去掉微信小程序button边框
  8. defaultdict python_理解 Python 语言中的 defaultdict
  9. 软件著作权申报中60页标准代码文档的写作经验谈(1)
  10. 彻底删除IE的缓存问题
  11. 客户消费积分管理系统编写笔记
  12. keil+mdk+c语言,keil mdk+stm32的ac5和 ac6两个编译器下的字节对齐操作方法
  13. [译]连接池和 Timeout expired异常
  14. Paper2:VGG Notes
  15. 数据通信基础 - 信道特性(奈奎斯特定理、香农定理 )
  16. 垂死挣扎的 Flash Player 再爆零日漏洞,影响多个平台
  17. java heritrix_「heritrix」开源爬虫: Heritrix 3.1 Windows 上安装/使用 - seo实验室
  18. PCL 库的安装与应用
  19. Vue服务端渲染-路由相关
  20. 山东建筑大学java期末_2020尔雅通识课移动通信(山东建筑大学)考试期末答案

热门文章

  1. 如何一个月左右拿下PAT甲级(浙大机试)满分
  2. 北辰创业笔记:百度霸屏之长尾关键词是什么
  3. App测试查看日志(详细)
  4. junit5 入门系列教程-14-junit5 重复测试(@RepeatedTest)
  5. Spring cloud搭建HSF框架,整合mybatis、redis、rabbit
  6. python读取pdf内容转word_Python 实现加密过的PDF文件转WORD格式
  7. 怎么测试电脑的机械硬盘或SSD固态硬盘的读写速度?
  8. 胜为蓝牙适配器驱动_胜为USB蓝牙适配器4.0驱动下载
  9. Pandas库下载和安装
  10. Intouch高级报警(报警筛选)