AK5703的ALC

AKM5703是一款音频ADC,具有自动增益(ALC)功能,它的自动增益功能具体是指:当音量大于设定的界限时,ALC会把音量值往下拉,使之不破音(如下图所示),而当音量小于某个界限时,ALC会把音量值往上拉,

这里的最大值界限和最小值界限时可以设置的,如下图所示,一共有四个范围值可以选择

这里重点介绍下当音量值小于某个范围ALC往上拉的具体过程.因为当初在调试ALC时,由于对这个不太理解,寄存器配置错误,导致用了ALC之后底噪特别大.

首先看下图中的两个寄存器,IVAL和REF,IVAL就是数字增益,而REF是参考增益,当我们用ALC之后,首先5703会根据IVAL对音量进行放大,然后把放大后的值和我们的设定的最低界限进行比较,如果这个值大于我们设定的最低界限,那么

这时候我们的ALC就不会对音量进行上拉,但是如果放大了IVAL倍之后,音量值小于我们设定的最小的界限,那么ALC就会对音量进行上拉,上拉的倍数为:REF-IVAL,例如如果我们的IVAL设置的是10dB,而我们的REF设置的是30dB,那么我们的ALC就会

上拉20dB,所以有一个问题就是,如果我们不接入音频,而如果我们的设备底噪本来可能并不大,但是如果用了ALC之后,它检测到音量值没有到我们设定的最小的界限,那么就会把底噪进行放大,这个问题解决的方法就是把我们的IVAL和我们的REF的值设置成一样的,

这样当检测到音量值小于我们设定的界限之后,它也不会上拉,因为这时候REF-IVAL=0.

另外,还有一个问题就是,当检测到我们的音量值小于我们设定的界限,然后ALC对音量进行上拉时,它只管上拉(REF-IVAL)dB,不一定能拉到我们设定的界限,例如我们的IVAL设置的是10dB,而如果我们的REF设置的是11dB,那么ALC只会上拉1dB,这样的

上拉幅度不一定能达到我们设定的最小界限.

posted @ 2019-06-10 17:58  cumtchw  阅读(343)  评论(0编辑  收藏  举报