AEC(回声消除)

支持的芯片

概述

回声消除是 AFE 的功能之一,用于消除麦克风拾取的设备自身播放的声音,即回声。

在支持打断唤醒、打断对话等功能的产品中,需要开启回声消除。

算法说明

AIVoice 中的完整回声消除算法包括线性回声消除(AEC)和残留回声抑制(RES)两个子模块:

  • AEC(回声消除)

    • 模块说明:AEC 模块的核心,负责线性部分的回声消除处理。

    • 开启条件:当设备带喇叭,并且存在回声干扰的应用场景时,应开启 AEC 模块。

    • 模块开启前后频谱对比如下:

      ../../../_images/afe_aec_spectrogram.png
  • RES(残留回声抑制)

    • 模块说明:为 AEC 模块中的非线性处理子模块,用于进一步抑制回声残留。 当该模块开启时回声抑制更强,但同时语音损伤也会增加

    • 开启条件:不同 AFE 模式下,开启条件不同。 当 AEC 模块关闭时,该模块无法单独开启

      • 语音识别:当喇叭播放时非线性较强,回声残留较高时,可以开启 RES 模块。

      • 语音通话:通常情况下(除有特殊需求外),需要开启 RES 模块以确保通话清晰度。

    • 模块开启前后频谱对比如下:

      ../../../_images/afe_aec_res_spectrogram.png

配置

完整的 AFE 配置文件为 ${aivoice_lib_dir}/include/aivoice_afe_config.h,其中 AEC 相关配置为:

int ref_num;                            // 参考通道数量,必须为 0 或 1。若 ref_num=0 则禁用 AEC

afe_mode_e afe_mode;                    // AFE 模式,用于 ASR(语音识别)或语音通话。
bool enable_aec;                        // AEC(声学回声消除)模块开关

// AEC 模块参数
afe_aec_mode_e aec_mode;                // AEC 模式,传统信号处理或神经网络。当前版本不支持神经网络
int aec_enable_threshold;               // AEC 的参考信号幅度阈值,取值范围[0, 100]。
                                        // 数值越大表示使能 AEC 的最小回声量越大
bool enable_res;                        // AEC 残余回声抑制模块开关
afe_aec_filter_tap_e aec_cost;          // 资源消耗模式,消耗越高滤波器长度越长,回声消除效果越好
afe_aec_res_aggressive_mode_e res_aggressive_mode;  // AEC 强度,强度越高残余回声抑制越强,但失真也越大

备注

当不需要 AEC 功能时, 相关参数应配置为:enable_aec = false, ref_num = 0。