基于维纳滤波的语音增强算法 matlab,跪求高手帮忙给我一些语音增强算法的matlab程序,比如基于维纳? 爱问知识人...

%在噪声环境下语音信号的增强

%语音信号为读入的声音文件

%噪声为正态随机噪声

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'下进行一维离散小波变换

[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

%低频系数进行语音信号清浊音的判别

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)时,输出为1;为浊音(voice)时,输出为0

if corr>=0。

8

output1(i)=0;

elseif corr0。002 & abs(recoefs1(i))=0。8

output2(i)=0;

elseif corr0。

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'下进行一维离散小波反变换

output3=idwt(recoefs1, recoefs2,'db3');

%对输出信号抽样点值进行归一化处理

maxdata=max(output3);

output4=output3/maxdata;

%读出带噪语音信号,存为'101。

wav'

wavwrite(y,5500,16,'c101');

%读出处理后语音信号,存为'102。wav'

wavwrite(output4,5500,16,'c102');。

全部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值