语音处理过程中受到各种各样噪声的干扰,不但降低了语音质量,而且还将使整个系统无法正常工作。因此,为了消除噪声干扰,在现代语音处理技术中,工业上一般采用语音增强技术来改善语音质量从而提高系统性能。
本论文基于短时幅度谱估计来研究语音增强,主要介绍了功率谱相减、维纳滤波法,并介绍了这几种语音增强方法的基本原理和实现方法。通过研究,我们得到在白噪声的条件下,这些语音增强方法具有很好的增强效果,可作为开发实用语音增强方法的基础。
********************************************************************
clc,clear
[x, fs]=wavread('no1.wav');
sound(x, fs); % 播放此音频
snr1=SNR(x,0.002*randn(1))
time=(1:1024)/fs;
figure(1);
plotspec(x,1/fs); %原始的语音信号时域和频域分析
y=wiener(x,fs); %通过维纳滤波器进行语音信号的增强
figure(2);
plotspec(y,1/fs); %原始的语音信号时域和频域分析
sound(y, fs); %播语音增强后的音频
snr2=SNR(y,0.002*randn(1))
这段代码主要含义为首先读取一个语音信号,然后对这个信号进行频谱分析,最后将这个语音信号通过维纳滤波,并对维纳滤波以后的信号进行频谱分析从而对比语音增强前后两次效果。
在这里我们主要自定义了以下几个函数:SNR,plotspec,wiener分别为信噪比计算函数,频谱分析函数,维纳滤波函数。其中wiener函数是系统的主要函数,通过这个函数,我们就可以完成语音信号的增强处理。然后通过plotspec进行信号的频谱分析。
其中维纳滤波主要过程如下:
********************************************************************
%维纳滤波
for k=1:nf
if k<=NNoise
SpeechFlag=0;
NoiseCounter=NNoise;
else
NoiseMargin=3;
HangOver=8;
SpectralDist= 20*(log10(ymag(:,k))-log10(MN));
SpectralDist(find(SpectralDist<0))=0;
Dist=mean(SpectralDist);
if (Dist < NoiseMargin)
NoiseFlag=1;
NoiseCounter=NoiseCounter+1;
else
NoiseFlag=0;
NoiseCounter=0;
end
if (NoiseCounter > HangOver)
SpeechFlag=0;
else
SpeechFlag=1;
end
end
下面我们来对比分析以后的效果。
图4-1 原始信号的时域频域信号分析
通过运行程序,通听觉上可以感受到该语音信号有明显的杂音,听起来很不舒服。通过运行后结果,我们可以看到,该语音信号的时域部分,在每次人发音间隔之间具有明显的噪声干扰也就是我们所谓的噪声。
图4-2 通维纳滤波进行语音增强后的信号的时域频域信号分析
通过语音滤波以后,从听觉好可以听到语音已经变的清晰,没用明显的杂音干扰,分析其信号频谱,可以看到,其有效频率和高频的幅度比变大,说明通过语音增强后音质得到了明显的改善。