概述

AFE 是增强语音信号的音频信号处理模块,可以提高语音识别系统的鲁棒性或改善通信系统的信号质量。

在 AIVoice 中,AFE 算法包括以下子模块:

当前 SDK 中提供了以下五种麦克风阵型对应的算法库:

  • 1mic

  • 2mic_30mm

  • 2mic_50mm

  • 2mic_70mm

  • 3mic_50mm

也可以通过定制服务提供其他麦克风阵列或性能优化。

备注

其中麦克风阵型 3mic_50mm 中的间距 50mm 指的是相邻麦克风之间的距离。

AFE 的输出见 事件及回调信息

算法说明

AFE 流程框图

  • 单麦克阵列

afe_flow_1mic
  • 多麦克阵列

afe_flow_multi_mic

AFE 模式

AFE 包括两种模式,分别对应两种典型的应用场景,语音识别和语音通话。

应用场景

模式配置

模式说明

语音识别

afe_mode = AFE_FOR_ASR

当处理后数据用于语音识别或唤醒时,应配置为该模式。

该模式下,更关注语音损伤,对回声残留和底噪的容忍度较高。

语音通话

afe_mode = AFE_FOR_COM

当用于语音通话场景时,应配置为该模式。

该模式下,更关注避免回声泄露,可接受一定语音损伤。

备注

语音通话模式下,外部接口支持 1mic/2mic,内部算法则仅支持 1mic。2mic 输入时内部调用 1mic 算法,使用 mic1 和 ref 路数据。

输入格式

  • 单麦克阵列

    • 输入音频的 格式 为 16kHz、16 bit、双通道(其中 1 个通道为 mic 数据,另 1 个通道为参考信号)。 若不需要 AEC 功能,则输入为单通道 mic 数据

    • 输入音频的 帧长 固定为 256 个点。

    • 数据排列示意图如下:

      ../../../../_images/afe_input_mod_0.png
  • 双麦克阵列

    • 输入音频的 格式 为 16kHz、16 bit、三通道(其中 2 个通道为 mic 数据,另 1 个通道为参考信号)。 若不需要 AEC 功能,则输入为两通道 mic 数据

    • 输入音频的 帧长 固定为 256 个点。

    • 数据排列示意图如下:

      ../../../../_images/afe_input_mod_1.png
  • 三麦克阵列

    • 输入音频的 格式 为 16kHz、16 bit、四通道(其中 3 个通道为 mic 数据,另 1 个通道为参考信号)。 若不需要 AEC 功能,则输入为三通道 mic 数据

    • 输入音频的 帧长 固定为 256 个点。

    • 数据排列示意图如下:

      ../../../../_images/afe_input_mod_2.png
    • 若开启 SSL 模块,则输入数据对应的麦克风位置顺序必须为逆时针,请参考 - SSL(声源定位)

备注

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

配置

配置参数定义

AFE 配置包括麦克风阵列、模式、子模块开关等。

typedef struct afe_config{

    // AFE 通用参数
    afe_mic_geometry_e  mic_array;          // 麦克风阵列类型。请确保选择匹配的资源库
    int ref_num;                            // 参考通道数量,必须为 0 或 1。若 ref_num=0 则禁用 AEC
    int sample_rate;                        // 采样率(Hz),必须为 16000
    int frame_size;                         // 帧长(采样点数),必须为 256

    afe_mode_e afe_mode;                    // AFE 模式,用于 ASR(语音识别)或语音通话。
    bool enable_aec;                        // AEC(声学回声消除)模块开关
    bool enable_ns;                         // NS(噪声抑制)模块开关
    bool enable_agc;                        // AGC(自动增益控制)模块开关
    bool enable_ssl;                        // SSL(声源定位)模块开关

    // 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 强度,强度越高残余回声抑制越强,但失真也越大

    // NS 模块参数
    afe_ns_mode_e ns_mode;                  // NS 模式,信号处理或神经网络方法。神经网络方法仅支持语音通话模式
    afe_ns_cost_mode_e ns_cost_mode;        // 低资源模式表示单通道降噪,降噪效果比多通道差
    afe_ns_aggressive_mode_e ns_aggressive_mode;   // 降噪强度,强度越高稳态噪声抑制越强,但失真也越大

    // AGC 模块参数
    int agc_fixed_gain;                     // AGC 固定增益(dB),应用于 AFE 的输出,取值范围[0, 18]
    bool enable_adaptive_agc;               // 自适应 AGC 开关。仅支持语音通话模式。

    // SSL 模块参数
    float ssl_resolution;                   // SSL 分辨率(角度)
    int ssl_min_hz;                         // SSL 模块的最小频率(Hz)
    int ssl_max_hz;                         // SSL 模块的最大频率(Hz)
} afe_config_t;

如果需要修改麦克风阵列,请确保配置和 AFE 资源库做对应的修改。详情请参考 ${aivoice_lib_dir}/include/aivoice_afe_config.h

注意

请确保 mic_arrayref_num 两个参数与 AFE 输入音频匹配。

预设参数

针对不同阵列和 AFE 模式,${aivoice_lib_dir}/include/aivoice_afe_config.h 中提供了相应的预设参数:

麦克风阵列

语音识别模式

语音通话模式

1mic

AFE_CONFIG_ASR_DEFAULT_1MIC

AFE_CONFIG_COM_DEFAULT_1MIC

2mic30mm

AFE_CONFIG_ASR_DEFAULT_2MIC30MM

AFE_CONFIG_COM_DEFAULT_2MIC30MM

2mic50mm

AFE_CONFIG_ASR_DEFAULT_2MIC50MM

AFE_CONFIG_COM_DEFAULT_2MIC50MM

2mic70mm

AFE_CONFIG_ASR_DEFAULT_2MIC70MM

AFE_CONFIG_COM_DEFAULT_2MIC70MM

3mic50mm

AFE_CONFIG_ASR_DEFAULT_3MIC

不支持

硬件设计要求

请参考 声学硬件设计要求