通过本篇文章你将了解到:
降噪方案的音频链路和工作原理
AGC、DRC、EQ等各个算法模块的使用和参数调节
CAE全称:麦克风阵列语音增强
CAE算法包含的基本功能:
回声消除功能开关:cae_aec/CAE_PARAM_AEC_SWITCH,
1 打开回声消除,
0 关闭回声消除。
代码接口:set_cae_aec_switch:设置算法aec 回消(AEC模块关闭时,ES模块也会自动关闭)
算法后处理参数:
cae_pf/CAE_PARAM_PF_SWITCH,
1 打开后处理,
0 关闭后处理
打开后处理参数会加强回声消除能力,但是同时也会让双讲效果降低。
用户正常情况下无需调整,代码暂未提供接口;
targetLevelDbfs:AGC增益控制目标幅值
limiterLevelDbfs:AGC增益控制最大幅值
lowLevelEng:小信号阈值,值越大,表示低于该值的小信号(小声说话)越难被agc放大。
secondLowLevelEng:增益系数阈值,低于secondLowLevelEng时,增益系数不会在继续增大,会保持当前增益值不变,secondLowLevelEng的值必须比lowLevelEng的值大。
示例配置:
"targetLevelDbfs": 10,
"limiterLevelDbfs": 9,
"lowLevelEng": 2500,
"secondLowLevelEng": 4000
代码接口:set_cae_param_agc_config,设置算法agc参数。
limiterLevelDbfs和targetLevelDbfs成对调整,
lowLevelEng和secondLowLevelEng成对调整,
limiterLevelDbfs配置的数字必须小于targetLevelDbfs,数字越小,幅值越大,
调整小信号的时候,主要调整lowLevelEng参数来调整agc,secondLowLevelEng做辅助,一般保持secondLowLevelEng比lowLevelEng的值大即可。
如上图所示,AGC整体幅值控制在-10db~-9db范围,整体幅值趋于平稳,有效改善进场远场声音信号幅值差异较大问题。
算法降噪开关:
cae_nr/CAE_PARAM_NR_SWITCH,
1 打开降噪开关,
0 关闭降噪开关
打开降噪开关,算法降噪模块生效,关闭降噪开关,算法关闭降噪模块
代码接口:set_cae_nr_switch_state
可调参数:cae_nn_denoise_floor/CAE_PARAM_NR_FLOOR
可调范围:0~1000
0最强,1000最弱
默认配置:
cae_nn_denoise_floor:0
代码接口:set_cae_nn_denoise_floor
键盘敲击噪声环境下,噪声抑制功能打开和关闭前后对比:
关闭:
打开:
从上图对比可以看到,当噪声抑制功能打开后,键盘敲击噪声被很好的抑制了。
什么是混响?
混响,是在一个空间内,声源停止发音后,声音继续存在、反射的声学现象。即直达声与经过多次反射的声音叠加在一起,会影响语音的清晰度和可懂度。
去混响模块开关:
cae_der/CAE_PARAM_DER_SWITCH
1:打开去混响模块
0:关闭去混响模块
默认配置:
cae_der: 1
代码接口:set_cae_param_der_switch
CAE关键能力参考指标:
混响能力:
降噪能力
回声消除能力:
EQ又称为均衡器,用于调节音调,补偿高、中、低音的频率。
安装Spyder软件
辅助工具下载Spyder下载
(点击自动下载)
eq基础文件
eq_param.py
关键代码段:
def SEND_PATH():
N = 256;
FS = 16000;
X = np.arange(N)
for i in range(0, N):
X[i] = i*((FS/2)/N);
param_ba = []
b, a, ba, w, h0 = eq_param('peaking', N, FS, 2500, -5, 1); param_ba += ba;
b, a, ba, w, h1 = eq_param('peaking', N, FS, 7500, 3, 1); param_ba += ba;
b, a, ba, w, h2 = eq_param('peaking', N, FS, 200, -2, 2); param_ba += ba;
h = h0 * h1 * h2
response_plot('', X, h);
log_file(h)
log_param_ba(param_ba)
EQ曲线
EQ基础文件通过Spyder可以预览曲线图
导入文件:
曲线图
EQ调节示例
上行EQ曲线不达标示例:
调整方向:
针对200~400HZ频段和5K以上频段进行调整,本示例通过peak尖峰滤波和high shelf高架滤波器对曲线进行调整。
默认参数:
b, a, ba, w, h0 = eq_param('peaking', N, FS, 2500, -5, 1); param_ba += ba;
b, a, ba, w, h1 = eq_param('peaking', N, FS, 7500, 3, 1); param_ba += ba;
b, a, ba, w, h2 = eq_param('peaking', N, FS, 200, -2, 2); param_ba += ba;
默认EQ参数曲线:
调整后参数
b, a, ba, w, h0 = eq_param('peaking', N, FS, 220, 12, 4); param_ba += ba;
b, a, ba, w, h1 = eq_param('peaking', N, FS, 320, 9, 4); param_ba += ba;
b, a, ba, w, h2 = eq_param('peaking', N, FS, 900, 6, 3); param_ba += ba;
b, a, ba, w, h3 = eq_param('peaking', N, FS, 1460, -2, 4); param_ba += ba;
b, a, ba, w, h4 = eq_param('peaking', N, FS, 3400, -6, 3); param_ba += ba;
b, a, ba, w, h5 = eq_param('peaking', N, FS, 5450, 6, 4); param_ba += ba;
b, a, ba, w, h6 = eq_param('HighShelf', N, FS, 6500, 15, 1); param_ba += ba;
调整后EQ参数曲线:
调整后上行音频曲线
滤波器接口:
eq_param(filter_type, N, fs, fc, gain, Q):
Args:
filter type:滤波器类型
fs: Sampling frequency
fc: Center frequency 目标频点
gain: Gain 增益(值越大幅值约高)
Q: Q factor (Q值越大频弧度越大)
常用滤波器:
allpass :全通滤波器
bandpass:带通滤波器,允许一定频率内通过。
notch filter:陷波滤波器,压制中心频率的增益和频率响应。
Lowpass(high-cut):低通滤波器
highpass(low-cut):高通滤波器
low shelf:低架滤波器,切断中心频率以下的频率:可调节增益。
high shelf:高架滤波器,切断中心频率以上的频率:可调节增益。
peak(Bell):尖峰滤波,拉高中心频率增益和频率响应。
替换EQ头文件到固件编译烧录
将eq_param.py运行生成的头文件eq_param.h替换源码src/algos/eq_param.h后编译烧录即可生效。
下行EQ调节目前聆思提供便捷可视化的调节工具,点击跳转工具及使用文档链接(如跳转页面无法正常显示,请联系聆思FAE开通权限)。
如下图所示:
最后通过可视化工具调节完毕后,导出参数(bin文件),提供给聆思FAE,由聆思FAE集成到固件respak.bin中,后续烧录该respak.bin到设备上即可生效。
DRC 基本信息:
Dynamic Range Control (DRC)动态范围控制提供压缩和放大能力,可以使声音听起来更柔和或更大声,即一种信号幅度调节方式.
DRC 可以做的事情:
DRC的增益调整基本上是三段:对底噪,中等幅度信号,幅度较大的信号的三段不同的处理,比如:
底噪:Cutoff,attenuation
中等幅度信号:Expander
幅度较大,防止削顶的:Limiter
以上是DRC的基本信息。
在会议降噪项目中, DRC的调整,聆思亦提供便捷可视化调节工具(与上述下行EQ调试的工具一致)供用户调试使用,点击跳转工具及使用文档链接(如跳转页面无法正常显示,请联系聆思FAE开通权限)。
如下图所示:
最后通过可视化工具调节完毕后,导出参数(bin文件),提供给聆思FAE,由聆思FAE集成到固件respak.bin中,后续烧录该respak.bin到设备上即可生效。
验收指标示例:
播放1KHZ 0db 喇叭输出的额定功率:2W
播放1KHZ -6db 喇叭输出额定功率:2W
DRC需要把喇叭最高的输出功率控制在2W以内
DRC曲线调节步骤:
1.确定DRC压制的临界点
2.确定临界点的坐标
3.确定小信号放大幅度
以5端DRC为例,当确定DRC的抑制临界点之后,可以对临界点之前的音频段进行调节:
{
"dot_x":-40,
"dot_y":-40,
"dot_w":0
},
{
"dot_x":-20,
"dot_y":-17,
"dot_w":0
},
{
"dot_x":-6,
"dot_y":-6,
"dot_w":0
},
同样调节y轴的值,达到增大的目标。
SPK音量软件调节:
uac_request.c中
#define OUT_DB_MAX (-1.0f) // +6 dB //FIXME:
#define OUT_DB_MIN (-127.f) // -73 dB //FIXME:
#define OUT_DB_RES 0.1 // 1 dB //FIXME:
#define OUT_DB_DEF (-8.0f) // 1 dB //FIXME:
理论上OUT_DB_MAX最大值为0,当音量值设置为0后依然无法达到音量分贝要求,则需要调整功放电路硬件提高输出功率。