AFE(信号处理)

支持的芯片

概述

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

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

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

  • 1mic

  • 2mic_30mm

  • 2mic_50mm

  • 2mic_70mm

  • 3mic_50mm

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

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

不支持

硬件设计要求

麦克风单体性能推荐

麦克风建议优选全向性硅麦,一致性更好。

  • 灵敏度(sensitivity):模拟硅麦 ≥ -38dBV,数字硅麦 ≥ -26dBFS,±1.5dB

  • 信噪比(SNR):≥ 60dB

  • 总体谐波失真(THD):≤ 1%(1kHz)

  • 声学过载点(AOP):≥ 120dB SPL

喇叭单体性能推荐

  • 谐波失真(THD):额定功率下 100Hz ~ 200Hz THD≤5%,200Hz ~ 8kHz THD≤3%

麦克阵列设计建议

  • 2 个麦克风之间间距建议保持 3.0cm ~ 7.0cm,优选 5cm。

  • 所有麦克风收音口位于同一直线,该直线平行于水平面。

  • 麦克风朝向可以在朝上与朝前(朝向说话人)之间任意角度。

  • 推荐同一个阵列内的麦克应使用同一厂家的同一型号,不建议混用。

  • 麦克阵列中,各麦克的结构推荐采用相同的设计,以保证结构设计的一致性。

整机拾音性能要求

  1. 一致性

    • 频响一致性:自由场频谱(100Hz ~ 7kHz)响应波动 < 3dB。

    • 相位一致性:麦克风之间的相位差(1kHz) < 10°。

  2. 气密性

    • 外部喇叭播放,堵上麦克风与不堵上麦克风收音的音量差值(100Hz ~ 8kHz) > 15dB。

  3. 频谱无异常

    • 不应有异常的电噪声。

    • 不应有丢音。

  4. 频谱衰减

    • 7.5kHz 频率以下不应有明显的衰减。

  5. 频率混叠

    • 播放扫频信号(0Hz ~ 20kHz),16kHz 收音信号没有明显频率混叠。

整机播放回采性能要求

  1. 回采接入方式

    • 仅支持硬回采,不支持软回采。

  2. 回采接入位置

    • 回采位置推荐尽量靠近喇叭侧,需接在 EQ 之后,以规避音效导致的非线性。

  3. 回采增益

    • 设备喇叭最大音量播放时,回采信号不应截幅,建议参考峰值 -3dB ~ -6dB。

  4. 时延

    • 不要有时延。

  5. 总谐波失真

    • 设备喇叭最大音量播放时,100Hz THD≤10%,200Hz ~ 500Hz THD≤6%,500Hz ~ 8kHz THD≤3%。

  6. 气密性

    • 设备喇叭播放,堵上麦克风与不堵上麦克风收音的音量差值(100Hz ~ 8kHz) > 15dB。