AFE(信号处理)

简介

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

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

  • AEC(声学回声消除)

  • BF(波束成形)

  • NS(噪声抑制)

  • AGC(自动增益控制)

  • SSL(声源定位)

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

  • 1mic

  • 2mic_30mm

  • 2mic_50mm

  • 2mic_70mm

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

算法框图

  • 单麦克阵列

../../../rst_ai/aivoice/aivoice_afe/figures/afe_flow_1mic.svg
  • 双麦克阵列

../../../rst_ai/aivoice/aivoice_afe/figures/afe_flow_2mic.svg

输入音频

  • 单麦克阵列

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

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

    • 数据排列示意图如下:

      ../../../rst_ai/aivoice/aivoice_afe/figures/afe_input_mod_0.png
  • 双麦克阵列

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

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

    • 数据排列示意图如下:

      ../../../rst_ai/aivoice/aivoice_afe/figures/afe_input_mod_1.png

备注

当不需要 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 模式配置

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

应用场景

模式配置

模式说明

语音识别

afe_mode = AFE_FOR_ASR

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

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

语音通话

afe_mode = AFE_FOR_COM

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

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

备注

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

模块开关配置

  • AEC(回声消除)

    • 模块说明:用于消除麦克风拾取的设备自身播放的声音,即回声。

    • 开启条件:当设备带喇叭,有带回声场景时,应开启 AEC 模块。

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

      ../../../rst_ai/aivoice/aivoice_afe/figures/afe_aec_spectrogram.png
  • RES(残留回声抑制)

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

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

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

      • 语音通话:除有特殊需求外,需要开启 RES 模块。

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

      ../../../rst_ai/aivoice/aivoice_afe/figures/afe_aec_res_spectrogram.png
  • NS(噪声抑制)

    • 模块说明:用于抑制环境噪声,包括信号处理和神经网络方法两种模式,可通过参数 ns_mode 进行配置。信号处理方法主要对稳态噪声具有很好的抑制效果,神经网络方式则还可以处理部分非稳态噪声。 神经网络方法仅支持语音通话模式

    • 开启条件:不同 AFE 模式下,开启条件不同。

      • 语音识别: 当使用场景环境噪声较高或设备本身会发出较大稳态噪声,推荐开启 NS 模块。

      • 语音通话: 除有特殊需求外,需要开启 NS 模块。

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

      ../../../rst_ai/aivoice/aivoice_afe/figures/afe_ns_spectrogram.png
  • AGC(自动增益控制)

    • 模块说明:用于调整输出音频的幅值。 调整 agc_fixed_gain 参数时,应保证在语音音量最大情况下,处理后的信号不截幅

    • 开启条件:不同 AFE 模式下,开启条件不同。 自适应 AGC 仅支持语音通话模式

      • 语音识别:当输出信号幅度偏低明显影响识别或唤醒效果时,可以开启 AGC 模块,施加适当的增益。

      • 语音通话:除有特殊需求外,需开启 AGC 模块和自适应 AGC。

  • SSL(声源定位)

    • 模块说明:用于计算目标说话人的方向。 仅支持双麦克阵列,输出角度范围为 0° ~ 180°

    • 开启条件:当需要获取说话人方向时,可以开启 SSL 模块。 SSL 模块仅支持语音识别模式

硬件设计要求

麦克风单体性能推荐

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

  • 灵敏度(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。