1 简介
由于外界环境的干扰,导致在实际信号的采集过程中无法避免地引入一些随机噪声,从而影响下一步的信号处理,所以如何对含噪信号进行去噪处理,提取出对研究有用的信号,成为信号领域的一个重要研究课题。小波变换在信号处理方面有很广泛的应用。许多科研工作者对这种方法在信号处理方面进行了深入的探讨。目前常用的对小波处理的方法主要有三种:模极大值重构去噪法、空域相关去噪法和小波阈值去噪法。其 中,小波阈值去噪算法是应用最为广泛的算法,也是被学者研究最多的算法。在利用小波阈值函数去噪时,传统的阈值函数主要有硬阈值函数和软阈值函数,软、硬阈值法是由 Donoho和 Johnstone 等人于 1995 年在小波变换的基础上提出的,由于这两种方法继承了小波分析的优点,而且计算量小,实现方法简单,目前已得到广泛的应用。但是软、硬阈值函数去噪算法由于本身的函数缺陷致使在信号去噪时并不能得到理想的效果。在小波阈值算法中选择合适的阈值函数是小波阈值去噪算法需要解决的关键问题之一。
2 部分代码
%%%%%%%%%%信号小波分解
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%基于Haar小波%%%%%%%
ecg=fopen('100.dat','r');
N=1201;
data=fread(ecg,N,'int16');
data=data/10000;
save ECGdata data;
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');
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');
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');
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');
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);
3 仿真结果
4 参考文献
[1]王慧静, 蒲宝明, 孙宏国,等. 基于小波阈值的心电信号去噪算法[J]. 计算机系统应用, 2012(12):4.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。