第十二章 语音去混响(Dereverberation)
当声源发声时,由于反射和延迟现象,会出现同一个声音多次到达人耳的情形,人耳能明显区别出的是回声(这时反射和原始声音到达时间差可长达50ms,甚至数百上千毫秒)。如果反射的声音和原始声音时间在10ms~30ms之间,由于人耳的时间掩蔽特性会增强人耳的听感,但是对于ASR语音识别是有影响的。这被称为混响RT60 是标准的混响时间测量方法,表示从测试信号突然停止到声压级降低 60 dB 所用的时间。 当前去混响算法主要分为三个类别:
- 波束形成 波束形式是空域滤波方法,来自其它方法的混响由于空域上的选择性会被滤除,这就要求目标方向是正确的,在360度的3D场景中,需要先定位出目标方向,而在定位目标方向时,混响是有影响的。波束形成技术内容和实例加起来比较多,后面章节再展开。
- 语音增强技术方法 当前去混响方法主要分为三个类别:
- 基于统计模型的去混响方法
- 基于LPC方法
- 基于特征值分解法
3.盲反卷积 声学脉冲响应的未知情况下,根据观察到的信号,设计出反向滤波器来削弱混响的影响。
基于语音增强方法
谱减法
基本思想
估计每一帧的音素及其能量,对新出现的帧,减掉其之前各帧中存在的音素能量。 混响能量的功率谱密度(power spectral density,psd)可以用下式近似表示:
是混响语音的,是离散时间索引,是离散频点索引。衰减因子。
根据谱减法有:
是估计的纯净语音STFT值,是带混响的采集到的语音的STFT值,是帧索引。
混响时间估计
在Amazon的AWS有篇文献Blind estimation of reverberation time,其给出了混响时间估计方法,就是式子9.1中的,进而可以求出。该文献中将9.1中的指数部分使用来代替:
由声音衰减模型可得衰减信号的似然估计如下:
为了求得参数和,对4取对数得:
对9.5式分别对和求偏导数,并令其等于零,可以得,理论最优解。
然而要解11.6并不好解,可以进行量化以减少计算量,可以假设a可以取的值是, 通常建,对于绝大多数情况可以将。则式11.4可以写为:
对于逐帧计算的情况,的值可能会随着帧而发生波动。这就需要在波动情况下为每一帧选择最优的估计。说话间隙的无声期声音衰减并不会变化。设,则可以定义:
这样,式子9.6的递归求解过程可以变成下式:
为了加速这一计算过程,可以预先计算好所有的, 和,最后,可以使用查找表计算得到。
- 谱减法改进 当估计到的回声能量大于信号的能量值时,谱减法会得到负值。这可以通过将谱减法转化成权重的形式,这在webrtc的很多算法中都有这个思想。
剔除负值可以使用门限的方法如下:
当,则衰减为20dB.可以进一步使用下式提升混响的psd估计.
基于LPC的去混响
- LPC(linear predictive coding)
语音信号可以使用p阶线性预测器来表示:
是预测系数,是预测误差。LPC的系数可以做成预测误差滤波器:
其对应的全零点滤波器是:
使用MSE准则计算系数:
令可以得到如下:
式17用矩阵表示为下式:
则在10ms~30ms这段稳态时间内,语音信号的LPC系数如下:
由于互相关矩阵是Toeplitz矩阵,可以使用Levinson-Durbin算法高效计算获得。
- 混响场景的LPC 麦克风采集到的信号可以用下式表示:
是麦克风采集到的信号,声源发声的原始信号。对于混响存在的场景,则麦克风采集到的信号可以表示为:
则LPC的系数安装9.19可得:
- 多通道优化 对于多通道情况,可以将代价函数进行平均,这样最后求得的系数是多个通道系数的均值,这样有助于减小绕动干扰,增加系统的鲁棒性。也可以结合bf方法。
一个去混响开源算法是WPE
小节
本章主要给出了混响问题描述和统计模型以及LPC编码两种思路,统计模型的思路和前面章节的方法非常相似,这里也并未分析具体的WPE算法的代码,另外,还有一些基于多通道的盲源辨识方法。