Skip to main content

rtos自动增益(AGC)模块说明

功能说明

录音的增益共有三级,MICL增益,ALCL增益,ADCL数字增益。

ALCL模块中可以设置固定增益或者通过AGC模块自动控制ALCL增益。

image-20240813201715999

AGC模块将对低于最低音量阈值的声音每间隔一小段时间增加1.5db直到音量超过最低音量阈值或已经达到最高增益范围。

同理对于超过最高音量阈值的声音,会快速降低增益,直到小于最高音量阈值或已经达最低增益范围。

参数以及使用说明

c_codec = pcm_get("icodec-capture");

pcm_private_ctrl(c_codec, "agc_on", 1); // 配置alcl模块为agc自动增益

// range_max = n (0-0x7fff) 转换为db: 20lg(n/0x7fff)db
// 16422 为默认值,为满幅0x7fff的一半
pcm_private_ctrl(c_codec, "range_max", 16422); // 超出这个阈值agc会减低增益
// range_min = n (0-0x7fff) 转换为db: 20lg(n/0x7fff)db
pcm_private_ctrl(c_codec, "range_min", 8294); // 低于这个阈值agc会增高增益
// pgain_max [0-7] 最低 -13.5d 6db per step
pcm_private_ctrl(c_codec, "pgain_max", 7); // 最大的agc增益
// pgain_min [0-7] 最低 -18db 6db per step
pcm_private_ctrl(c_codec, "pgain_min", 0); // 最小的agc增益

调试方法与建议

调试应用

调试应用基于AD101开发板(含屏及触摸)开发,方便修改参数与查看效果,用户需要根据自己的开发环境作相应修改。

应用使用ad101_evb_v10_lvgl_nor_defconfig基本配置,使用到usb_gadget_uac1,确保如下配置已经勾选。

image-20240815205403056

小系统中应用在:example/driver/audio_agc_test_example.c编译该应用。

应用将开发板作为UAC录音设备,接入电脑能实时查看录到的音频,同时使用lvgl在屏幕上直接显示当前AGC增益值,也可以动态调整AGC相关参数。

使用audacity应用,选择录制设备为开发板,实时显示录制到的波形。

2024-08-20_14-41

选择录制设备为开发板

image-20240815170806189

通过电脑上的amixer或其他声音设置来设置开发板上的数字增益

image-20240815170806189

屏幕中显示AGC相关接口以及增益值

image-20240815170344964

上方从左到右分别设置最大增益范围,最小增益范围,最大音量阈值,最小音量阈值以及AGC开关功能,与AGC的控制接口对应。

调试建议

  1. 开启AGC功能,将数字增益置为0db pcm_private_ctrl(c_codec, "adcl_gain", 196);(196为ad10x平台0db增益时的值),此时录制到的声音就是AGC动态调节后的声音,可以在电脑上看到波形一段时间内的最大值是在1/2到1/4也就是range_max到range_min之间(或超出AGC调节的增益范围,则无法达到区间)。

  2. 为避免突然的冲击影响后续录制,模拟使用场景常见的声音冲击,在开启AGC功能后查看增益的变化以及后续对声音的影响,来确定最低增益pgain_min