function s1=de_noise_adaptive(s,alpha,belta)
%基于小波变换的可变步长LMS语音去噪
%参考文献《小波多分辨率分析及其在自适应消噪中的应用》
[c,l]=wavedec(s,5,'db9');
a5=appcoef(c,l,'db9',5);
[d5 d4 d3 d2 d1]=detcoef(c,l,[5 4 3 2 1]);
N=zeros(6,1); %预先分配内存加快速度
N(1)=length(d1);
N(2)=length(d2);
N(3)=length(d3);
N(4)=length(d4);
N(5)=length(d5);
N(6)=length(a5);
%LMS自适应过程,循环太多导致速度过慢,需要优化
w1=sparse(N(1),1);
e1=sparse(N(1)-1,1);
for k=2:N(1)
j=k-1;
dd1(1)=d1(1);
dd1(k)=d1(k-j)*w1(j);
e1(k)=d1(k)-dd1(k);
mu1(k)=belta*(1-exp(-alpha*(abs(e1(k))).^2));
w1(j+1)=w1(j)+2*mu1(k)*e1(k)*d1(k-j);
end
w2=sparse(N(2),1);
e2=sparse(N(2)-1,1);
for k=2:N(2)
j=k-1;
dd2(1)=d2(1);
dd2(k)=d2(k-j)*w2(j);
e2(k)=d2(k)-dd2(k);
mu2(k)=belta*(1-exp(-alpha*(abs(e2(k))).^2));
w2(j+1)=w2(j)+2*mu2(k)*e2(k)*d2(k-j);
end
w3=sparse(N(3),1);
e3=sparse(N(3)-1,1);
for k=2:N(3)
j=k-1;
dd3(1)=d3(1);
dd3(k)=d3(k-j)*w3(j);
e3(k)=d3(k)-dd3(k);
mu3(k)=belta*(1-exp(-alpha*(abs(e3(k))).^2));
w3(j+1)=w1(j)+2*mu3(k)*e3(k)*d3(k-j);
end
w4=sparse(N(4),1);
e4=sparse(N(4)-1,1);
for k=2:N(4)
j=k-1;
dd4(1)=d4(1);
dd4(k)=d4(k-j)*w4(j);
e4(k)=d14(k)-dd4(k);
mu4(k)=belta*(1-exp(-alpha*(abs(e4(k))).^2));
w4(j+1)=w4(j)+2*mu4(k)*e4(k)*d4(k-j);
end
w5=sparse(N(5),1);
e5=sparse(N(5)-1,1);
for k=2:N(5)
j=k-1;
dd5(1)=d5(1);
dd5(k)=d5(k-j)*w5(j);
e5(k)=d5(k)-dd5(k);
mu5(k)=belta*(1-exp(-alpha*(abs(e5(k))).^2));
w5(j+1)=w5(j)+2*mu5(k)*e5(k)*d5(k-j);
end
w6=sparse(N(6),1);
e6=sparse(N(6)-1,1);
for k=2:N(6)
j=k-1;
aa5(1)=a5(1);
aa5(k)=a5(k-j)*w6(j);
e6(k)=a5(k)-aa5(k);
mu6(k)=belta*(1-exp(-alpha*(abs(e6(k))).^2));
w6(j+1)=w6(j)+2*mu6(k)*e6(k)*a5d6(k-j);
end
c2=[aa5 dd5 dd4 ddd3 dd2 dd1];
s1=waverec(c2,l,'db9');
评论0