基于MATLAB的ECG心电数据去噪-小波变换几种方法

最近开始接触ECG心电,相关知识也还在补充阶段,由于自己代码能力差,做ECG信号去噪,也废了半天劲。下面是我找 到的还可以的小波变换几种方法希望对大家有所帮助,我还在改代码,改频率那里。欢迎一起交流学习。

%%%%%%%%%%信号小波分解
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%基于Haar小波%%%%%%%

%ecg=fopen(‘100.dat’,‘r’);
ecg=fopen(‘C:\Users\lenovo\Desktop\lv fei hua 0100120191218.txt’,‘r’);%数据地址
N=1201;
data=fread(ecg,N,‘int16’);
data=data/10000;
%save ECGdata data;
%save(‘data.mat’);
fclose(ecg);
x=0:0.004:4.8;
figure(1);
subplot(321);
plot(x,data);
axis([0 4.8 -4 4]);
title(‘原始心电信号’);
x=data;
wname=‘Haar’;
level=5;
[c,l]=wavedec(x,level,wname);
a5=wrcoef(‘a’,c,l,‘Haar’,5);
a4=wrcoef(‘a’,c,l,‘Haar’,4);
a3=wrcoef(‘a’,c,l,‘Haar’,3);
a2=wrcoef(‘a’,c,l,‘Haar’,2);
a1=wrcoef(‘a’,c,l,‘Haar’,1);
subplot(322);plot(a5);title(‘a5’);axis([0 1201 -2 2]);
subplot(323);plot(a4);title(‘a4’);axis([0 1201 -2 2]);
subplot(324);plot(a3);title(‘a3’);axis([0 1201 -2 2]);
subplot(325);plot(a2);title(‘a2’);axis([0 1201 -2 2]);
subplot(326);plot(a1);title(‘a1’);axis([0 1201 -2 2]);

%%%%%%%%%%%%基于db6小波%%%%%

%ecg=fopen(‘100.dat’,‘r’);
ecg=fopen(‘C:\Users\lenovo\Desktop\lv fei hua 0100120191218.txt’,‘r’);
N=1201;
data=fread(ecg,N,‘int16’);
data=data/10;
fclose(ecg);
x=0:0.004:4.8;
figure(2);
subplot(321);
plot(x,data);
axis([0 4.8 -4000 4000]);
title(‘原始心电信号’);
x=data;
wname=‘db6’;
level=5;
[c,l]=wavedec(x,level,wname);
a5=wrcoef(‘a’,c,l,‘db6’,5);
a4=wrcoef(‘a’,c,l,‘db6’,4);
a3=wrcoef(‘a’,c,l,‘db6’,3);
a2=wrcoef(‘a’,c,l,‘db6’,2);
a1=wrcoef(‘a’,c,l,‘db6’,1);
subplot(322);plot(a5);title(‘a5’);axis([0 1201 -2000 2000]);
subplot(323);plot(a4);title(‘a4’);axis([0 1201 -2000 2000]);
subplot(324);plot(a3);title(‘a3’);axis([0 1201 -2000 2000]);
subplot(325);plot(a2);title(‘a2’);axis([0 1201 -2000 2000]);
subplot(326);plot(a1);title(‘a1’);axis([0 1201 -2000 2000]);

%%%%%%%%%%%%%%%%%基于sym3小波%%%%%%%%%%%%%%%%%%%%%%%

%ecg=fopen(‘100.dat’,‘r’);
ecg=fopen(‘C:\Users\lenovo\Desktop\lv fei hua 0100120191218.txt’,‘r’);
N=1201;
data=fread(ecg,N,‘int16’);
data=data/10;
%save ECGdata data;
fclose(ecg);
x=0:0.004:4.8;
figure(3);
subplot(321);
plot(x,data);
axis([0 4.8 -4000 4000]);
title(‘原始心电信号’);
x=data;
wname=‘sym3’;
level=5;
[c,l]=wavedec(x,level,wname);
a5=wrcoef(‘a’,c,l,‘sym3’,5);
a4=wrcoef(‘a’,c,l,‘sym3’,4);
a3=wrcoef(‘a’,c,l,‘sym3’,3);
a2=wrcoef(‘a’,c,l,‘sym3’,2);
a1=wrcoef(‘a’,c,l,‘sym3’,1);
subplot(322);plot(a5);title(‘a5’);axis([0 1201 -2000 2000]);
subplot(323);plot(a4);title(‘a4’);axis([0 1201 -2000 2000]);
subplot(324);plot(a3);title(‘a3’);axis([0 1201 -2000 2000]);
subplot(325);plot(a2);title(‘a2’);axis([0 1201 -2000 2000]);
subplot(326);plot(a1);title(‘a1’);axis([0 1201 -2000 2000]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%心电信号降噪
%%%%%%%%%%%%%%%Birge-Massart策略阈值降噪

%基于小波变换的心电信号的降噪

%ecg=fopen(‘100.dat’,‘r’);
ecg=fopen(‘C:\Users\lenovo\Desktop\lv fei hua 0100120191218.txt’,‘r’);
N=1201;
data=fread(ecg,N,‘int16’);
data=data/10000;
fclose(ecg);
x=data;
wavename=‘db5’;
level=4;
[c,l]=wavedec(x,level,wavename);
alpha=1.5;
sorh=‘h’;
[thr,nkeep]=wdcbm(c,l,alpha);%使用硬阈值给信号降噪
[xc,cxc,lxc,perf0,perfl2]=wdencmp(‘lvd’,c,l,wavename,level,thr,sorh);
t1=0:0.004:(length(x)-1)*0.004;
figure(4);
subplot(211);
plot(t1,x);
title(‘从人体采集的原始的ECG信号’);
subplot(212);
plot(t1,xc);
title(‘Birge-Massart策略阈值降噪后的ECG信号(wname=db5 level=4)’);

%%%%%%%%%%%%%%%%%%最优预测软阈值降噪

%基于小波变换的心电信号的压缩
%ecg=fopen(‘100.dat’,‘r’);
ecg=fopen(‘C:\Users\lenovo\Desktop\lv fei hua 0100120191218.txt’,‘r’);
N=1201;
data=fread(ecg,N,‘int16’);
data=data/10000;
fclose(ecg);
x=data;
wavename=‘db3’;
level=4;
[xd,cxd,lxd]=wden(x,‘heursure’,‘s’,‘mln’,level,wavename);
t=0:0.004:4.8;
figure(5);
subplot(311);
plot(t,x);
title(‘从人体采集的原始的ECG信号’);
subplot(312);
plot(t,xd);
title(‘heursure规则阈值降噪后的ECG信号(db3 level=4)’);

%%%%%%%%%%%%%%最小均方差软阈值降噪
%基于小波变换的心电信号的压缩

%ecg=fopen(‘100.dat’,‘r’);
ecg=fopen(‘C:\Users\lenovo\Desktop\lv fei hua 0100120191218.txt’,‘r’);
N=1201;
data=fread(ecg,N,‘int16’);
data=data/10000;
fclose(ecg);
x=data;
wavename=‘db3’;
level=4;
xd=wden(x,‘minimaxi’,‘s’,‘mln’,level,wavename);
t=0:0.004:4.8;
figure(6);
subplot(311);
plot(t,x);
title(‘从人体采集的原始的ECG信号’);
subplot(313);
plot(t,xd);
title(‘Minimax规则阈值降噪后的ECG信号(wname=db3 level=4)’);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%心电信号压缩
%基于小波变换的心电信号的压缩

%ecg=fopen(‘100.dat’,‘r’);
ecg=fopen(‘C:\Users\lenovo\Desktop\lv fei hua 0100120191218.txt’,‘r’);
N=1201;
data=fread(ecg,N,‘int16’);
data=data/10000;
fclose(ecg);
x=data;
wavename=‘db5’;
[c,l]=wavedec(x,4,wavename);
alpha=2;
sorh=‘h’;
[thr,nkeep]=wdcbm(c,l,alpha);%使用硬阈值压缩信号
[xc,cxc,lxc,perf0,perfl2]=wdencmp(‘lvd’,c,l,wavename,4,thr,sorh);
t=0:0.004:4.8;
figure(7);
subplot(511);
plot(t,x);
title(‘原始的ECG信号’);
axis([0 5 -3 3]);
subplot(512);
plot(t,xc);
axis([0 5 -3 3]);
title(‘在第4层对高频系数量化压缩后的ECG信号(alpha=2 db5)’);

[c,l]=wavedec(x,4,wavename);
alpha=4;
sorh=‘h’;
[thr,nkeep]=wdcbm(c,l,alpha);%使用硬阈值压缩信号
[xc1,cxc1,lxc1,perf01,perfl21]=wdencmp(‘lvd’,c,l,wavename,4,thr,sorh);
subplot(513);
plot(t,xc1);
axis([0 5 -3 3]);
title(‘在第4层对高频系数量化压缩后的ECG信号alpha=4 db5’);

[c,l]=wavedec(x,2,wavename);
alpha=4;
sorh=‘h’;
[thr,nkeep]=wdcbm(c,l,alpha);%使用硬阈值压缩信号
[xc1,cxc1,lxc1,perf01,perfl21]=wdencmp(‘lvd’,c,l,wavename,2,thr,sorh);
subplot(514);
plot(t,xc1);
axis([0 5 -3 3]);
title(‘在第2层对高频系数量化压缩后的ECG信号alpha=4 db5’);

[c,l]=wavedec(x,2,‘db3’);
alpha=4;
sorh=‘h’;
[thr,nkeep]=wdcbm(c,l,alpha);%使用硬阈值压缩信号
[xc1,cxc1,lxc1,perf01,perfl21]=wdencmp(‘lvd’,c,l,‘db3’,2,thr,sorh);
subplot(515);
plot(t,xc1);
axis([0 5 -3 3]);
title(‘在第2层对高频系数量化压缩后的ECG信号alpha=4 db3’);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

发布了34 篇原创文章 · 获赞 4 · 访问量 1554

猜你喜欢

转载自blog.csdn.net/qq_36495569/article/details/104081565