【代码复现】基于平稳小波变换的心电信号噪声消除方法

        在对ECG信号进行去噪处理时,首先采用心电信号的预处理入门(小波方法+matlab实现)中的方法,发现产生了Gibbs振荡现象,造成S波段信号失真。如图所示。

【代码复现】基于平稳小波变换的心电信号噪声消除方法_第1张图片

         因此找到了一篇论文《基于平稳小波变换的心电信号噪声消除方法》,文中提出了Gibbs震荡的消除方法。借助matlab的小波函数,能够较为方便地进行复现。去噪效果如图。

【代码复现】基于平稳小波变换的心电信号噪声消除方法_第2张图片

        代码如下。 

converted = table2array(converted);
testy=converted(1:1600,4);
 
[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');%平稳小波逆变换
 
subplot(2,1,1);
plot(testy,'b');
subplot(2,1,2);
plot(x,'r');

你可能感兴趣的:(matlab)