资源简介
上面程序获得的数据就不便于使用了,因为那是转换为具有实际意义的心电数据,信号数据值一般在-2~2之间,单位是mV。那么,要找新的ECG读取程序来获取数据吗?不用!实际上,程序rddata.m中本身就是把MIT .dat 文件中存储的二值数据转换为十进制数据,然后再进一步处理转换成具有实际意义的心电信号值。我们进行信号处理时,需要用到的就是从二值数据转换来的初始十进制数据,由于 .dat文件中是三个字节存储2个数,即每个数12bits,转换后得到的十进制数范围应该是0~2048。我所理解的数据存储方式图示如下,不知是否正确,仅供参考:
代码片段和文件信息
%本程序实现基于小波变换的QRS波的检测 %
%郑秀玉 深圳大学德州仪器DSPs实验室 %
%2007年7月2日 %
clear all;
close all;
points=4096; level=4; sr=360;
%读入ECG信号
load ecgdata.mat;
ecgdata=mydata‘;
g=importdata(‘yy.json‘);
ecgdata =g;
plot(ecgdata(1:points));grid on;axis tight;axis([1points-0.0010.0015]);
title(‘ECG信号‘);
swa=zeros(4points);
swd=zeros(4points);
signal=ecgdata(0*4096+1:1*4096);
%算小波系数和尺度系数
for i=1:points-3
swa(1i+3)=1/4*signal(i+3-2^0*0)+3/4*signal(i+3-2^0*1)+3/4*signal(i+3-2^0*2)+1/4*signal(i+3-2^0*3);
swd(1i+3)=-1/4*signal(i+3-2^0*0)-3/4*signal(i+3-2^0*1)+3/4*signal(i+3-2^0*2)+1/4*signal(i+3-2^0*3);
end
j=2;
while j<=level
for i=1:points-24
swa(ji+24)=1/4*swa(j-1i+24-2^(j-1)*0)+3/4*swa(j-1i+24-2^(j-1)*1)+3/4*swa(j-1i+24-2^(j-1)*2)+1/4*swa(j-1i+24-2^(j-1)*3);
swd(ji+24)=-1/4*swa(j-1i+24-2^(j-1)*0)-3/4*swa(j-1i+24-2^(j-1)*1)+3/4*swa(j-1i+24-2^(j-1)*2)+1/4*swa(j-1i+24-2^(j-1)*3);
end
j=j+1;
end
%画出原信号和尺度系数,小波系数
figure;
subplot(level11); plot(ecgdata(1:points)); grid on;axis tight;
title(‘ECG信号及其在j=1234尺度下的尺度系数及小波系数‘);
for i=1:level
subplot(level+122*(i)+1);
plot(swa(i:)); axis tight;grid on;xlabel(‘time‘);
ylabel(strcat(‘a ‘num2str(i)));
subplot(level+122*(i)+2);
plot(swd(i:)); axis tight;grid on;
ylabel(strcat(‘d ‘num2str(i)));
end
%画出原图及小波系数
figure;
subplot(level11); plot(real(ecgdata(1:points))‘b‘); grid on;axis tight;
title(‘ECG信号及其在j=1234尺度下的小波系数‘);
for i=1:level
subplot(level+11i+1);
plot(swd(i:)‘b‘); axis tight;grid on;
ylabel(strcat(‘d ‘num2str(i)));
end
%**************************************求正负极大值对*****************************************%
ddw=zeros(size(swd));
pddw=ddw;
nddw=ddw;
%小波系数的大于0的点
posw=swd.*(swd>0);
%斜率大于0
pdw=((posw(:1:points-1)-posw(:2:points))<0);
%正极大值点
pddw(:2:points-1)=((pdw(:1:points-2)-pdw(:2:points-1))>0);
%小波系数小于0的点
negw=swd.*(swd<0);
ndw=((negw(:1:points-1)-negw(:2:points))>0);
%负极大值点
nddw(:2:points-1)=((ndw(:1:points-2)-ndw(:2:points-1))>0);
%或运算
ddw=pddw|nddw;
ddw(:1)=1;
ddw(:points)=1;
%求出极值点的值其他点置0
wpeak=ddw.*swd;
wpeak(:1)=wpeak(:1)+1e-10;
wpeak(:points)=wpeak(:points)+1e-10;
%画出各尺度下极值点
figure;
for i=1:level
subplot(level1i);
plot(wpeak(i:)); axis tight;grid on;
ylabel(strcat(‘j= ‘num2str(i)));
end
subplot(411);
title(‘ECG信号在j=1234尺度下的小波系数的模极大值点‘);
interva2=zeros(1points);
intervaqs=zeros(1points);
Mj1=wpeak(1:);
Mj4=wpeak(3:);
%画出尺度3极值点
figure;
plot (Mj4);
title(‘尺度3下小波系数的模极大值点‘);
posi=Mj4.*(Mj4>0);
%求正极大值的平均
thposi=(max(posi(1:round(points/4)))+max(posi(round(points/4):2*round(points/4)))+max(posi(2*round(points/4):3*round(points/4)))+max(posi(3*round(points/4):4*round(points/4))))/4;
posi=(posi>thposi/3);
nega=Mj4.*(Mj4<0);
%求负极大值的平均
thnega=(min(nega(1:round(points/4)))+min(nega(round(points/4):2*round(points/4)))+min(nega(2*round(points/4):
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4558 2008-03-30 12:34 检测QRS超级好用\100.atr
文件 1950000 2008-03-30 12:34 检测QRS超级好用\100.dat
文件 143 2008-03-30 12:34 检测QRS超级好用\100.hea
文件 5680 2018-03-05 17:32 检测QRS超级好用\ecgdata.mat
文件 7178 2018-03-05 16:52 检测QRS超级好用\ecgdetect.m
文件 6646 2008-03-30 12:34 检测QRS超级好用\graduatedemo.asv
文件 5470 2018-02-28 20:28 检测QRS超级好用\rddata.m
文件 165111 2018-03-05 16:25 检测QRS超级好用\yy.json
目录 0 2018-03-05 16:47 检测QRS超级好用
----------- --------- ---------- ----- ----
2144786 9
评论
共有 条评论