第十二章 语音去混响(Dereverberation)

当声源发声时,由于反射和延迟现象,会出现同一个声音多次到达人耳的情形,人耳能明显区别出的是回声(这时反射和原始声音到达时间差可长达50ms,甚至数百上千毫秒)。如果反射的声音和原始声音时间在10ms~30ms之间,由于人耳的时间掩蔽特性会增强人耳的听感,但是对于ASR语音识别是有影响的。这被称为混响RT60 是标准的混响时间测量方法,表示从测试信号突然停止到声压级降低 60 dB 所用的时间。 当前去混响算法主要分为三个类别:

  1. 波束形成 波束形式是空域滤波方法,来自其它方法的混响由于空域上的选择性会被滤除,这就要求目标方向是正确的,在360度的3D场景中,需要先定位出目标方向,而在定位目标方向时,混响是有影响的。波束形成技术内容和实例加起来比较多,后面章节再展开。
  2. 语音增强技术方法 当前去混响方法主要分为三个类别:
  3. 基于统计模型的去混响方法
  4. 基于LPC方法
  5. 基于特征值分解法

3.盲反卷积 声学脉冲响应的未知情况下,根据观察到的信号,设计出反向滤波器来削弱混响的影响。

基于语音增强方法

谱减法

基本思想

估计每一帧的音素及其能量,对新出现的帧,减掉其之前各帧中存在的音素能量。 混响能量的功率谱密度(power spectral density,psd)可以用下式近似表示:

γrr[n,k]=e2ΔTγxx[nT,k]

γrr是混响语音的psd,n是离散时间索引,k是离散频点索引。衰减因子Δ=3ln(10)RT60

根据谱减法有:

|ˆS[m,k]|=(|X|γrr)[m,k]

ˆS是估计的纯净语音STFT值,X是带混响的采集到的语音的STFT值,m是帧索引。

混响时间估计

在Amazon的AWS有篇文献Blind estimation of reverberation time,其给出了混响时间估计方法,就是式子9.1中的RT60,进而可以求出Δ。该文献中将9.1中的指数部分使用a[n]来代替:

a[n]=an=(e1τr)n=enr

由声音衰减模型可得衰减信号y(n)=a(n)x(n)的似然估计如下:

L(y;a,σ)=(12πa(N1)σ2)N/2×exp(ΣN1n=0a2ny(n)22σ2)

为了求得参数aσ,对4取对数得:

lnL(y;a,σ)=N(N1)2ln(a)N2ln(2πσ2)12σ2N1n=0a2ny(n)2

对9.5式分别对aσ求偏导数,并令其等于零,可以得aσ理论最优解。

ln(L(y;a,σ))a=1aσ2N1n=0na2nx(n)2N(N1)2a

然而要解11.6并不好解,可以进行量化以减少计算量a[0,1),可以假设a可以取的值是aA=a1,a2,,aQ, 通常建Q10,对于绝大多数情况可以将Q=2。则式11.4可以写为:

L(aj;y)=N2{(N1)ln(aj)ln(2πNN1n=0a2njx[n]21)}

对于逐帧计算的情况,a的值可能会随着帧而发生波动。这就需要在波动情况下为每一帧选择最优的估计。说话间隙的无声期声音衰减并不会变化。设β=a2,则可以定义:

g[n]=βN1nr=nN+1βrnx[r]2

这样,式子9.6的递归求解过程可以变成下式:

g[n+1]=β1(g[n]+βnx[n+1]2x[n+1N]2)

为了加速这一计算过程,可以预先计算好所有的βln(aj)ln(2π/n),最后,ln(g[n])可以使用查找表计算得到。

  1. 谱减法改进 当估计到的回声能量大于信号的能量值时,谱减法会得到负值。这可以通过将谱减法转化成权重的形式,这在webrtc的很多算法中都有这个思想。

G[m,k]=|X[m,k]|γ12rr[m,k]|X[m,k]|

剔除负值可以使用门限的方法如下:

|ˆS[m,k]|={G[m,k]Xpm,k]whenλγrr[m,k]γγrr[m,k]other

λ=0.1,则衰减为20dB.可以进一步使用下式提升混响的psd估计.

γrr[ˆm,k]=ηγrr[ˆm1,k]+(1η)|X[m,k]|2

η=1/(2Δ)1/(2Δ)+O/(fs)

基于LPC的去混响

  1. LPC(linear predictive coding)

语音信号x(n)可以使用p阶线性预测器来表示:

s(n)=Pi=1ais(ni)+e(n)

ai是预测系数,e(n)是预测误差。LPC的系数可以做成预测误差滤波器:

A(z)=1+pi=1aizi

其对应的全零点滤波器是:

V(z)=11+pi=1aizi=1A(z)

使用MSE准则计算系数:

J=E[e2(n)]=E{(s(n)pi=1ais(ni))2}

Jai=0可以得到如下:

Pu=1auE{s(ni)s(nu)}=E{s(n)s(nu)};1uP

式17用矩阵表示为下式:

Rssa=rss;a=[a1,a2,,ap]T

则在10ms~30ms这段稳态时间内,语音信号的LPC系数如下:

Rssa=rss;a=[a1,a2,,ap]T

由于互相关矩阵Rss是Toeplitz矩阵,可以使用Levinson-Durbin算法高效计算获得。

  1. 混响场景的LPC 麦克风采集到的信号可以用下式表示:

x(n)=hTs(n)+V(n)

x是麦克风采集到的信号,s声源发声的原始信号。对于混响存在的场景,则麦克风采集到的信号可以表示为:

x(n)=pi=1bix(ni)+e(n)

则LPC的系数安装9.19可得:

ˆb=^Rxx1^rxx

  1. 多通道优化 对于多通道情况,可以将代价函数进行平均,这样最后求得的系数是多个通道系数的均值,这样有助于减小绕动干扰,增加系统的鲁棒性。也可以结合bf方法。

一个去混响开源算法是WPE

小节

本章主要给出了混响问题描述和统计模型以及LPC编码两种思路,统计模型的思路和前面章节的方法非常相似,这里也并未分析具体的WPE算法的代码,另外,还有一些基于多通道的盲源辨识方法。

results matching ""

    No results matching ""