dwt去噪 matlab,用matlab进行小波去噪的程序
換成原信號(hào)是正弦信號(hào) 加載的噪聲是高斯白噪聲 應(yīng)該怎么改 這是我下載的程序 (我論文要求比較三種小波基去噪的效果。可不可以幫我看一下 我是菜鳥啊 不會(huì))拜托拜托
clear
clc
%在噪聲環(huán)境下語音信號(hào)的增強(qiáng)
%語音信號(hào)為讀入的聲音文件
%噪聲為正態(tài)隨機(jī)噪聲
sound=wavread('c12345.wav');
count1=length(sound);
noise=0.05*randn(1,count1);
for i=1:count1
signal(i)=sound(i);
end
for i=1:count1
y(i)=signal(i)+noise(i);
end
%在小波基'db3'下進(jìn)行一維離散小波變換
[coefs1,coefs2]=dwt(y,'db3'); %[低頻 高頻]
count2=length(coefs1);
count3=length(coefs2);
energy1=sum((abs(coefs1)).^2);
energy2=sum((abs(coefs2)).^2);
energy3=energy1+energy2;
for i=1:count2
recoefs1(i)=coefs1(i)/energy3;
end
for i=1:count3
recoefs2(i)=coefs2(i)/energy3;
end
%低頻系數(shù)進(jìn)行語音信號(hào)清濁音的判別
zhen=160;
count4=fix(count2/zhen);
for i=1:count4
n=160*(i-1)+1:160+160*(i-1);
s=sound(n);
w=hamming(160);
sw=s.*w;
a=aryule(sw,10);
sw=filter(a,1,sw);
sw=sw/sum(sw);
r=xcorr(sw,'biased');
corr=max(r);
%為清音(unvoice)時(shí),輸出為1;為濁音(voice)時(shí),輸出為0
if corr>=0.8
output1(i)=0;
elseif corr<=0.1
output1(i)=1;
end
end
for i=1:count4
n=160*(i-1)+1:160+160*(i-1);
if output1(i)==1
switch abs(recoefs1(i))
case abs(recoefs1(i))<=0.002
recoefs1(i)=0;
case abs(recoefs1(i))>0.002 &abs(recoefs1(i))<=0.003
recoefs1(i)=sgn(recoefs1(i))*(0.003*abs(recoefs1(i))-0.000003)/0.002;
otherwise recoefs1(i)=recoefs1(i);
end
elseif output1(i)==0
recoefs1(i)=recoefs1(i);
end
end
%對(duì)高頻系數(shù)進(jìn)行語音信號(hào)清濁音的判別
count5=fix(count3/zhen);
for i=1:count5
n=160*(i-1)+1:160+160*(i-1);
s=sound(n);
w=hamming(160);
sw=s.*w;
a=aryule(sw,10);
sw=filter(a,1,sw);
sw=sw/sum(sw);
r=xcorr(sw,'biased');
corr=max(r);
%為清音(unvoice)時(shí),輸出為1;為濁音(voice)時(shí),輸出為0
if corr>=0.8
output2(i)=0;
elseif corr<=0.1
output2(i)=1;
end
end
for i=1:count5
n=160*(i-1)+1:160+160*(i-1);
if output2(i)==1
switch abs(recoefs2(i))
case abs(recoefs2(i))<=0.002
recoefs2(i)=0;
case abs(recoefs2(i))>0.002 &abs(recoefs2(i))<=0.003
recoefs2(i)=sgn(recoefs2(i))*(0.003*abs(recoefs2(i))-0.000003)/0.002;
otherwise recoefs2(i)=recoefs2(i);
end
elseif output2(i)==0
recoefs2(i)=recoefs2(i);
end
end
%在小波基'db3'下進(jìn)行一維離散小波反變換
output3=idwt(recoefs1, recoefs2,'db3');
%對(duì)輸出信號(hào)抽樣點(diǎn)值進(jìn)行歸一化處理
maxdata=max(output3);
output4=output3/maxdata;
%讀出帶噪語音信號(hào),存為'101.wav'
wavwrite(y,5500,16,'c101');
%讀出處理后語音信號(hào),存為'102.wav'
wavwrite(output4,5500,16,'c102');
只需要比較三個(gè)小波基去噪的效果 其他沒有要求
總結(jié)
以上是生活随笔為你收集整理的dwt去噪 matlab,用matlab进行小波去噪的程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: php俄罗斯方块代码,[原创]Matla
- 下一篇: php post请求跳转,学习猿地-ph
