AFE(信号处理)
支持的芯片
概述
AFE 是增强语音信号的音频信号处理模块,可以提高语音识别系统的鲁棒性或改善通信系统的信号质量。
在 AIVoice 中,AFE 算法包括以下子模块:
当前 SDK 中提供了以下五种麦克风阵型对应的算法库:
1mic
2mic_30mm
2mic_50mm
2mic_70mm
3mic_50mm
也可以通过定制服务提供其他麦克风阵列或性能优化。
AFE 的输出见 事件及回调信息 。
算法说明
流程框图
单麦克阵列
多麦克阵列
AFE 模式
AFE 包括两种模式,分别对应两种典型的应用场景,语音识别和语音通话。
应用场景 |
模式配置 |
模式说明 |
---|---|---|
语音识别 |
afe_mode = AFE_FOR_ASR |
当处理后数据用于语音识别或唤醒时,应配置为该模式。 该模式下,更关注语音损伤,对回声残留和底噪的容忍度较高。 |
语音通话 |
afe_mode = AFE_FOR_COM |
当用于语音通话场景时,应配置为该模式。 该模式下,更关注避免回声泄露,可接受一定语音损伤。 |
备注
语音通话模式下,外部接口支持 1mic/2mic,内部算法则仅支持 1mic。2mic 输入时内部调用 1mic 算法,使用 mic1 和 ref 路数据。
输入格式
单麦克阵列
双麦克阵列
三麦克阵列
输入音频的 格式 为 16kHz、16 bit、四通道(其中 3 个通道为 mic 数据,另 1 个通道为参考信号)。 若不需要 AEC 功能,则输入为三通道 mic 数据。
输入音频的 帧长 固定为 256 个点。
数据排列示意图如下:
若开启 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_array 和 ref_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。
所有麦克风收音口位于同一直线,该直线平行于水平面。
麦克风朝向可以在朝上与朝前(朝向说话人)之间任意角度。
推荐同一个阵列内的麦克应使用同一厂家的同一型号,不建议混用。
麦克阵列中,各麦克的结构推荐采用相同的设计,以保证结构设计的一致性。
整机拾音性能要求
一致性
频响一致性:自由场频谱(100Hz ~ 7kHz)响应波动 < 3dB。
相位一致性:麦克风之间的相位差(1kHz) < 10°。
气密性
外部喇叭播放,堵上麦克风与不堵上麦克风收音的音量差值(100Hz ~ 8kHz) > 15dB。
频谱无异常
不应有异常的电噪声。
不应有丢音。
频谱衰减
7.5kHz 频率以下不应有明显的衰减。
频率混叠
播放扫频信号(0Hz ~ 20kHz),16kHz 收音信号没有明显频率混叠。
整机播放回采性能要求
回采接入方式
仅支持硬回采,不支持软回采。
回采接入位置
回采位置推荐尽量靠近喇叭侧,需接在 EQ 之后,以规避音效导致的非线性。
回采增益
设备喇叭最大音量播放时,回采信号不应截幅,建议参考峰值 -3dB ~ -6dB。
时延
不要有时延。
总谐波失真
设备喇叭最大音量播放时,100Hz THD≤10%,200Hz ~ 500Hz THD≤6%,500Hz ~ 8kHz THD≤3%。
气密性
设备喇叭播放,堵上麦克风与不堵上麦克风收音的音量差值(100Hz ~ 8kHz) > 15dB。