终端音频对讲啸叫问题调研与分析

147 阅读11分钟

日期:2022年8月31日

一、行业背景

    传统的回声消除方案上,都是采用硬件方式,在硬件电路上集成DSP处理芯片,比如我们常用的固定电话、手机等都有专门的回音消除处理电路,而采用软件方式实现回声消除一直存在技术难点,包括国内应用最广泛的QQ超级语音,采用的国外的GIPS技术。

    回声消除已经成为即时通讯中提供全双工语音的标准方法。声学回声消除是通过消除或者移除本地话筒中拾取到的远端的音频信号来阻止远端的声音返回去的一种处理方法。这种音频的移除都是通过数字信号处理来完成的。回声消除技术是数字信号处理的典型应用之一。

    回声消除的基本原理是以扬声器信号与由它产生的多路径回声的相关性为基础,建立远端信号的语音模型,利用它对回声进行估计,并不断修改滤波器的系数,使得估计值更加逼近真实的回声。然后,将回声估计值从话筒的输入信号中减去,从而达到消除回声的目的。

    简单来说,回声消除就是在Mic采集到声音之后,将本地音箱播放出来的声音从Mic采集的声音数据中消除掉,使得Mic录制的声音只有本地用户说话的声音。

比如列举AnyChat音视频开发:

  • A用户说话
  • B用户Mic录制声音(包含A的声音+B的声音)
  • A听到B的声音(进行了回音消除,只保留B的声音)
  • 关于噪音抑制(ANS)

    噪音抑制技术原理是将实时采样的数字信号进行频谱分析,这样我们就能分析背景噪声响应的强度和频谱分布,然后根据这个模型就能设计一个滤波器,当有人讲话的时候,同时做信号分析,根据分析,ANC就能分析出讲话者的频谱,那么根据这些背景噪音和讲话者的频谱,这个滤波器根据两个信号的对比实时的改变,让讲话者声音频谱通过,对背景噪声的频谱进行抑制,降低其能量,比如说降低15到20个分贝,就很明显可以感觉体验到噪音抑制的效果。

二、啸叫产生原因?

1、输入信号过载

2、离音响的距离太近

3、音响与弦的角度不对

4、音的频率不对

    那么,总结来说,啸叫产生的4个原因,过载量,距离,角度,频率。消除反馈啸叫就要从产生反馈啸叫的必要条件入手,只要能破坏其中一个条件,就可以达到目的。

三、抗啸叫的处理方式

1、距离调整法:

    使用无指向性的话筒,将话筒尽量拾音源,远离音响,这是既能提升扩音音量最有效的方法之一。**扩声系统是否容易啸叫,与话筒的灵敏度没有直接关系。**只不过高灵敏度的话筒都是锐指向性的,容易产生啸叫罢了。**缩短发声设备与听众的距离,实际上可以提升扩音的响度。**可适当的减小系统的总增益。若同时辅以指向性宽的近场音箱,话筒稍微离远点就能避免啸叫。

    对于扬声器的直接反馈声场来说,就是**话筒距扬声器越远越好,扬声器距听众越近越好。**话筒应放在扬声器辐射方向的背面,如果话筒有可能被拿着四处走动,扬声器应放在话筒无法靠得很近的地方。

2、频率均衡法

    亦可称作宽带陷波法,由于话筒拾音和发声设备的频率曲线不是理想平坦的直线(特别是一些质量比较差的放音设备),以及厅堂声场的声学谐振作用,使频率响应起伏很大。这是我们可以用频率均衡器补偿扩声曲线,把系统的频率响应调成近似的直线,使各频段的增益基本一致,提高系统的传声增益。应该使用21段以上的均衡器,在要求比较高的地方应该配置参量均衡器,要求更高时,可采用反馈抑制器。实际上扩声系统在出现反馈自激时,其频率只是固定在某一点上的纯音,所以,只要用一个频带很窄的陷波器将此频率切除,即可抑制系统啸叫。

3、反馈抑制器法

    亦可被称作窄带陷波法,在要求很高的场合,如一些现场演唱的地方,普遍使用声频反馈自动抑制装置,这种装置可以自动跟踪反馈点频率,自动调整Q值带宽,自动将声反馈消除而又最大限度地保护了音质,其原理就是通过陷波抑制啸叫的。

4、反相抵消法

    反相抵消防止自激在高频放大电路比较常见。可以在音频放大电路中采用两个同规格的话筒分别拾取直达声和反射声,通过反相电路使反射声信号在进入功放前相位相互抵消,能有效的防止啸叫自激。

5、调相法

**扩音系统的自激啸叫,其反馈回路是正反馈,如果把话筒信号调相处理,就会破坏自激的相位条件,从而防止系统的自激啸叫。**有资料表明,当相位偏差值在140°时,稳定度最好;并且,调制的频率越高,系统的稳定性越好。为了使处理后的音质不发生太大的畸变,其调相频率的最大允许值是4Hz。

6、移频法

    通过频移器来改变声音频率,可以破坏产生啸叫的条件,从而抑制啸叫。但是该设备存在一定的局限性,不适宜在演唱和乐器中使用,它够将声音信号增加5Hz,在语言扩声时使用起来效果很好,因为语言的频率范围在130至350Hz之间,5Hz频率的变化不会使人有明显的音调变高感觉;而声乐和器乐的下限频率为20Hz左右,5Hz的音调变化人们听了有很明显的声音变调感。

四、衍生概念-回声消除

1、回声的产生

    回声就是声音信号经过一系列反射之后,又听到了自己讲话的声音,这就是回声。在VoIP(Voice over Internet Protocol,基于IP的语音传输 )实时语音通话中,是近端通话者的声音被自己的麦克风拾取后通过网络传到远端,远端扬声器播放出来的声音被麦克风拾取后通过网络又重新发回近端,再加上网络和数据处理等各种延迟的影响,使得近端通话者能够从扬声器中听到自己的刚才所说的话,就产生了回声。

2、回声的分类

    在通信系统中,回声主要分为两类:电路回声声学回声(线性回声和非线性回声)

**电路回声:**通常产生于有线通话中,由于电路回声信号是线性且稳定的,所以比较容易将其消除,用一个简单的线性叠加器就可以实现,不属于本文讨论方向。

2.1、直接回声(线性回声):

    近端扬声器将语音信号播放出来后,被近端麦克风直接采集后得到的回声;直接回声不受环境的印象,与扬声器到麦克风的距离及位置有很大的关系,因此直接回声是一种线性信号。

2.2、间接回声(非线性回声):

    近端扬声器将语音信号播放出来后,语音信号经过复杂多变的墙面反射后由近端麦克风采集;间接回声的大小与房间环境、物品摆放以及墙面吸引系数等等因素有关,因此间接回声是一种非线性信号

3、回声消除

    回声消除(Acoustic Echo Cancellation,AEC ):就是在麦克风采集到声音之后,将本地扬声器播放出来的声音从麦克风采集的声音数据中消除掉,使得麦克风录制的声音只有本地用户说话的声音。

    回声消除的基本原理:使用自适应滤波算法,以扬声器信号与由它产生的多路径回声的相关性为基础,建立远端信号的语音模型,利用它对回声进行估计,并不断修改滤波器的系数,使得估计值更加逼近真实的回声,然后将回声估计值从麦克风的输入信号中减去,从而达到消除回声的目的。

回声消除也主要由三个大的算法模块组成:

  1. 时延估计(Delay Estimation)模块
  2. 线性自适应滤波器(Linear Adaptive Filter)模块
  3. 非线性处理(Nonlinear Processing)残余声学回声模块

其中「时延估计」决定了AEC的下限,「线性自适应滤波器」决定了 AEC 的上限,「非线性处理」决定了最终的通话体验,特别是回声抑制跟双讲之间的平衡。

4、回声消除方案

Android回声消除方案调研表

WebRTC与Speex对比表

技术对比分析

WebRTC

WebRTC 架构中上下行音频信号处理流程如图,音频 3A(AGC: Automatic gain control; ANS: Adaptive noise suppression; AEC: Acoustic echo cancellation)算法主要集中在上行的发送端对发送信号依次进行回声消除、降噪以及音量均衡(这是 AEC 的处理流程,AECM 的处理流程 ANS 会前置),AGC 会作为压限器作用在接收端对即将播放的音频信号进行限幅。

(1)关键代码:

WebRtcAecm_Create();

WebRtcAecm_Init(aecmInst, sampleRate);//8000 or 16000 Sample rate

WebRtcAecm_set_config(aecmInst, config);

WebRtcAecm_BufferFarend(aecmInst, far_input, samples) // 填充接收到的远端视频数据。

WebRtcAecm_Process(aecmInst, near_input, NULL, out_buffer, samples, 140); // 添加近端采集的数据,内部包含回声,重点为延时时间的获取。

注:WebRtcAecm_Process方法的最后一个参数msInSndCardBuf,该值需要特别计算才能够取得良好的去回音效果,即:将听筒播放出来的声音被mic采集到时的一个精确的值,才能使AECM达到良好的回音消除效果。

(2)回声消除内部核心:

WebRtc_DelayEstimatorProcessFix // 回声延时估计

WebRtcAecm_UpdateChannel // NLMS:归一化均方最小自适应滤波算法

WebRtcAecm_CalcSuppressionGain // NLP:非线性滤波,使用wiener滤波器

ComfortNoise // CNG:舒适噪声产生

五、参考文档、致谢

1、www.t-firefly.com/doc/case/45… (RK3399回音消除)

2、blog.csdn.net/sunxiaopeng… (回音消除、噪音抑制的原理)

3、www.360doc.com/content/21/…(分析四个“啸叫”产生的原因,分享五个解决“啸叫”的办法)

4、blog.csdn.net/Agg_bin/art… (Android回声消除调研 20220321)

5、www.cnblogs.com/LXP-Never/p… (声学回声消除(Acoustic Echo Cancellation)原理与实现)

6、rtcdeveloper.agora.io/t/topic/211… (详解低延时高音质|回声消除与降噪篇)

7、bbs.csdn.net/topics/6011… (深入浅出 WebRTC AEC(声学回声消除))