PCM:
PCM模数转换时,具体的模拟量是如何确定为某一个数字值的?以前一直认为是这样的:比如模拟量(电压)是3V,则对应的数字量是3。其实这个形而上学的认识错了。
ADC时,存在一个参考电压,此参考电压就是用来确定模拟量对应的数字量的,详细可参考 http://wenku.baidu.com/link?url=ZnvwHHE10-0UZ8hPRvLczj56dEQlblRAkrW5_35BQVg8g_VRVXGKZNpc58m8zPm0LHJA-ERkoiNSJ2noHTIngHx5bazjUdAzkKcmHecmktu 。尤其第6、10、11、12,很能说明问题。
音频基准电平浅析 https://www.cnblogs.com/sys-engineer/archive/2012/09/18/2691001.html 这篇文章,讲的比较透彻:
我国国家标准规定,数字基准电平-20dBFS对应模拟信号的+4dBu,即当输入+4dBu幅度的sine模拟音频信号时,信号经过运算放大器调整,进入ADC采样输出的数字信号编码值应该为-20dBFS。
注:
1 : 0 dBFS 对应ADC最大量程,编码值为0x7FFF,请参考PCM编码相关标准。
2 : n dBFS = 20 * log( x / 0x7FFF ); 对于m bit采样adc,n = 20log(x / 2的(n-1)次方)
3 : n dBu = 20 * log( v / 0.775 );
实际上确定了dBu,就确定了输入电压的值,+4dBu,对应的模拟输入电压为:1.23V。而直到了dBFS,也就知道了对应的二进制编码,-20dBFS,对应的编码有2个,0x0CCD和0xF333,为什么会有两个呢?因为模拟输入电压是交流的,相同的值,如果电压极性相反,那就一个正值一个负值,数字是相同的。负值是采用补码表示的。而0xF333正好是-0x0CCD的补码表示。
有了+4dBu对应 -20dBFS这个基准,就能计算出任何一个输入信号的编码值,比如对于+5dBu的输入,则对应-19dBFS,编码为0x0E5D,当然还有一个对应的补码形式的负值。
同时一旦确定了这个基准,那么,输入端能接受的最大输入电压也就确定了:最大输入电压应该对应0dBFS,此时对应的编码时0x7FFF,也就是24dBu,可以计算出此时输入电压为12.28V。也就是说,对于一个麦克风系统,如果其输出电压超过12.28V,那么,PCM数字化后,信号就会失真。这也就是为什么我们对麦克风大吼的话,其输出在最大音量处会失真的原因。
G711压缩算法: