常见的语音增强算法有谱减法,MMSE和维纳滤波等。谱减法虽然实现简单,运算量小,但效果比较差,容易出现刺耳的“音乐噪声”。MMSE和维纳滤波虽然原理较复杂,运算量也相对较大,但效果着实不错,甚至可以完全减除“音乐噪声”。由于实验室需要,对语音增强算法相对有点了解,但不够深入。实验室项目增强部分算法采用的是欧洲ETSI的ASR(自动语音识别)的前端去噪。采用的是两级维纳滤波,对于平稳的噪声语音去噪效果相当可观。官网也给出了C语言的实现和文档说明。虽然程序已移植到项目中,但由于文档主要是介绍了方法和一些经验参数,并没有具体说明为什么这样做,总体感觉就是只知道其中的算法流程。下图是ETSI的两级维纳滤波的程序框图。可以看出这个程序的维纳滤波是在梅尔频域上做的,估计是因为梅尔频率更符合人耳特性吧。就像语音识别中提取的特征参数是梅尔倒谱系数MFCC。
由于想进一步了解下语音增强算法的原理,这段时间着重看了MMSE的实现原理,尤其是对数的幅度谱误差平方MMSE-LSA的原理,并对这个算法进行C语言实现,最终结果与matlab代码一致。下面简要介绍下原理:
根据MMSE-LSA的开山始祖的文章Ephraim, Y. and Malah, D. (1985).《 Speech enhancement using a minimum
mean-square error log-spectral amplitude estimator.》假设带噪信号y(n) = x(n) + d(n),其中x(n)为纯净信号,d(n)为噪声信号,转换为频域,Y(w) = X(w) + D(w)。根据论文推导出最优的对数MMSE估计器为:
其中就是对数MMSE估计器的增益函数。在这个函数中有两个未知量,分别是先验信噪比(可以被看作是第k个频谱分量的实际信噪比)和后验信噪比