小波分解后如何把相应系数置零达到去噪目的再重构信号
http://www.ilovematlab.cn/thread-295233-1-1.html
比如说一正弦信号x=sin(5*pi*t),在这个信号里叠加另一个信号y=0.2*sin(10*pi*t),sig=x+y,那对sig进行小波分解的话,是否可以判断出y信号出现某个位置,然后把该位置的系数置零后再重构信号?这样的话如何进行?
clc
close all
t=0:0.05:20;
x=3*sin(0.2*pi*t);%原始正弦信号
ns=0.2*sin(9*pi*t);
%N=length(t)
%ns=[zeros(1,100),0.2*randn(1,200),zeros(1,101)];%区间为101-201的白噪声
%ns=zeros(1,401);
sig=x+ns;%叠加了噪声的信号
figure(1)
subplot(311)
plot(x);
title('原始信号')
subplot(312)
plot(ns);
title('噪声')
subplot(313)
plot(sig);
title('有噪信号')
[c,l]=wavedec(sig,4,'db4');%对有噪信号用db4小波函数进行4层分解
a1=appcoef(c,l,'db4',1);%提取第一层的近似分量
d1=detcoef(c,l,1);%提取第一层的细节分量
a2=appcoef(c,l,'db4',2);%提取第二层的近似分量
d2=detcoef(c,l,2);%提取第二层的细节分量
a3=appcoef(c,l,'db4',3);%提取第三层的近似分量
d3=detcoef(c,l,3);%提取第三层的细节分量
a4=appcoef(c,l,'db4',4);%提取第四层的近似分量
d4=detcoef(c,l,4);%提取第四层的细节分量
%画出每一层的近似分量和细节分量,共四层
figure(2)
subplot(421)
plot(a1)
title('第一层的近似分量')
subplot(422)
plot(d1)
title('第一层的细节分量')
subplot(423)
plot(a2)
title('第二层的近似分量')
subplot(424)
plot(d2)
title('第二层的细节分量')
subplot(425)
plot(a3)
title('第三层的近似分量')
subplot(426)
plot(d3)
title('第三层的细节分量')
subplot(427)
plot(a4)
title('第四层的近似分量')
subplot(428)
plot(d4)
title('第四层的细节分量')
%进行重构
dd1=zeros(size(d1));%将第一层的细节分量置零
dd2=zeros(size(d2));%将第二层的细节分量置零
dd3=zeros(size(d3));%将第三层的细节分量置零
dd4=zeros(size(d4));%将第四层的细节分量置零
c1=[a4 dd4 dd3 dd2 dd1];%重构小波分解向量,所有的细节分量变为零
aa1=waverec(c1,l,'db4');%重构信号
figure(3)
plot(aa1)
title('一到四层的细节分量置零后的重构信号')
c2=[a4 d4 dd3 dd2 dd1];%重构小波分解向量,其中第一、三、四层的细节分量被置零
aa2=waverec(c2,l,'db4');%重构信号
figure(4)
plot(aa2)
title('一到三层的细节分量置零后的重构信号')
c3=[a4 d4 dd3 d2 dd1];%重构小波分解向量,其中第一、三层的细节分量被置零
aa3=waverec(c3,l,'db4');%重构信号
figure(5)
plot(aa3)
title('一、三层的细节分量置零后的重构信号')
c4=[a4 d4 d3 d2 dd1];%重构小波分解向量,其中第一的层细节分量被置零
aa4=waverec(c4,l,'db4');%重构信号
figure(6)
plot(aa4)
title('第一层的细节分量置零后的重构信号')
c5=[a4 d4 d3 dd2 d1];%重构小波分解向量,其中第二的层细节分量被置零
aa5=waverec(c5,l,'db4');%重构信号
figure(7)
plot(aa5)
title('第二层的细节分量置零后的重构信号')