回声消除使用说明¶
AEC是声学回声消除(Acoustic Echo Cancellation)的简称,该算法在有参考的情况下,自适应追踪回声路径的变换、实时抑制扬声器到达麦克风终端的回声信号,以提升目标语音的识别效果,根据实际应用场景评估是否开启AEC。开启该功能后,当存在较长的播放内容,或者在播放音频媒体资源时候(例如音箱播放MP3歌曲),这时也可以进行语音识别打断。
本文档主要介绍如何使用该功能。
1. AEC基本介绍¶
AEC的应用原理示意框图如下,参考信号经过喇叭产生播放信号B,人声为目标语音信号A,当播放声音时,信号B和信号A在应用环境进行复杂的混合后进入芯片,AEC算法根据参考信号和混合后的信号,抑制信号B,提高信号A的信噪比,再进入语音识别引擎,从而提升识别效果。

2. AEC软件平台¶
以下SDK可以支持AEC功能:
- 离线语音识别SDK:CI13XX_SDK_ASR_Offline
3. AEC软件配置¶
3.1 开启功能¶
- 离线语音识别SDK
用户可在../projects/offline_asr_pro_sample/src/user_config.h文件中进行配置
#define USE_AEC_MODULE 0 //是否开启回声消除功能,1:开启,0:关闭。
3.2 参数配置¶
用户可打开SDK包中的../projects/offline_asr_pro_sample/src/ci_ssp_config.c文件,回声消除算法有以下参数可供用户调试使用:
- 离线语音识别SDK
const aec_config_t aec_config =
{
.alc_off_codec_adc_gain_mic = 20, //麦克风信号增益
.alc_off_codec_adc_gain_ref = 0 //参考信号增益
};
参数说明:
开启AEC功能后,会自动关闭自动增益控制(ALC)。用户可通过调整参数alc_off_codec_adc_gain_mic、alc_off_codec_adc_gain_ref的大小来设置麦克风信号通道、参考信号通道的固定增益。
alc_off_codec_adc_gain_mic:默认20,范围-18 ~ 28.5,单位dB。
alc_off_codec_adc_gain_ref:默认0,范围-18 ~ 28.5,单位dB。
调试建议:麦克风信号通道增益至少高于参考信号通道增益8dB;当识别效果正常时,建议不修改参数值;若识别效果差,用户可通过5.2节内容逐步排查麦克风信号、参考信号是否削顶,使回声消除精度下降,回声残留增多,从而导致识别效果变差。
4. 硬件设计¶
4.1 物料选型¶
- 功放选型注意,要保证在最大音量状态下,功放输出功率失真度要<10%。我司常用型号为FM8002A,SGM4890等,用D类功放反馈信号注意需要加RC波形波。
- 喇叭最好选用带音腔的喇叭,在150HZ-3000HZ之间THD最好能小于10%。
4.2 原理图设计¶
- 离线语音识别SDK仅支持单MIC+单喇叭方案
可在我司平台上下载对应需要的参考电路,第一次设计完成后,建议发我司市场或FAE确认。
- 单MIC+单喇叭,AB类功放参考电路

- 单MIC+单喇叭,采用D类功放参考电路。需要加RC滤波,把脉冲宽度调制信号滤为模拟信号
注意:电路留差分设计,但默认采用单端反馈方式

4.3 整机结构要求¶
- 要求麦克风与喇叭在结构空间允许的条件下,麦克风需尽量远离喇叭位置,麦克风不要超出喇叭朝向所在水平面,麦克风离喇叭越近,信噪比越低,麦克风失真的可能性越大,考虑结构大小建议麦克风离喇叭10cm左右,麦克风与喇叭的位置关系左右上下对AEC处理效果影响不大;

-
麦克风需配备结构稳固且可密封的外壳,胶套厚度需超过1mm,以确保麦克风不会接收到整机内部喇叭产生的音源干扰;
-
选择模拟麦克风时,应考虑灵敏度在-32±3dB范围内,以确保有效降低环境噪音并拾取清晰人声。同时,信噪比应大于70dB,以满足高质量声音回放的需求;
-
必须设计合理的麦克风进音孔,拾音孔的直径与孔深度(即外壳厚度)密切相关。以下是推荐的规格:
| 序号 | 孔深度(与产品面板厚度及咪套厚度有关) | 拾音孔直径 |
|---|---|---|
| 1 | 1mm | 1.5mm |
| 2 | 2mm | 2.5mm |
| 3 | 3mm | 3.0mm |


- 最好使用带音腔的喇叭,避免把声音传入整机内部。尽量不要用微型扬声器、超薄扬声器等共振频率较高的扬声器单元,该类单体低频失真大。扬声器后腔结构允许的话,加被动辐射器或导向管设计,可以增加低频,同时减小喇叭的非线性振动;
- 详细信息可参考我司平台说明:☞产品结构设计
5. 调试流程¶
5.1 喇叭音量调试¶
用分贝仪测量音量,当喇叭为最大音量播放时,在喇叭附近的音量建议小于95dB(最大不超过110dB),在MIC处的音量建议小于85dB(最大不超过90dB)。若喇叭播放音量过大,建议降低喇叭 hp out 最大音量。
喇叭注意事项:
- 减少谐波失真:谐波失真由系统的非线性特性造成。在整个音频通路中,谐波失真的产生原因有:喇叭单体的失真曲线、喇叭后腔结构设计、喇叭前网罩、麦克风收音孔结构等。麦克风信号中的谐波失真越大,与参考信号的相似度越差,回声消除的精度越低。
- 调试建议:尽量不要用微型扬声器、超薄扬声器等共振频率较高的扬声器,该类单体低频失真大;扬声器后腔结构允许的话,加被动辐射器或导向管设计,可以增加低频,同时减小喇叭的非线性振动;避免输入信号的振幅过大,尤其是在接近喇叭的功率极限时,限制信号的峰值振幅。
采用4个不同的喇叭播放相同的音频源,如图5-1的语谱图所示,喇叭2、3、4均存在固定频段能量增强的现象,即存在谐波失真,会严重影响AEC效果,尽量不用采用这种喇叭。

5.2 信号幅值调试¶
在产品密封安装后,喇叭以最大音量播放,通过**采音**观察麦克风信号、参考信号,尽量保证麦克风信号和参考信号不削顶失真。削顶会让信号产生非线性失真,进而降低回声消除精度。
(链接,增加采音可以用于以下情况的分析:a. 产品硬件底噪 ;b. aec ; c. doa分析.........)
1)麦克风信号
若喇叭距离麦克风较近且播放音量过大,麦克风信号可能削顶失真。
调试建议:喇叭播放时控制在合适的音量范围内;减小参数alc_off_codec_adc_gain_mic的值。

注意:麦克风信号也不能过小,会影响识别效果。
2)参考信号
**调试建议:**检查播放音源是否削顶;检查分压电路前信号是否削顶,需对音量进行调整或更换低阻抗的喇叭。
如图5-3所示的上、下通道信号分别为麦克风信号、参考信号,展示了参考信号正常、参考信号削顶的时域波形,图5-4是对应的参考信号语谱图,图中可以看到当有播放的时候参考信号有数据,无播放的时候,参考信号非常小接近为0。


注意事项:
- 从功放后端采集的参考信号更接近喇叭播放的声音信号。在功放无延迟的情况下,可选择功放前端信号作为参考,在功放有延迟(尤其是自带EQ功能的功能)的情况下,建议选择功放后端信号作为参考(注意功能的输出范围不要超过ADC采样范围)。
- 参考信号为模拟小信号,容易受到干扰。若电路设计存在问题,通常会在采集信号或麦克风信号中引入不良信号,如脉冲、杂波、混叠等,会导致丢数据情况出现,降低回声消除精度。若参考信号中的干扰较多,应首先修改硬件电路,例如:参考模拟信号尽量包地和远离高频信号,保证电路信号干净后,再进行声学测试。
5.3 效果展示¶
如图5-5所示的上、下通道信号分别为AEC处理后信号、麦克风信号(目标语音和喇叭播放声音的混合信号)。图中可以看出当信号无失真时,AEC算法处理消除了麦克风信号中的播报声音部分,播报残留很小,提高目标语音的信噪比。

下图5-6为同样该音频的频域显示,该结果为正常结果。

6. 异常调试步骤¶
注意:调试异常过程中,保存好音频,有利于快速分析。
-
step1:检查sdk配置是否存在异常
-
step2:通过采音板采集参考信号(ref)、输出信号(dst)和麦克风信号(mic)判断异常原因
目前较多的异常情况都是出现在参考信号,存在的问题举例有:
1)参考通道没有数据,需检查硬件通路、检查ref是左通道输入还是右通道输入,默认左通道;
2)参考信号干扰比较大,需检查硬件通路;
3)参考信号幅值偏离标准值较大(过大或过小),需检查分压电路和alc增益值,以标准板为参考;
4)参考信号分压过程中出现饱和情况,需检查分压电路和alc增益值,AEC异常调试案例
麦克风信号异常的问题有:
1)aec处理过程中,alc没有关闭,需检查播放状态、alc切换状态;
2)麦克风信号出现截幅情况,需检查播放状态、alc切换状态、alc增益值;
3)麦克风信号灵敏度差异,需更换麦克风确认是否麦克风异常;
4)麦克风幅值过小,aec不起效,aec处理中的门限值需要调整、更改alc增益。
- step3:替换不同的模块分析是否是外围硬件设备差异导致异常
外围设备有:麦克风、喇叭、分压电路、功放、codec等。
- step4:查看是否是环境因素导致aec效果下降
1)混响较大的环境下,aec效果会下降;
2)在家用电器或机器人等产品设备中,风扇噪声和电机噪声引入的变量会导致麦克风信号的底噪特别大,AEC处理后信号仍会保留这部分底噪,对识别效果有较大影响。要特别注意内部风扇、电机与麦克风的距离,如结构空间允许,可对麦克风单独做密封处理,防止内部传音。
**AEC应用不符合预期时建议以标准sdk和硬件作为参考,通过标准配件参考分模块分析具体原因。 **