我们常说,距离产生延时,而在模拟音频大举转向数字音频、网络音频的,网络信号的延迟也为音频领域赋予了新的现象,尤其应用在远程会议这样的音频传输系统当中,它能将一次次回授剥离成一次次听似回声的现象,这就是网络音频回声。该图片经我司设计员制作后作者再编辑通常由A地发出的声源A在几乎不经过延迟处理的本地系统中,通过A地音箱扩声;而其经过网络终端编码送向远端时,除了考虑A地的上传时间X,还得考虑B地的下载时间Y。在这样一个架构在Internet网络传输环境中的声音,其到达B地扩声音箱出来的信号则是A+X+Y。经B地本地话筒拾取后的该信号,再由B地的上传网速(时间)Z、A地的下载时间W传送回A地扩声音箱,其表现出的信号则会出现一次A信号,及一次赋予了(X+Y+Z+W)时间的A信号。假设A地—B地传输时间总和为200ms,B地—A地传输时间总和为200ms,则信号的一去一回,体现在A扩声音箱中至少会存在A和A+400ms的信号,若反馈信号电平足够强,则再被话筒拾取,这将不止产生一次的回声,而是多次规律的回声现象。该图片来源于Motivity产品DP处理器AEC调试界面AEC即AcousticEchoCancellation(声学回声消除)技术简称。
非线性声学回声消除技术在整个声学回声消除领域是一个相对比较冷的研究方向。福建信息化声学回声设计
我们还希望它在一个短时的观测时间窗的尺度里面也是比较好的,即局部比较好,所以在数学期望内部,我们又对误差进行了短时积分。这个优化准则跟传统的线性自适应滤波器是有本质区别的,因为传统的线性自适应滤波器基于小均方误差准则,它只是在统计意义上比较好,没有局部比较好约束。首先来求解这里的Wl,就是线性滤波器。主要求解方法是,假设Wn就是非线性滤波器是比较好解,把这个比较好解代入到前面的优化方程里,就会得到上面简化之后的优化目标函数。在这个地方,我们又做了一些先验假设,假设非线性的滤波器的一阶统计量和二阶统计量都等于0,我们就可以把上面的优化问题进一步简化,就得到我们非常熟悉的方程,就是Wiener-Hopf方程。这个结果告诉我们,线性滤波器的比较好解跟传统的自适应滤波器的比较好解是一致的,都是Wiener-Hopf方程的理论比较好解。所以我们就可以采用一些现有的比较成熟的算法,比如NLMS算法、RLS算法,对它进行迭代求解。这就是Wl的设计。接下来再看看Wn的设计。Wn的设计跟Wl的设计是类似的,也是需要将优化之后的线性滤波器,代入到开始的优化问题里,可以把前面的优化问题简化成下面的方程。接下来进行一系列的变量替换之后。
福建信息化声学回声设计右边的非线性声学回声场景。
n)为加混响的远端参考信号x(n)+近端语音信号s(n)。理论上NLMS在处理这种纯线性叠加的信号时,可以不用非线性部分出马,直接干掉远端回声信号。图7(a)行为近端信号d(n),第二列为远端参考信号x(n),线性部分输出结果,黄色框中为远端信号。WebRTCAEC中采用固定步长的NLMS算法收敛较慢,有些许回声残留。但是变步长的NLMS收敛较快,回声抑制相对好一些,如图7(b)。线性滤波器参数设置#defineFRAME_LEN80#definePART_LEN64enum{kExtendedNumPartitions=32};staticconstintkNormalNumPartitions=12;FRAME_LEN为每次传给音频3A模块的数据的长度,默认为80个采样点,由于WebRTCAEC采用了128点FFT,内部拼帧逻辑会取出PART_LEN=64个样本点与前一帧剩余数据连接成128点做FFT,剩余的16点遗留到下一次,因此实际每次处理PART_LEN个样本点(4ms数据)。默认滤波器阶数为kNormalNumPartitions=12个,能够覆盖的数据范围为kNormalNumPartitions*4ms=48ms,如果打开扩展滤波器模式(设置extended_filter_enabled为true),覆盖数据范围为kNormalNumPartitions*4ms=132ms。随着芯片处理能力的提升,默认会打开这个扩展滤波器模式,甚至扩展为更高的阶数。
为什么声学器件的小型化容易产生非线性的失真呢?这个需要从喇叭发声的基本原理说起,我们都知道声波的本质是一种物理振动,而喇叭发声的基本原理就是通过电流来驱动喇叭的振膜发生振动之后,这个振膜会带动周围的空气分子相应发生振动,这样就产生了声音。如果我们要发出一个大的声音的话,那么就需要在单位时间内用更多的电流去驱动更多的空气分子发生振动。假设有大小不同的两个喇叭,他们用同样的功率去驱动,对于大喇叭而言,由于它跟空气接触的面积要大一些,所以他在单位时间内能够带动更多的空气分子振动,所以它发出来的声音也会大一些。而小喇叭如果想发出跟大喇叭一样大的声音,就需要加大驱动功率,这样会带来一个问题:我们的功率放大器件会进入到一种饱和失真的状态,由此就会带来非线性的失真。这就是声学器件小型化容易产生非线性失真的一个主要的原因。这里廉价化比较好理解了,就不多说了。原因之二,就是声学结构设计的不合理。典型的一个实例就是声学系统的隔振设计不合理。喇叭发声单元跟麦克接收单元之间,通常是需要做隔振处理的,如果没有隔振处理的话,那么在喇叭发声的过程中,他所产生的振动会通过物理方式传递到麦克接收端。
非线性声学回声消除方面的资料非常少。
需要注意的是,如果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,会发现回声部分相干值有明显起伏,比较大值有,近端部分整体接近,但是有持续波动,如果想通过一条固定的门限去区分远近端帧,会存在不同程度的误判。
回声来自于非预期的泄露,一般分为电学回声和声学回声。福建信息化声学回声设计
声学回声的原理是什么?福建信息化声学回声设计
首先是优化准则。NLMS算法是基于小均方误差准则,而双耦合算法是基于小平均短时累计误差准则,所以他们的优化准则是不一样的。第二个就是理论的比较好解,NLMS算法具有Wiener-Hopf方程解,而双耦合算法的线性滤波器也具有Wiener-Hopf方程解,非线性滤波器具有小二乘解。第三个维度就是运算量,NLMS运算量是O(M),M是滤波器的阶数,而双耦合算法运算量后面会多一个O(N2),因为他有两个滤波器,N是非线性滤波器的阶数,这里的平方是因为小二乘需要对矩阵进行求逆运算,所以它的运算量比线性的NLMS运算量要大很多。第三个就是控制机制,NLMS算法只有一个滤波器,它的控制主要是通过调整步长来实现的,控制起来要相对简单。而双耦合算法需要对两套滤波器进行耦合控制,控制的复杂度要高很多。实验结果分析,这里我主要是分了两个实验场景比较双耦合算法和NLMS算法的性能,个是单讲测试场景,第二个就是双讲测试场景。首先看一下单讲测试场景,个示例是针对强非线性失真的情况,左边分别原信号的语谱,NLMS算法进行回声消除之后的语谱、双耦合算法的语谱。颜色越深,能量越大。右边这个的是回声抑制比,值越大越好,红色的曲线是双耦合算法的回声抑制比。
福建信息化声学回声设计