9.16. AEC回声消除算法
概述
提供回声消除算法的配置和使用说明
9.16.1. 使用说明
进入相应的工程 /include/app_config.h
,开启宏 CONFIG_AEC_ENC_ENABLE
,在请求编码服务时 AUDIO_ENC_OPEN
增加以下代码
struct aec_s_attr aec_param = {0};
req.enc.aec_attr = &aec_param;
req.enc.aec_enable = 1;
extern void get_cfg_file_aec_config(struct aec_s_attr * aec_param);
get_cfg_file_aec_config(&aec_param);
#if 0
aec_param.ANS_NoiseLevel = 2.2e3f; //初始噪声水平,用来加速降噪收敛,跟 mic 信号的信噪比有关。 Mic 信号信噪比高, 该值可以小一点, 反之则需要稍微大一点。default: 2.2e3f(0 ~ 32767)
#endif
if (aec_param.EnableBit == 0) {
req.enc.aec_enable = 0;
req.enc.aec_attr = NULL;
}
#if defined CONFIG_ALL_ADC_CHANNEL_OPEN_ENABLE && defined CONFIG_AISP_LINEIN_ADC_CHANNEL && defined CONFIG_AEC_LINEIN_CHANNEL_ENABLE
if (req.enc.aec_enable) {
aec_param.output_way = 1; //1:使用硬件回采 0:使用软件回采
if (aec_param.output_way) {
req.enc.channel_bit_map |= BIT(CONFIG_AISP_LINEIN_ADC_CHANNEL); //配置回采硬件通道
if (CONFIG_AISP_LINEIN_ADC_CHANNEL < CONFIG_PHONE_CALL_ADC_CHANNEL) {
req.enc.ch_data_exchange = 1; //如果回采通道使用的硬件channel比MIC通道使用的硬件channel靠前的话处理数据时需要交换一下顺序
}
}
}
#endif
if (req.enc.sample_rate == 16000) {
aec_param.wideband = 1;
aec_param.hw_delay_offset = 50;
} else {
aec_param.wideband = 0;
aec_param.hw_delay_offset = 75;
}
server_request(__this->enc_server, AUDIO_REQ_ENC, &req);
Note
外部依赖库libaec.a、libdns.a、libjlsp.a,工程需要添加
apps/common/jl_math/jl_fft.c
9.16.2. 查看效果
使用打断唤醒或者蓝牙通话时,想查看mic的数据回声消除效果如何时
1.打断唤醒:在app_config.h中打开宏 #define WIFI_PCM_STREAN_SOCKET_ENABLE //打开打断唤醒pcm音频流局域网传输工具,设备与PC电脑处理同一局域网,打开SDK中sdk_tool目录下
局域网传送PCM流测试工具.exe
工具,输入设备ip4地址(打印中可查看)和电脑的ip4地址,有唤醒时会在sdk_tool目录下生成test.pcm文件,使用音频分析软件按4通道打开,signed 16-bit PCM 小尾端,打断唤醒采样率(SDK中默认16k)。四通道分别为两个MIC通道数据(单MIC的话一个通道数据为空),一个通道为回采DAC,一个通道为AEC回声消除后数据2.蓝牙通话:在master的WIFI_STORY_MACHINE工程代码中apps/wifi_story_machine/bt_ble/bt_decode.c,打开宏#define AEC_MIX_DATA_TO_SD 0 //将蓝牙通话mic、dac和aec的混合数据写到sd卡里,3channel(mic,dac,aec)
9.16.3. 参数调试
打开编译前配置工具,AC791N_配置工具入口:
cpu/wl82/tools/AC791N_config_tool/AC791N_配置工具入口(Config Tools Entry).jlxproj)
,选择“编译前配置工具”
点击通话参数配置,通过点击ON/OFF按钮选择打开或关闭需要的功能模块,AGC模块暂时不支持使用
点击其中某一个模块,可调整具体参数, 具体配置参数描述, 请查看
doc/stuff/JL通话调试手册.pdf
参数设置完成后,点击保存成bin文件,将生成的cfg_tool.bin文件复制到
cpu\wl82\tools
目录,重新烧录即可生效
9.16.4. 常见问题
回声消除算法支持哪些采样率?
答: AEC目前只支持采样率8000或16000,且只支持单通道。
回声消除打开后发现无效果?
答: 检查AEC是否打开成功,aec_encoder任务是否有加到app_main.c的任务列表,任务是否创建成功,MIC配置是否正确。
回声消除后还是有一点回声未能完全消掉,应该如何优化?
答: 考虑到外接功放模块的特性,可采用硬件差分回采电路,效果比纯软件回采DAC输出数据更好。