G711原理
G.711是国际电信联盟ITU-T定制出来的一套语音压缩标准,它代表了对数PCM(logarithmic pulse-code modulation)抽样标准,是主流的波形声音编解码标准,主要用于电话。
- 主要用脉冲编码调制对音频采样,采样率为8k每秒。它利用一个 64Kbps 未压缩通道传输语音讯号。
- 压缩率为1:2, 即把16位成8位。
G.711 标准下主要有两种压缩算法。
- u-law algorithm (又称u-law, ulaw, mu-law),主要运用于北美和日本。
- A-law algorithm,主要运用于欧洲和世界其他地区。特别设计用来方便计算机处理的。
G.711将14bit(uLaw)或者13bit(aLaw)采样的PCM数据编码成8bit的数据流,播放的时候在将此8bit的数据还原成14bit或者13bit进行播放,不同于MPEG这种对于整体或者一段数据进行考虑再进行编解码的做法,G711是波形编解码算法,就是一个sample对应一个编码,所以压缩比固定为:
- 8/14 = 57% (uLaw)
- 8/13 = 62% (aLaw)
3. G.711原理
G.711是将语音模拟信号进行一种非线性量化, 详细的资料可以在ITU 上下到相关的spec 。下面主要列出一些性能参数:
G.711(PCM方式)
- 采样率:8kHz
- 信息量:64kbps/channel
- 理论延迟:0.125msec
- 品质:MOS值4.10
算法原理:
A-law的公式如下,一般采用A=87.6
image
画出图来则是如下图,用x表示输入的采样值,F(x)表示通过A-law变换后的采样值,y是对F(x)进行量化后的采样值。
image
由此可见
- 在输入的x为高值的时候,F(x)的变化是缓慢的,有较大范围的x对应的F(x)最终被量化为同一个y,精度较低。
- 相反在低声强区域,也就是x为低值的时候,F(x)的变化很剧烈,有较少的不同x对应的F(x)被量化为同一个y。意思就是说在声音比较小的区域,精度较高。
对应反量化公式(即上面函数的反函数):
image
3.1 G.711A(A-LAW)压缩十三折线法
G.711A输入的是13位(S16的高13位),这种格式是经过特别设计的,便于数字设备进行快速运算。
- 取符号位并取反得到s。
- 获取强度位eee,获取方法如下图所示
- 获取高位样本位wxyz
- 组合为seeewxyz,将seeewxyz逢偶数为取补数。
A-law如下表计算。
- 第一列是采样点,共13bit,最高位为符号位。
- 对于前两行,折线斜率均为1/2,跟负半段的相应区域位于同一段折线上。
- 对于3到8行,斜率分别是1/4到1/128,共6段折线。
- 总共13段折线,这就是所谓的A-law十三段折线法。
转换表:
线性输入代码 压缩码
s0000000wxyz`a s000wxyz
s0000001wxyz`a s001wxyz
s000001wxyz`ab s010wxyz
s00001wxyz`abc s011wxyz
s0001wxyz`abcd s100wxyz
s001wxyz`abcde s101wxyz
s01wxyz`abcdef s110wxyz
s1wxyz`abcdefg s111wxyz
其中s是符号位,并倒引号标记后的位`被丢弃。
示例:
输入pcm数据为1234,二进制对应为(0000 0100 1101 0010)
二进制变换下排列组合方式(0 00001 0011 010010)
1、获取符号位最高位为0,取反,s=1
2、获取强度位00001,查表,编码制应该是eee=011
3、获取高位样本wxyz=0011
4、组合为10110011,逢偶数为取反为11100110,得到E6
3.2 G.711u(u-law)
使用在北美和日本,输入的是14位,编码算法就是查表,计算出:基础值+平均偏移值
μ-law的公式如下,μ取值一般为255
image
image
相应的μ-law的计算方法如下表
示例:
输入pcm数据为1234
1、取得范围值,查表得 +2014 to +991 in 16 intervals of 64
2、得到基础值为0xA0
3、得到间隔数为64
4、得到区间基本值2014
5、当前值1234和区间基本值差异2014-1234=780
6、偏移值=780/间隔数=780/64,取整得到12
7、输出为0xA0+12=0xAC
3.2 A-law和u-law对比
A-law和u-law画在同一个坐标轴中就能发现A-law在低强度信号下,精度要稍微高一些。
实际应用中,我们确实可以用浮点数计算的方式把F(x)结果计算出来,然后进行量化,但是这样一来计算量会比较大,实际上对于A-law(A=87.6时),是采用13折线近似的方式来计算的,而μ-law(μ=255时)则是15段折线近似的方式。