语音增强的主要目标,就是从带噪语音信号中提取尽可能纯挣的原始语音。然而,由于干扰通
常是随机的,从带噪语音中提取完全纯净的语音几乎是不可能的。在这种情况下,语音增强的
目的主要有两个:一是改进语音质量,消除背景噪声,使听者乐于接受,没有疲劳感;二是提高
语音的可懂度。但这两个目的往往不能兼得,所以实际应用中总是视具体情况而有所侧重的。
噪声以高斯白噪声为主要对象,这种噪声一般符合如下的假设:
(1)噪声是加性的。
(2)噪声是局部平稳的。局部平稳是指一段加噪语音中的噪声,具有和语音段开始前那段噪声
相同的统计特性,且在整个语音段中保持不变。也就是说,可以根据语音开始前那段噪声来估
计语音中所叠加的噪声统计特性。
(3)噪声与语音统计独立或不相关。
winsize=256;%窗长
n=0.04;%噪声水平
[speech,fs,nbits]=wavread('*.wav');%读入数据
size=length(speech);
numofwin=floor(size/winsize);%帧数
%加窗
ham=hamming(winsize)';%Generates Hamming Window
hamwin=zeros(1,size);%Vector for window gain
enhanced=zeros(1,size);%Vector for enhanced speech
%产生带噪信号
x=speech'+n*randn(1,size);%Contaminates signal with white noi
%噪声估计
noisy=n*randn(1,winsize);%Sample of noise
N=fft(noisy);
nmag=abs(N);%Estimated noise magnitude spec
for q=1:2*numofwin-1
frame=x(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2);%50 percent ove
hamwin(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=hamwin(1+(q-1)*winsi
nsize+(q-1)*winsize/2)+ham;%Window gain
%对带噪语音进行 DFTy=fft(frame.*ham);
mag=abs(y);%Magnitude Spectrum
phase=angle(y);%Phase Spectrum
%幅度谱减
for i=1:winsize
if mag(i)-nmag(i)>0
clean(i)=mag(i)-nmag(i);
else
clean(i)=0;
end
end
%在频域中重新合成语音
spectral=clean.*exp(j*phase);
%IDFT 并重叠相加
enhanced(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=enhanced(1+(q-1)*wi
winsize+(q-1)*winsize/2)+real(ifft(spectral));
end
%除去 Hamming 窗引起的增益
for i=1:size
if hamwin(i)==0