APP下载

基于计算机仿真的语音增强算法研究

2015-05-28张冰

中国科技纵横 2015年9期

张冰

【摘 要】在语音通信过程中不可避免地会受到来自周围环境、传输媒介引入的噪声、通信设备内部电噪声、乃至其它讲话者的干扰。这些干扰最终将使接收者接语音收到的语音是非纯净的原始语音信号,而是受噪声污染的带噪语音信号。语音增强是解决噪声污染的一种有效方法,是从带噪语音信号中提取尽可能纯净的原始语音,本文研究的是一种基于普减法的改进语音增强算法。

【关键词】语音增强 谱减法 Matlab

1 引言

语音增强已发展为语音信号数字处理的一个重要分支。语音增强中的谱减法是处理宽带噪声的最通用技术,即从带噪语音估值中减去噪声频谱估值,而得到纯净语音的频谱。宽带噪声通常可以假定为高斯噪声和白噪声。它的来源很多,包括空气流动、呼吸噪声和一般随机噪声源。量化噪声通常作为白噪声来处理,也可以视为宽带噪声。由于宽带噪声与语音信号在时域和频域上完全重叠,因而消除它最为困难。由于人耳对语音频谱分量的相位不敏感,所以谱减法主要针对短时幅度谱。

2 语音增强算法

2.1 传统谱减法

假定语音为平稳信号,而噪声及假定语音为平稳信号,而噪声和语音为加性信号且彼此不相关。此时带噪语音信号可表示为:

式中, 为纯净语音信号, 为平稳加性高斯噪声。实际上,为避免分帧时的截断效应,应对 加窗。为了书写方便,这里用 代表加窗后的带噪信号。

设 的傅里叶系数为:

的傅里叶系数为:

的傅里叶系数为: 由(1)式,则有:

而语音增强的任务就是利用已知的噪声功率谱信息,从 中估计出 。由于人耳对相位不敏感,所以只要估计出 ,然后借用带噪语音相位,进行反傅里叶变换后就可得到增强的语音。

经FFT后,有 ,由此可得 式⑵

式中*表示复共轭。因为假定噪声是不相关的,即 与 独立,不会出现信号和噪声的乘积值,则互谱的统计均值为0。

而 为零均值的高斯分布,所以有: 式⑶

只要从 中减去 便可恢复 。之所以能这样是基于人耳对语音相位不敏感(相聋)这一特点。因为噪声是局部平稳的,故可以认为语音前的噪声与发语音期间的噪声功率谱相同,因而可以利用发语音前(或后)的“寂静帧”来估计噪声。对于一个分析帧内的短时平稳过程,有 式⑷

其中, 为无语音时 的统计平均值,即

由此可得原始语音的估计值 式⑸

实际计算中,也可能出现 小于 的情况,因此功率谱不可为负,此时修改式⑸为 式⑹,式中ε为一个大于0的常数,它由试验确定。定义第k个频谱分量的增益函数 以及后验信噪比 ,则式⑸可以改写为: 式⑺

由式⑺可以清楚地看出谱相减的物理意义:它相当于对带噪语音的每一个频谱分量乘以一个系数 当信噪比高时,含语音的可能性很大,衰减小。反之,则认为含有语音的可能性小,衰减则增大。

2.2 改进的谱减法

式⑸中的 是以无声期间的统计平均的噪声方差代替当前分析帧的噪声频谱,而实际上噪声频谱服从高斯分布

式⑻

其中,m为x的均值,σ为标准偏差。噪声的帧功率谱随机变化范围很宽,在频域中的最大、最小值之比往往达到几个数量级,而最大值与均值之比也达6~8倍。因而,在减去噪声谱后,会有些较大的功率谱分量的剩余部分,在频谱上呈现出随机出现的尖峰,在听觉上形成残留噪声。这种噪声具有一定的节奏性起伏感,所以称之为“音乐噪声”。

为有效地减少宽带和音乐噪声,可对谱减法进行改进。噪声的能量往往分布于整个频谱范围,而语音能量则较集中于某些频率或频段,尤其在元音的共振峰处。因此可在元音段等幅度较高的时帧去除噪声时,减去 ,则可更好地相对突出语音的功率谱。这种改进也称为被减项权值处理。

同时,将式(5)中的功率谱计算|*|2及|*|1/2改为|*|m和|*|1/m计算(这里m不一定为整数),可以增加灵活性。这种方法称为功率谱修正处理。经分析和试验得知,当m>2时,它具有与被减项加权处理相同的效果。

综合上面两种处理,谱减法改进形式的原理框图如图2所示。

此时式⑸修正为 式⑼。 引入m,n两个参数为计算提供了很大的灵活性。当m=2,n=1时即变为基本的谱减法,实际的增强试验表明,适当调节m、n可以获得比传统的谱减法更好的增强效果。因此实际的增强过程中,更多地使用谱减法的改进形式。

3 基于MATLAB的算法实现与仿真

3.1传统谱减法的实验与仿真

基于MATLAB来实现传统谱减法的仿真,读入语音文件用wavread函数实现,对采样点补足帧的整数倍是方便实现MATLAB的矩阵计算以及最后对帧叠加进行还原处理。对每一帧独立的含噪语音进行语音增强处理,再将每帧增强语音依次连接起来,会由于恢复的信号帧间不连续,使得增强语音含有周期性的杂音,因此采用帧间重叠谱减法进行语音处理。程序中每帧信号256点,128点重叠,通过w=hamming(framelength)'实现,经语音增强处理后,再进行相反的处理,恢复连续的语音信号。

对带噪语音信号进行FFT变换可以直接用fft函数实现,在MATLAB程序中,这一部分用for循环对每帧循环实现。

谱相减是算法的关键,这部分程序代码如下所示,其中参数m=2,n=1。因为涉及到估值,所以实际中谱相减的差值会为负。因功率谱不能为负,故可令负值为0或改变其符号,在本文的实现程序中令负值为0。

TT=[];

for i=1:k

kk=(yd(i,:).^m-n*(ave_noise.^m));

pp=find(kk<0);

kk(pp)=0;

kk=kk.^(1/m);

TT=[TT;kk];

End

在对FFT变换且谱相减后的信号加上原输入信号的相位信息后,就对信号进行IFFT变换,在MATLAB中用ifft函数实现,即t=TT.*exp(j*angleyy); ss=ifft(t,[],2);

算法的最后要对前面的帧重叠进行相反的处理,以保持语音的连续特性。帧重叠进行相反处理的代码如下所示:

output=[];

output=[output,ss(1,1:128)];

for i=2:k

temps=(ss(i,1:128)+ss(i-1,129:256))/2;

output=[output,temps];

end

output=[output,ss(k,129:256)];

语音增强后的信号用wavwrite函数输出到新的wav文件中。传统谱减法仿真后结果表明,噪声信号得到了一定的抑制,但是还存在一定的具有节奏性起伏感的音乐噪声。

3.2 改进形式的谱减法的实现与仿真

式(8)中的m,n两个参数为算法提供了很大的灵活性,适当调节这两个参数,可获得比原始相减法更好的增强效果。试验表明,两个可调参数m,n取不同值时,语音增强的效果是不同的:m不变,随着n值的适当增大,宽带噪声及残余的音乐噪声减小,信噪比大大提高,但是语音也逐渐变尖,即有较大的失真;n不变,随着m值的适当增大,宽带噪声及残余的音乐噪声增大,信噪比的提高减少,但是语音也逐渐自然,即有较小的失真。试听结果表明,m=0.4,n=0.9时,较好的做到了降噪与提高语音可懂度之间的折衷,噪声得到了适当的抑制,较好地保持了原语音的特性。在MATLAB的实现上,只要在原来传统谱减法的基础上改动参数m,n的值即可得到改进后的效果,如图3所示即为改进形式的谱减法仿真效果。

图3

试验表明,改进的谱减法消除了周期性干扰在电台话音输出端引起的啸叫噪声,除清晰度略有下降外,语音的可懂度和自然度未受损失。该方法对白噪声干扰消噪效果更好,但当环境恶劣,信噪比极低时,信噪比虽然提高不少,但语音的可懂度和自然度却受到一定的损失,实际听起来像机器人的声音。因此,在实时实现时需注意运算精度、帧间重叠的实现和噪声功率谱估计等问题。

4 结语

基于计算机仿真的MATLAB谱相减法是一种常用的单通道语音增强经典算法,传统谱减法和它的改进形式可以归纳为一个通用的谱减法参数公式,参数m,n的取值和增强效果有着密切的关系,当m,n取值适当,则可获得较为理想的增强效果。谱减法有效地降低了背景噪声,提高了信噪比。目前该普相减仿真计算方法依然存在一定的难题,但对于语音质量的提高依然具有非常大的帮助。

参考文献:

[1]杨行峻,迟惠生.语音信号数字处理[M].北京:电子工业出版社,1995,385-411.

[2] Hyoung-Gook Kim, Markus Schwab, Nicolas Moreau. Speech Enhancement of Noisy Speech Using Log-Spectral Amplitude Estimator and Harmonic Tunneling[EB/OL]. http://www.nue.tu-berlin.de/ publications/papers/IWANEC2003.pdf

[3] J.H.L. Hansen, B.Pellom. An Effective Quality Evaluation Protocol for Speech Enhancement Algorithms[EB/OL]. http://cslr.colorado.edu/rspl/PUBLICATIONS/PDFs/CP-icslp98-SpchEnhansProto-SL980917-Wcover.PDF.