本文基于听觉特性的小波包语音增强算法Matlab实现程序如下:
说明:1.“D:\EXPERI\”为实验中纯净语音素材和生成的带噪语音以及增强后的语音在PC中的存放路径。
2.可以通过改变SNR的具体值根据需要将生成的带噪语音信号的信噪比
设为任意合理值。
3.实验中我们将Matlab的wthresh.m文件中的库函数wthresh(x,sorh,t)
就行了修改,sorh增加了一种类型'n',该类型代表论文中提出的新的
阈值函数类型。
a)生成混杂白噪声的带噪语音部分
%读入纯净语音并显示
x=wavread('D:\EXPERI\clean.wav');
subplot(3,1,1);
plot(x);
axis([0 55521-0.5 0.5]);
x1=length(x);
%给定信噪比
SNR=5;
%利用信噪比和语音能量求得要添加的白噪声
clean_energy=sum(x.*x);
addnoise_energy=clean_energy*(10^-(SNR/10));
noise=normrnd(0,1,x1,1);
noise_energy=sum(noise.*noise);
q=addnoise_energy/noise_energy;noise_new=sqrt(q)*noise;
%在纯净语音中加入白噪声
y=x+noise_new;
%将数据写入语音文件并显示
wavwrite(y,8000,'D:\EXPERI\WN_clean.wav');
subplot(3,1,2);
plot(y);
axis([0 55521-0.5 0.5]);
b)基于听觉特性的小波包语音增强算法实现部分
%Bark小波包分解
x=wavread('D:\EXPERI\WN_clean.wav');
wptree=wpdec(x,7,'db5');
%把Bark小波分解包中的第五层的叶结点合并
for k=47:62
wptree=wpjoin(wptree,k);
end
%把Bark小波分解包中的第六层的叶结点合并
for k=79:86
wptree=wpjoin(wptree,k);
end
for k=91:94
wptree=wpjoin(wptree,k);