如何提升DT场景下的AEC效果

原:https://mp.weixin.qq.com/s/sh-JoG1m0Ct2NWKN8iMkmw
做实时音视频通讯绕不过3A(降噪、回声、自动增益),18年初我们发布了如何使用RNN来降噪, 19年初我们再发布如何提升DT(双讲,小白可以理解为对骂)场景的效果。

如果某个音视频软件,对方正滔滔不绝的安利内容,你说了几个stop,对方仍然还在安利,不好意思,不是对方脸皮厚,很可能是他根本听不见你的说话,因为你的stop已经被当成回声给消没了。那真的就是沟通基本靠吼了。

一、回声消除的原理

在语音通信系统中,当对方语音需要外放时,本地的麦克风就会采集这些语音回送给对方,严重影响语音通信质量,因此回声消除模块是语音通信系统不可或缺的一部分。

回声消除 (AEC, Acoustic Echo Cancellation) 是通过对扬声器和麦克风之间的回声传播路径建模估计,并消除回声信号,其基本原理如下图:
在这里插入图片描述
图1:AEC的基本原理图

x: 远端语音

v: 近端说话人语音

h: 回声传播路径(回声通道冲击响应函数)

y: 近端回声信号

d: 麦克风采集到的信号

e: 残差信号(回声消除后的信号)

ĥ: 估计的回声路径(逼近真实回声路径h)

ŷ: 回声信号的估计值

y(n) = h(n) * x(n)

d(n) = h(n) * x(n) + v(n)

ŷ(n) = ĥ(n) * x(n)

e(n) = v(n) + y(n) - ŷ(n) = v(n) + [h(n)- ĥ(n)] * x(n)

当ĥ(n)逼近 h(n)时,回声部分基本消除,e(n) ≈ v(n)。

在得到估计的回声路径ĥ过程中,为了降低运算量,通常使用频域的自适应滤波器。为了使得滤波器系数W(n)快速收敛,学术界和业界提出了大量的梯度下降算法,其中最广泛应用的就是NLMS(Normalized Least Mean Square, 归一化最小均方),谷歌的WebRTC的回声消除算法也是基于NLMS。

其算法步骤如下:

1)给定w(0);

2)计算输出值: ŷ (n)=w(n)Tx(n);

3)计算估计误差: e(n)=d(n)− ŷ (n);

4)权重更新:w(n +1) = w(n) +μe(n)x*(n)

其中

在这里插入图片描述
二、回声消除算法的天生缺陷

从NLMS的算法原理可以看出,当远端单讲时,x(n)不为0,快速收敛的方向就是使e(n)快速趋于0,这样输出的残差信号就趋于0,回声信号y(n)成功被消除。

双讲情况下,x(n)也不为0,NLMS遵循同样的收敛方法,快速收敛的方向也是使e(n)快速趋于0,收敛时e(n)接近0,远偏离于期望的v(n),具体后果就是近端的说话人语音v(n)在双讲期间被大部分消除,发生吃音(英文文献中称为Clipping)。

同时由于有近端说话人语音v(n)的存在,回声信号的估计值ŷ(n)很难逼近真实回声信号y(n),从而导致双讲期间自适应滤波器系数频繁错误的更新。

以谷歌巨制WebRTC为例,效果如下图:
在这里插入图片描述
图2:WebRTC回声消除效果图

Near是近端说话人语音,Far是远端语音,Mic是麦克风采集到的近端信号(近端说话人语音+经过回声路径的远端语音),output是回声消除后的信号,越接近near信号说明消除回声效果越好。

Mic采集到下信号大致可以划分为3阶段,前1/3是只有远端语音的单讲模式,中间1/3是两端都有语音的双讲模式(Double-Talk),后面1/3是只有近端语音的单讲模式和无语音模式。

从上图可以看出,WebRTC回声消除算法在单讲模式和无语音模式下,回声消除的效果都非常好。对照near和output可以发现,在双讲模式下,很多近端语音也被消除,出现大量吃音现象。

三、双讲检测的原理

从上面的例子我们知道当近端语音和远端语音同时存在情况下,近端语音干扰使得自适应滤波器的回声消除性能迅速下降。因此双讲模式下需要对自适应滤波器的系数更新过程进行干预,当识别出处于双讲模式时,我们应该减慢甚至停止系数的更新。

现有的双讲检测(Double-Talk Detection,DTD)算法有能量比较法、相关比较法和基于概率统计的方法等。能量比较法基于双讲时d(n)能量显著高于单讲x(n)的假设,相关比较法基于双讲时d(n)与x(n)相关性低于单讲的假设,但是在噪声和回响的环境下上述两假设会失效,导致双讲检测性能下降。

出于上述考虑,我们提出了基于语音特征区分单讲和双讲,目标是尽量弱化噪声的影响,选取单讲与双讲时存在显著差异的语音特征进行加权组合。算法原理如下:

1)利用VAD检测是否存在远端语音;

2)在远端语音存在情况下,分别计算远端语音x(n)和麦克风信号d(n)的语音特征:短时能量标准差D,基音周期P,高能量频带B;得到特征向量Vx=[Dx,Px,Bx], Vd=[Dd,Pd,Bd];

3)计算误差信号与麦克风信号的特定频带相关性C;

4)当| Vd -Vx |> T1 && C > T2 时,说明远端语音与麦克风信号差异较大并且误差信号与麦克风信号有相似性,判断远端语音与近端语音同时存在,其中T1 和 T2 为经验阈值。

增加了DTD模块后的回声消除结构图如下:
在这里插入图片描述
图3:带双讲检测的AEC原理图

通过远端语音x(n)、麦克风信号d(n)、误差信号e(n)判断出是否存在双讲,当存在双讲时,停止自适应滤波器的系数更新,并且相应调整NLP(Non-linear processing,非线性处理)时的信号增益,使得输出信号e(n)尽量逼近近端语音信号v(n)。

四、双讲检测的结果分析

为了与谷歌WebRTC回声消除算法进行比较,我们使用相同的语音信号(Far语音、Near语音、Mic信号),要注意的是其中Near语音在真实的语音通信场景中是无法获得的。

我们的双讲检测及回声消除均不需要Near语音,在此列出只是为了方便对比,以衡量算法性能。我们提出的带双讲检测的回声消除算法具体效果如下:
在这里插入图片描述
图4:提出算法的回声消除效果图

可以看出在单讲模式下,回声也是消除的非常干净;在双讲模式下,近端语音基本都被保留下来,只是幅度稍有削弱,不存在吃音现象。主观听感上,经过回声消除后的信号非常接近原来的近端语音。

为了衡量回声消除效果,我们利用了几个常用指标进行评价:

MSE(Mean Squared Error,均方误差):计算output和near两个信号的均方误差,比较结果可以说明输出接近原始说话声的程度,越小越接近。

ERLE(Echo Return Loss Enhancement,回声返回衰减增益),其计算公式如下:

在这里插入图片描述

ERLE值越大,则表明回声抵消效果越好。

Coherence(互相关性):计算output和near两个信号的分段互相关性,越接近1说明两者越相似。

下图是WebRTC回声消除算法与YeeCall算法的指标对比:
在这里插入图片描述
图5:YeeCall算法的性能指标
在这里插入图片描述
图6:谷歌WebRTC算法的性能指标

在单讲部分ERLE和Coherence相差无几,但是YeeCall算法的MSE明显整体小于WebRTC算法,这得益于我们在NLP是进行的增益处理。

在双讲部分(1300帧至2600帧),YeeCall算法的MSE和Coherence指标明显优于WebRTC算法。双讲时WebRTC算法出现大量吃音,导致output和near出现显著差异,从而MSE显著变大,而分段的Coherence也偏离1。而我们算法由于有双讲检测,output和near依然比较接近,从而MSE维持较小的值,同时分段的Coherence也还在1附近。

如果观众点赞多,我们将进一步提供PESQ听觉质量测试数据,及失调Misalignment数据来对比回声路径的估计效果,其计算公式如下:
在这里插入图片描述
失调越小说明回声路径的估计越准确,从而可以判定回声消除算法的优劣。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值