9.15. 回声消除算法

概述

提供回声消除算法的配置和使用说明

9.15.1. 使用说明

进入相应的工程 /include/app_config.h ,开启宏 CONFIG_AEC_ENC_ENABLE,在请求编码服务时 AUDIO_ENC_OPNE 增加以下代码

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 (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.15.2. 参数调试

  • 打开编译前配置工具,AC791N_配置工具入口: cpu/wl82/tools/AC791N_config_tool/AC791N_配置工具入口(Config Tools Entry).jlxproj) ,选择“编译前配置工具”

  • 点击通话参数配置,通过点击ON/OFF按钮选择打开或关闭需要的功能模块,AGC模块暂时不支持使用

  • 点击其中某一个模块,可调整具体参数

  • 参数设置完成后,点击保存成bin文件,将生成的cfg_tool.bin文件复制到 cpu\wl82\tools 目录,重新烧录即可生效

9.15.3. 常见问题

  • 回声消除算法支持哪些采样率?

    答: AEC目前只支持采样率8000或16000,且只支持单通道。

  • 回声消除打开后发现无效果?

    答: 检查AEC是否打开成功,aec_encoder任务是否有加到app_main.c的任务列表,任务是否创建成功,MIC配置是否正确。

  • 回声消除后还是有一点回声未能完全消掉,应该如何优化?

    答: 考虑到外接功放模块的特性,可采用硬件差分回采电路,效果比纯软件回采DAC输出数据更好。