回声消除使用说明¶
AEC是声学回声消除(Acoustic Echo Cancellation)的简称,该算法在有参考的情况下,自适应追踪回声路径的变换、实时抑制扬声器到达麦克风终端的回声信号,以提升目标语音的识别效果,根据实际应用场景评估是否开启AEC。开启该功能后,当存在较长的播放内容,或者在播放音频媒体资源时候(例如音箱播放MP3歌曲),这时也可以进行语音识别打断。
本文档主要介绍如何使用该功能。
1. 回声消除算法¶
AEC的应用原理示意框图如下,参考信号经过喇叭产生播放信号B,人声为目标语音信号A,当播放声音时,信号B和信号A在应用环境进行复杂的混合后进入芯片,AEC算法根据参考信号和混合后的信号,抑制信号B,提高信号A的信噪比,再进入语音识别引擎,从而提升识别效果。
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 硬件线路说明¶
单麦方案,通过CI231X系列芯片的另外一路未使用的codec通道(micpr)作为AEC参考信号输入通道。 低音量情况下功放推荐采用AB类功放,例如SMG4890;大音量情况下功放推荐采用D类功放。 AEC反馈信号为标准I2S,16bits 16K采样率,满幅电压3.3V,则最大音量下参考分压电路后的电压幅值范围为100-150mv。
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模块:
若使用**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。
分压电路可参考下图:
如产品(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的参考模拟信号为模拟小信号,容易受到干扰,需要特别注意layout的时候参考信号的干净程度。设计时参考模拟信号尽量包地和远离高频信号。如电路设计存在问题,通常会在采集信号或麦克风信号中引入不良信号,如脉冲、杂波、混叠等,会导致丢数据情况出现,影响效果。
调试建议:出现该情况时应首先修改硬件电路设计,保证电路信号干净后,再进行声学测试,参考信号受到干扰对AEC效果影响非常明显。
参考信号从功放后端采集 这样的信号是最接近喇叭的真实声音的。当功放无延迟的情况可以用功放前端信号作为参考,功放有延迟(尤其有些自带eq的功放)的时候,建议从功放后端取参考信号。如果从PA后端引出信号,注意功放的输出范围不要超过ADC采样范围。
4.2 mic信号注意事项¶
避免采集的mic语音信号截幅
调试建议:在扬声器在最大音量下播放满幅扫频信号,扬声器不能出现破音、共振等现象,mic采集信号及参考信号不能出现截幅。喇叭过大会导致失真更严重,在实际应用中需要选择合适的音量范围(喇叭不失真)。
4.3 扬声器注意事项¶
减少谐波失真,谐波失真是系统不是完全线性造成的。在整个音频通路中,造成信号谐波失真影响因素有:扬声器单体的失真曲线、扬声器后腔结构设计、喇叭前网罩、麦克风收音孔结构等;这些都会造成麦克信号的失真度增加。麦克信号失真越大,麦克信号和回采信号的相似度越差,回声消除的性能越差。喇叭的频响在200~4khz一致性太差,结构存在共振情况,都会影响AEC效果。
通常喇叭都会有一定的失真,音量接近喇叭播放极限的时候,会加剧失真度,尽量在使用的时候,使喇叭工作在失真范围小的幅度,不同喇叭会有不同固定自带的失真干扰。
选择喇叭也需要选择失真小的喇叭,参考图4-3-1,下图为4个喇叭播放的声音的情况,图中可以看到,有些喇叭的在不同的频段上失真比较大,如下图的后面三个,这些不同频段的语音失真,会严重影响AEC效果,尽量不用采用这种喇叭。
喇叭使用的时候,要避免喇叭声音过大导致的麦克风信号削顶。
调试建议: 尽量不要用微型扬声器、超薄扬声器等共振频率较高的扬声器,该类单体低频失真大;扬声器后腔结构允许的话,加被动辐射器或导向管设计,可以增加低频,同时减小喇叭的非线性振动。
4.4 环境注意事项¶
减少机械噪声 在家用电器或机器人等产品设备中,风扇噪声和电机噪声引入的变量会导致麦克信号的底噪特别大,识别效果受较大影响。
调试建议:在该类设备中,要特别注意内部风扇、电机与麦克风的距离,如结构空间允许,可对麦克风单独做密封处理,防止内部传音。
4.5 麦克风与扬声器的位置关系¶
- 调试建议:麦克风与喇叭的位置关系,原则上在结构空间允许的条件下,麦克风需尽可能的远离喇叭位置,麦克风不超出喇叭朝向所在水平面,麦克风离喇叭越近,信噪比越低,麦克风失真的可能性越大,考虑结构大小建议麦克风离喇叭10cm左右,麦克风与喇叭的位置关系左右上下对AEC处理效果影响不大。
- 注意扬声器播放口背离麦克风,避免朝向麦克风。
5.调试效果的方法¶
图5-1为录音板采音时域效果,该图上可以看到原始的左声道数据(上半图)为目标语音和喇叭播放声音的混合,经过aec算法处理后,抑制喇叭播放的声音,提高目标语音的信噪比,如图5-1中右声道数据(下半图)所示。
下图5-2为同样该音频的频域显示,该结果为正常结果。
设置IIS输出参数为audio_pre_rslt_write_data((int16_t*)ref, (int16_t*)micl )时,输出参考信号数据和麦克风左声道采音数据,如图5-3,图中可以看到当有播放的时候参考信号有数据,无播放的时候,参考信号非常小接近为0。
图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和硬件作为参考,通过标准配件参考分模块分析具体原因。