Mic增益调试
EQ工具
Sifli_EQ EQ工具可以调试数字麦增益,修改的变量为drv_audprc.c里的g_adc_volume,这个变量默认值为0,减小可以降低mic的增益,通话时,一般的回声消除算法都是让mic采样值在3k~5k之间,mic的采样值可以用dump工具抓取. mic的平台软件目前都设置的为16位,饱和值在-32768~+32767, 有时候mic的增益调低了,采集的mic容易在较小值位置饱和,影响回声消除。 这时可以把g_adc_volume改位0,调节rough volume. 代码在bf0_hal_audcodec.c(56x/58x platform)或bf0_hal_audcodec_m.c (52x/57x platform) 这里rough vol为 0xc, 把 ADC_CH0_CFG_ROUGH_VOL 对应的值减小来解决,可以从0xc改为0xa, 通过适当降低rough vol,这个降低这个数字增益改善饱和值过低。 ROUGH_VOL的值步长为6db,设置的值对应关系如下:
0 ----- -60db
1 ----- -54db
...
...
0xa ----- 0db
0xb ----- 6db
...
0xf ----- 30db
FINE_VOL的值为0 ~ 0xc,对应0~6db, 步长为0.5db
//56x/58x的代码
hacodec->Instance_lp->ADC_CH0_CFG = (1 << AUDCODEC_LP_ADC_CH0_CFG_ENABLE_Pos) |
(0 << AUDCODEC_LP_ADC_CH0_CFG_HPF_BYPASS_Pos) |
(0x7 << AUDCODEC_LP_ADC_CH0_CFG_HPF_COEF_Pos) |
(0 << AUDCODEC_LP_ADC_CH0_CFG_STB_INV_Pos) |
(0 << AUDCODEC_LP_ADC_CH0_CFG_DMA_EN_Pos) |
(0xc << AUDCODEC_LP_ADC_CH0_CFG_ROUGH_VOL_Pos) |
(0 << AUDCODEC_LP_ADC_CH0_CFG_FINE_VOL_Pos) |
(1 << AUDCODEC_LP_ADC_CH0_CFG_DATA_FORMAT_Pos);
//52x/57x
hacodec->Instance->ADC_CH0_CFG = (1 << AUDCODEC_ADC_CH0_CFG_ENABLE_Pos) |
(0 << AUDCODEC_ADC_CH0_CFG_HPF_BYPASS_Pos) |
(0x7 << AUDCODEC_ADC_CH0_CFG_HPF_COEF_Pos) |
(0 << AUDCODEC_ADC_CH0_CFG_STB_INV_Pos) |
(0 << AUDCODEC_ADC_CH0_CFG_DMA_EN_Pos) |
(0xc << AUDCODEC_ADC_CH0_CFG_ROUGH_VOL_Pos) |
(0 << AUDCODEC_ADC_CH0_CFG_FINE_VOL_Pos) |
(1 << AUDCODEC_ADC_CH0_CFG_DATA_FORMAT_Pos);
如果还是饱和,就修改模拟ADC1_CFG1_GC对应的值减小,这个不建议, 一般不该模拟增益,代码中中搜索ADC1_CFG1,把对应的值减小一点
ADC1_CFG1 |= (0x1E << AUDCODEC_LP_ADC1_CFG1_GC_Pos);