跳转至

回声消除使用说明

AEC是声学回声消除(Acoustic Echo Cancellation)的简称,该算法在有参考的情况下,自适应追踪回声路径的变换、实时抑制扬声器到达麦克风终端的回声信号,以提升目标语音的识别效果,根据实际应用场景评估是否开启AEC。开启该功能后,当存在较长的播放内容,或者在播放音频媒体资源时候(例如音箱播放MP3歌曲),这时也可以进行语音识别打断。

本文档主要介绍如何使用该功能。

1. 回声消除算法

AEC的应用原理示意框图如下,参考信号经过喇叭产生播放信号B,人声为目标语音信号A,当播放声音时,信号B和信号A在应用环境进行复杂的混合后进入芯片,AEC算法根据参考信号和混合后的信号,抑制信号B,提高信号A的信噪比,再进入语音识别引擎,从而提升识别效果。

回声消除原理框图

图1-1 回声消除原理框图

2. 回声消除算法软件配置方法

用户可打开SDK包中的ci_ssp_config.c文件,回声消除算法有以下参数可供用户调试使用:

aec_config_t aec_config =
{
  .mic_channel_num = 1, //麦克风信号通道数
  .ref_channel_num = 1, //参考信号通道数 
  .aec_control_mode = COMPUTE_REF_AMPL_MODE, //ENABLE_PLAYING_STATE_MODE:根据播报状态进行aec控制; COMPUTE_REF_AMPL_MODE:根据参考幅值大小进行aec控制
                                            //默认使用COMPUTE_REF_AMPL_MODE,若播报状态准确建议使用ENABLE_PLAYING_STATE_MODE模式
  .aec_gain = 1.0f,     //增益数值
  .aec_enable_threshold = 6000.0f,//参考信号判断门限值,设置为0表示该判断失效,aec一直进行处理
  .aec_mic_div_ref_thr = 0.05f,
  .nlp_flag = 2,        //非线性处理模块选择模式,默认使用模式二, 0:不使用,1:使用模式一失真会更大,2:使用模式二失真要更小,3:先使用模式二后使用模式一
  .aggr_mode = 1,       //默认1
  .fft_size = 256,      //频域处理频点数
  .alc_off_codec_adc_gain_mic = 20,
  .alc_off_codec_adc_gain_ref = 0

};

注意

注意双声道立体声应用:修改参数ref_channel_num 、mic_channel_num

3. 回声消除算法应用配置方法

AEC参考信号(及喇叭播放的信号)有以下两种来源方式:

  • 1: 参考来源于语音模块本身的喇叭播放,这种应用简称内部AEC;

  • 2: 参考来源于外部其他播放器的喇叭声音播放,这种应用简称外部AEC。

3.1 内部AEC使用注意事项

3.1.1 硬件线路说明

单麦方案,通过CI13系列芯片的另外一路未使用的codec通道(micpr)作为AEC参考信号输入通道。 低音量情况下功放推荐采用AB类功放,例如SMG4890;大音量情况下功放推荐采用D类功放。 AEC反馈信号为标准I2S,16bits 16K采样率,满幅电压3.3V,则最大音量下参考分压电路后的电压幅值范围为100-150mv。

内部AEC参考硬件线路图

图3-1 内部AEC参考硬件线路图

3.1.2 注意事项

如果是贵司自行设计硬件,应用上需要注意以下事项,我司可以协助贵司进行原理图check。 如为立体声双声道,需采用双通道codec对立体声回采后作为AEC参考信号处理 如果采用D类功放,则需要增加滤波线路(参考后续外部AEC消除中的D类功放滤波线路)。

3.2 外部AEC使用注意事项

外部AEC应用中,如果是单mic应用,外部参考信号可以从MIC R以模拟信号的方式进行输入;如果是双mic应用,需要外置codec对参考信号进行采音,同时功放的信号输出类型(数字、模拟)的不同会导致外围硬件线路不一致,以下从功放的分类分别说明如何应用。

3.2.1 功放输出模拟信号

(1) 硬件原理

AEC参考信号为标准I2S,16bits 16K采样率。

功放输出信号为模拟信号(例如 AB类功放),参考信号通路采用adc (顺鑫es7243E,单端输入)作为参考信号的采样(如下图)。满幅电压为3.3V,最大音量下参考分压电路后的电压幅值范围为100-150mv。

分压电路可参考下图:

内部AEC参考硬件线路图

内部AEC参考硬件线路图

图3-2 模拟功放相关电路图

将播放器的播放状态同步给AEC模块:

若使用**ENABLE_PLAYING_STATE_MODE模式** 外部播报状态需同步,设置播报状态命令如下

ciss_set(CI_SS_PLAY_STATE,CI_SS_PLAY_STATE_PLAYING);//设置当前处于播报状态中 ciss_set(CI_SS_PLAY_STATE,CI_SS_PLAY_STATE_IDLE); //设置当前处于非播报状态中

3.2.2 功放输出数字信号

(1) 硬件原理

AEC反馈信号为标准I2S,16bits 16K采样率。

功放输出信号为数字信号(如D类功放),参考信号通路采用adc(例如AD51050,顺鑫es7243E,差分输入)作为参考信号的采样(如下图)。满幅电压为3.3V,最大音量下参考分压电路后的电压幅值范围为100-150mv。

分压电路可参考下图:

内部AEC参考硬件线路图

图 3-3 数字功放AEC相关电路图

如产品(or 语音模组)播放的音源为双声道立体声,需经过双通道的codec后再接到功放。

将播放器的播放状态同步给AEC模块:

若使用**ENABLE_PLAYING_STATE_MODE模式** 外部播报状态需同步,设置播报状态命令如下

ciss_set(CI_SS_PLAY_STATE,CI_SS_PLAY_STATE_PLAYING);//设置当前处于播报状态中 ciss_set(CI_SS_PLAY_STATE,CI_SS_PLAY_STATE_IDLE); //设置当前处于非播报状态中

4. 注意事项及AEC效果影响因素

4.1 参考信号注意事项

避免参考模拟信号饱和

内部AEC参考硬件线路图

图4-1 参考模拟信号饱和语谱图

内部AEC参考硬件线路图

图4-2 参考模拟信号饱和波形图

调试建议:分压电路前信号失真,需对、音量进行调整或更换低阻抗的喇叭。

AEC的参考模拟信号为模拟小信号,容易受到干扰,需要特别注意layout的时候参考信号的干净程度。设计时参考模拟信号尽量包地和远离高频信号。如电路设计存在问题,通常会在采集信号或麦克风信号中引入不良信号,如脉冲、杂波、混叠等,会导致丢数据情况出现,影响效果。

调试建议:出现该情况时应首先修改硬件电路设计,保证电路信号干净后,再进行声学测试,参考信号受到干扰对AEC效果影响非常明显。

参考信号从功放后端采集 这样的信号是最接近喇叭的真实声音的。当功放无延迟的情况可以用功放前端信号作为参考,功放有延迟(尤其有些自带eq的功放)的时候,建议从功放后端取参考信号。如果从PA后端引出信号,注意功放的输出范围不要超过ADC采样范围。

4.2 mic信号注意事项

避免采集的mic语音信号截幅

调试建议:在扬声器在最大音量下播放满幅扫频信号,扬声器不能出现破音、共振等现象,mic采集信号及参考信号不能出现截幅。喇叭过大会导致失真更严重,在实际应用中需要选择合适的音量范围(喇叭不失真)。

4.3 扬声器注意事项

减少谐波失真,谐波失真是系统不是完全线性造成的。在整个音频通路中,造成信号谐波失真影响因素有:扬声器单体的失真曲线、扬声器后腔结构设计、喇叭前网罩、麦克风收音孔结构等;这些都会造成麦克信号的失真度增加。麦克信号失真越大,麦克信号和回采信号的相似度越差,回声消除的性能越差。喇叭的频响在200~4khz一致性太差,结构存在共振情况,都会影响AEC效果。

通常喇叭都会有一定的失真,音量接近喇叭播放极限的时候,会加剧失真度,尽量在使用的时候,使喇叭工作在失真范围小的幅度,不同喇叭会有不同固定自带的失真干扰。

选择喇叭也需要选择失真小的喇叭,参考图4-3-1,下图为4个喇叭播放的声音的情况,图中可以看到,有些喇叭的在不同的频段上失真比较大,如下图的后面三个,这些不同频段的语音失真,会严重影响AEC效果,尽量不用采用这种喇叭。

内部AEC参考硬件线路图

图4-3-1 4个喇叭播放的声音的情况

喇叭使用的时候,要避免喇叭声音过大导致的麦克风信号削顶。

内部AEC参考硬件线路图

图4-3-2 避免麦克风信号削顶

调试建议: 尽量不要用微型扬声器、超薄扬声器等共振频率较高的扬声器,该类单体低频失真大;扬声器后腔结构允许的话,加被动辐射器或导向管设计,可以增加低频,同时减小喇叭的非线性振动。

4.4 环境注意事项

减少机械噪声 在家用电器或机器人等产品设备中,风扇噪声和电机噪声引入的变量会导致麦克信号的底噪特别大,识别效果受较大影响。

调试建议:在该类设备中,要特别注意内部风扇、电机与麦克风的距离,如结构空间允许,可对麦克风单独做密封处理,防止内部传音。

4.5 麦克风与扬声器的位置关系

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

内部AEC参考硬件线路图

图 4-4 麦克风与喇叭的位置
  • 注意扬声器播放口背离麦克风,避免朝向麦克风。

5.调试效果的方法

图5-1为录音板采音时域效果,该图上可以看到原始的左声道数据(上半图)为目标语音和喇叭播放声音的混合,经过aec算法处理后,抑制喇叭播放的声音,提高目标语音的信噪比,如图5-1中右声道数据(下半图)所示。

内部AEC参考硬件线路图

图5-1 录音板采音时域效果

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

内部AEC参考硬件线路图

图5-2 音频的频域显示

设置IIS输出参数为audio_pre_rslt_write_data((int16_t*)ref, (int16_t*)micl )时,输出参考信号数据和麦克风左声道采音数据,如图5-3,图中可以看到当有播放的时候参考信号有数据,无播放的时候,参考信号非常小接近为0。

内部AEC参考硬件线路图

图5-3 参考信号和麦克风信号波形

图5-4 为同样声音的频域显示:

内部AEC参考硬件线路图

图5-4 参考信号和麦克风信号频域

注意

尽量保证参考信号和麦克风信号不削顶失真,不能过小。

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效果下降,混响较大的环境下,aec效果会下降;

aec应用不符合预期时建议以标准sdk和硬件作为参考,通过标准配件参考分模块分析具体原因。