AEC原理
一、AEC概述
AEC全称为Acoustic echo cancellation,中文为回声消除。回声的形成如下所示:
在实时音视频通话中,扬声器播放的声音又再次录进麦克风里去,这种现象在音频处理领域被称为"声学回声"(Acoustic Echo)。它通常发生在以下几种场景中:
设备物理环境因素:
- 当麦克风和扬声器距离过近(如手机免提模式或笔记本电脑内置麦克风)
- 在封闭空间内使用外置扬声器(如会议室视频会议系统)
- 设备放置在硬质表面导致声波反射(如玻璃桌面)
信号处理机制: - 系统未启用或未正确配置回声消除(AEC)算法
- 音频采样率不匹配导致数字信号处理失效
- 网络延迟造成回声消除算法失效(延迟超过100ms时效果明显下降)
典型症状表现: - 通话对方会听到自己话语的延迟重复(延迟时间通常在50-300ms)
- 声音质量明显下降,可能出现金属声或啸叫
- 在多人会议场景中会产生回声叠加效应
目前主流的解决方案包括:
硬件层面: - 采用指向性麦克风阵列
- 增加物理隔音装置
- 优化设备声学结构设计
软件层面: - 实时自适应回声消除算法(如WebRTC中的AEC模块)
- 非线性处理(NLP)技术消除残余回声
- 双讲检测(DTD)技术防止语音切断
二、AEC处理流程
1、延时估计
(1)固定延时
①录出MIC和SPK音频,通过Audition查看,两个通道的时延;
②通过程序对比两个音频,估算出延时;
③将估算出的延时,写死在应用程序中,可以适当节省算力。
(2)动态估算
将估计算法放置在应用程序中,设置间隔多长时间进行时延估算,参考以下博文
AEC延时估计
2、线性处理
一般会采用lmslmslms,nlmsnlmsnlms等自适应滤波器进行处理
AEC线性处理
3、非线性处理
Nonlinear Processing, NLP
(1)原理
利用信号之间的频域相干性c(0<=c<=1)来衡量误差信号中残留回声的大小。
这里误差信号e(n)为线性处理之后的输出结果,即消除完线性干扰之后的近端语音信号
①计算麦克风输入的近端信号d(n)d(n)d(n)与误差信号e(n)e(n)e(n)的频域相干性cdecdecde
cdecdecde可以简单的理解为残留回声在误差信号e(n)e(n)e(n)中的占有比例。
假设线性阶段正常运行,cdecdecde越接近于1,说明近端信号和误差信号相似性越高,越不需要对误差信号做控制;
相反,cdecdecde越小,越需要对误差信号做抑制。
②计算近端信号d(n)d(n)d(n)和远端信号x(n)x(n)x(n)之间的频域相干性cxdcxdcxd
令cxd′=1−cxdcxd'=1-cxdcxd′=1−cxd
cxd′cxd'cxd′越大,说明回声残留越小,越不需要抑制;
cxd′cxd'cxd′越小,说明回声残留越大,越需要抑制。