至于双讲恢复能力WebRTCAEC算法提供了{kAecNlpConservative,kAecNlpModerate,kAecNlpAggressive}3个模式,由低到高依次不同的抑制程度,远近端信号处理流程,NLMS自适应算法(上图中橙色部分)的运用旨在尽可能地消除信号d(n)中的线性部分回声,而残留的非线性回声信号会在非线性滤波(上图中紫色部分)部分中被消除,这两个模块是WebrtcAEC的模块。模块前后依赖,现实场景中远端信号x(n)由扬声器播放出来在被麦克风采集的过程中,同时包含了回声y(n)与近端信号x(n)的线性叠加和非线性叠加:需要消除线性回声的目的是为了增大近端信号X(ω)与滤波结果E(ω)之间的差异,计算相干性时差异就越大(近端信号接近1,而远端信号部分越接近0),更容易通过门限直接区分近端帧与远端帧。非线性滤波部分中只需要根据检测的帧类型,调节抑制系数,滤波消除回声即可。下面我们结合实例分析这套架构中的线性部分与非线性分。线性滤波线性回声y'(n)可以理解为是远端参考信号x(n)经过房间冲击响应之后的结果,线性滤波的本质也就是在估计一组滤波器使得y'(n)尽可能的等于x(n),通过统计滤波器组的比较大幅值位置index找到与之对齐远端信号帧,该帧数据会参与相干性计算等后续模块。
非线性声学回声消除技术研究现状。江苏无限声学回声
就得到了非线性滤波器的比较好解,它具有小二乘估计形式。第三步构建耦合机制。在介绍耦合机制之前,先说一下我对这种耦合机制的期望特性。我希望在声学系统的线性度非常好的情况下,线性滤波器起到主导作用,而非线性滤波器处于休眠的状态,或者关闭的状态;反过来,当声学系统的非线性很强时,希望非线性滤波器起到主导作用,而线性滤波器处于半休眠状态。实际声学系统往往是非线性与线性两种状态的不断交替、叠加,因此我们希望构建一种机制来对这两种状态进行耦合控制。为了设计耦合机制,就必须对线性度和非线性度特征进行度量。因此,我们定义了两个因子,分别是线性度因子和非线性度因子,对应左边的这两个方程。而我们进行耦合控制的基本的思想就是将这两个因子的值代入到NLMS算法和小二乘算法之中,调整二者的学习速度。为了便于大家对双耦合声学回声消除算法有一个定性的认识,我又画了一组曲线,左边一组对应的是线性回声的场景。我们首先来看一下NLMS算法,黄色曲线真实的系统传递函数,红色曲线是NLMS算法的结果。可以看到,在线性场景下,NLMS算法得到的线性滤波器可以有效逼近真实传递函数,进而能够有效抑制线性声学回声。下面再来看一下这个双耦合算法。
江苏无限声学回声AEC声学回声,电话的扬声器的声音。
非线性声学回声消除的技术难点我从6个不同的维度比较了线性的和非线性这两种回声消除问题。首先个维度,系统传递函数。在线性系统里面,我们认为系统传递函数是一个缓慢时变的系统,我们可以通过自适应滤波的方式去逼近这个传递函数,来有效抑制回声。而在非线性系统里面,系统传递函数通常是快变、突变的,我们如果用线性的方法去逼近的话,会出现滤波器的更新速度,跟不上系统传递函数变化的速度,就会导致声学回声消除不理想。第二个维度是优化模型,在线性里面我们是有一套非常完备的线性优化模型,从目标函数的构建到系统优化问题的求解,整个脉络是很清晰的。而在非线性的系统里面,目前是缺少一种有效的模型来对它进行支撑的。接下来的四个维度对应4个问题,它们是线性回声消除领域普遍存在的4个难点问题。这些问题在非线性领域也同样存在。比如强混响问题,我们如果在一个小型会议室里开视频会议。那么声音会经过多次墙壁反射,带来很强的混响,混响的拖尾时间会很长。如果想抑制这样的强混响回声,就需要把线性滤波器的长度加长。这样会带来一个新的问题:按照Widrow的自适应滤波理论,滤波器的长度越长,其收敛速度越慢,同时权噪声越大。
需要注意的是,如果index在滤波器阶数两端疯狂试探,只能说明当前给到线性部分的远近端延时较小或过大,此时滤波器效果是不稳定的,需要借助固定延时调整或大延时调整使index处于一个比较理想的位置。线性部分算法是可以看作是一个固定步长的NLMS算法,具体细节大家可以结合源码走读,本节重点讲解线型滤波在整个框架中的作用。从个人理解来看,线性部分的目的就是很大程度的消除线性回声,为远近端帧判别的时候,很大程度地保证了信号之间的相干值(0~1之间,值越大相干性越大)的可靠性。我们记消除线性回声之后的信号为估计的回声信号e(n),e(n)=s(n)+y''(n)+v(n),其中y''(n)为非线性回声信号,记y'(n)为线性回声,y(n)=y'(n)+y''(n)。相干性的计算(Matlab代码),两个实验(1)计算近端信号d(n)与远端参考信号x(n)的相关性cohdx,理论上远端回声信号的相干性应该更接近0(为了方便后续对比,WebRTC做了反向处理:1-cohdx),如图5(a),行为计算近端信号d(n),第二行为远端参考信号x(n),第三行为二者相干性曲线:1-cohdx,会发现回声部分相干值有明显起伏,比较大值有,近端部分整体接近,但是有持续波动,如果想通过一条固定的门限去区分远近端帧,会存在不同程度的误判。
非线性声学回声消除的技术难点。
在线性的回声场景里,双耦合的非线性滤波器是处于休眠的状态,所以它的值是趋于0的,这个时候起主导作用的是线性滤波器。接下来我们再看一下右边的非线性声学回声场景。我们假设非线性的失要出现在t1到t2这个时间段内,大家可以看到黄色线在这个时间里,出现了一次突变,对于NLMS算法,当出现非线性失真之后,它的线性滤波器会去逼近非线性失真。但是由于学习的速度跟不上滤波器变化的速度,所以它跟真实的值之间总是存在一个比较大的gap。同时当非线性失真消失之后,它还需要一段时间恢复到正常状态,因此在整个时间段里,都会出现回声泄露的问题。接下来我们再看双耦合算法,在非线性失真出现之后,线性滤波器会进入到一种相对休眠的状态,就是前面所提到的耦合机制,会降低它的更新速度,所以在整个非线性出现的这段时间里,他的值是缓慢变化的。进入非线性失真状态之后,非线性滤波器开始工作,它会快速非线性特性的变化,而当非线性失真消失之后,非线性滤波器又进入休眠状态。将这两个滤波器结合起来,就可以实现对整个声学回声路径的变化进行有效。这里只是给出了一个示例,实际情况往往要复杂很多。接下来我们对这2个滤波器做了特性比较,主要是从4个不同的维度。
实现对整个声学回声路径的变化进行有效跟进。江苏无限声学回声
先对非线性声学回声的特性进行分析。江苏无限声学回声
他的是线性回声传递函数。基于这样的数学假设,我们收到的信号y就可以表示成发射的信号x分别跟这样两个传递函数进行卷积之后的结果。接下来我们对这个模型进行了适当的简化,简化主要是基于数学分解,我们假设非线性的传递函数,可以分解成线性跟非线性这样两个系统函数的组合形式,就会得到中间的方程。接下来对中间的方程进行变量替换,就得到这个表达式,这个表达式它的物理意义很清晰,我们从可以看到,整个回声路径是可以表示成线性回声路径跟非线性回声路径二者之和的形式,这是它的物理意义。2.双耦合自适应滤波器,基于这样一个数学模型,接下来我们就构建了一种新的滤波器结构,称之为双耦合自适应滤波器。这个滤波器跟传统线性的自适应滤波器相比,主要有两个方面的不同,个不同是传统的线性滤波器只有一个学习单元,而我们的这个滤波器有两个学习单元,分别是这里的线性回声路径滤波器,我们用Wl来表示。还有非线性的回声路径滤波器,我们用Wn来表示。第二个不同就是,我们在这两个滤波器之间还加入了一个耦合因子,这个耦合因子目的就是为了协同二者更好的工作,让二者能够发挥出比较大的效能,甚至能够起到1+1>2的效果。
江苏无限声学回声