G.711 A律 U律

将16bits的pcm信号编码成8bits样本进行传输,在网上查了下,有基于G.711标准的两种算法(A-law, u-law)

G711
也称为PCM(脉冲编码调制),是国际电信联盟订定出来的一套语音压缩标准,主要用于电话。它主要用脉冲编码调制对音频采样,采样率为8k每秒。它利用一个64Kbps未压缩通道传输语音讯号。起压缩率为1:2,即把16位数据压缩成8位。G.711是主流的波形声音编解码器。
G.711 标准下主要有两种压缩算法。一种是µ-law algorithm (又称often u-law, ulaw, mu-law),主要运用于北美和日本;另一种是A-law algorithm,主要运用于欧洲和世界其他地区。其中,后者是特别设计用来方便计算机处理的。这两种算法都使用一个采样率为8kHz的输入来创建64Kbps的数字输出。a-law也叫g711a,输入的是13位(其实是S16的高13位).

压缩过程

(1)取符号位并取反得到s,

(2)获取强度位eee,获取方法如图所示

(3)获取高位样本位wxyz

(4)组合为seeewxyz,将seeewxyz逢偶数为取补数,编码完毕

 

 

//aLaw
0000000 abcd x   <=>   000 abcd
0000001 abcd x   <=>   001 abcd
000001 abcd xx   <=>   010 abcd
00001 abcd xxx   <=>   011 abcd
0001 abcd xxxx   <=>   100 abcd
001 abcd xxxxx   <=>   101 abcd
01 abcd xxxxxx   <=>   110 abcd
1 abcd xxxxxxx   <=>   111 abcd

//uLaw
00000001 abcd x   <=>   000 abcd
0000001 abcd xx   <=>   001 abcd
000001 abcd xxx   <=>   010 abcd
00001 abcd xxxx   <=>   011 abcd
0001 abcd xxxxx   <=>   100 abcd
001 abcd xxxxxx   <=>   101 abcd
01 abcd xxxxxxx   <=>   110 abcd
1 abcd xxxxxxxx   <=>   111 abcd

 

示例:

输入pcm数据为3210,二进制对应为(0000 1100 1000 1010)

二进制变换下排列组合方式(0 0001 1001 0001010)

(1)获取符号位最高位为0,取反,s=1

(2)获取强度位0001,查表,编码制应该是eee=100

(3)获取高位样本wxyz=1001

(4)组合为11001001,逢偶数为取反为10011100

————————————————

版权声明:本文为CSDN博主「qweeera」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/u012323667/article/details/79214336

 

把16bit的音频数据转为8bit。

 

最简单的方式是均匀量化, >>8 (右移8位),但这样做会使得声音的噪音变大。

 

最好的做法是使用非均匀量化(如A-Law),其原理是对于小音量的声音,其蕴含的信息量更大,人耳对小音量

 

更敏感;而大音量部分则影响没那么大。因此使用非均匀量化的方式,对于小音量部分保留更多的数据,大音量部分则保留更少的数据。具体实现如下:

 

这里选择A-Law(A律)算法,也可以用uLaw(μ律),两种算法可相互转化。

 

令量化器过载电压为1,相当于把输入信号进行归一化,那么A律对数压缩定义为:

 

当0 <= x <= 1/A时,f(x)=(Ax)/(1+lnA)

 当1/A <= x <= 1时,f(x)=(1+lnAx)/(1+lnA)

 

在现行的国际标准中A=87.6,此时信号很小时(即小信号时),从上式可以看到信号被放大了16倍,

 这相当于A压缩率与无压缩特性比较,对于小信号的情况,量化间隔比均匀量化时减小了16倍,

 因此,量化误差大大降低;而对于大信号的情况例如x=1,量化间隔比均匀量化时增大了5.47倍,

 量化误差增大了。这样实际上就实现了“压大补小”的效果。

图形曲线如下(只画出正数部分,对于负数也是同样的道理)(这里用了归一化):

 

 

 

 

但是要在程序中实现该曲线,比较复杂。因此这里使用8段折线来近似表示。

 

把x轴划分为不均匀的8份,第一点取1/2处,第二点取1/4处,第三点取1/8处……第七点取1/128.

 

把y轴划分为均匀的8分段。

————————————————

版权声明:本文为CSDN博主「狗狗25」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/wzying25/article/details/79398055

 

posted @ 2022-03-25 16:44  angryCoder996  阅读(2516)  评论(0编辑  收藏  举报