小波語音降噪
用MATLAB對一語音訊號進行小波分解,分別用強閾值,軟閾值,預設閾植進行消噪處理。
複製內容到剪貼簿
程式碼:
%裝載採集的訊號leleccum.mat
load leleccum;
%=============================
%將訊號中第2000到第3450個取樣點賦給s
indx=2000:3450;
s=leleccum(indx);
%=============================
%畫出原始訊號
subplot(2,2,1);
plot(s);
title('原始訊號');
%=============================
%用db1小波對原始訊號進行3層分解並提取係數
[c,l]=wavedec(s,3,'db1');
a3=appcoef(c,l,'db1',3);
d3=detcoef(c,l,3);
d2=detcoef(c,l,2);
d1=detcoef(c,l,1);
%=============================
%對訊號進行強制性消噪處理並圖示結果
dd3=zeros(1,length(d3));
dd2=zeros(1,length(d2));
dd1=zeros(1,length(d1));
c1=[a3 dd3 dd2 dd1];
s1=waverec(c1,l,'db1');
subplot(2,2,2);
plot(s1);grid;
title('強制消噪後的訊號');
%=============================
%用預設閾值對訊號進行消噪處理並圖示結果
%用ddencmp函式獲得訊號的預設閾值
[thr,sorh,keepapp]=ddencmp('den','wv',s);
s2=wdencmp('gbl',c,l,'db1',3,thr,sorh,keepapp);
subplot(2,2,3);
plot(s2);grid;
title('預設閾值消噪後的訊號');
%=============================
%用給定的軟閾值進行消噪處理
softd1=wthresh(d1,'s',1.465);
softd2=wthresh(d2,'s',1.823);
softd3=wthresh(d3,'s',2.768);
c2=[a3 softd3 softd2 softd1];
s3=waverec(c2,l,'db1');
subplot(2,2,4);
plot(s3);grid;
title('給定軟閾值消噪後的訊號');