1. 程式人生 > >小波語音降噪

小波語音降噪

用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('給定軟閾值消噪後的訊號');