title | date | tags | description | top_img | cover | |||
---|---|---|---|---|---|---|---|---|
G711编解码--C语言实现 |
2023-10-08 12:00:09 -0700 |
|
G.711是一种窄带音频编解码器,最初设计用于电话,可提供 64 kbit/s 的长途质量音频。它是音频编码的ITU-T标准(推荐),名为语音脉冲编码调制 (PCM),于 1972 年发布并使用。
它使用两种不同的对数压扩算法之一:μ-law(主要在北美和日本使用)和A-law(在北美以外的大多数其他国家/地区使用)。每个压扩样本被量化为 8 位,从而产生 64 kbit/s 的比特率。 [1] Wikipedia
G711按采样点进行压缩,舍弃低位,高位分段,将16bit的一个采样点数据压缩为8bit,所以压缩比固定为 8/16 = 50%。G.711a对高13位进行压缩,主要运用于欧洲和世界其他地区;G.711u对高14位进行压缩,主要运用于北美和日本
- 取符号位并取反得到$\overline s$
- 获取强度位 eee
- 获取高位样本位 wxyz
- 组合为
$\overline {s}eeewxyz$ - 将偶数位取反(减少连续的0或1,降低传输误码率)
input sample | encode | decode |
---|---|---|
s0000000wxyza | s0000000wxyz1 | |
s0000001wxyza | s0000001wxyz1 | |
s000001wxyzab | s000001wxyz10 | |
s00001wxyzabb | s00001wxyz100 | |
s0001wxyzabbb | s0001wxyz1000 | |
s001wxyzabbbb | s001wxyz10000 | |
s01wxyzabbbbb | s01wxyz100000 | |
s1wxyzabbbbbb | s1wxyz1000000 |
例子: 输入pcm = 1234 (0x04D2 二进制为0000 0100 1101 0010 --> 转换格式 0 00001 0011 010010)
- 取符号位s=0
- 强度位eee=011
- 高样本位wxyz=0011
- 组合为
$\overline {s}eeewxyz$ = 10110011 - 偶数位取反11100110 (16进制0xE6)
- 取符号位 s
- 获取强度位 eee
- 获取高位样本位 wxyz
- 组合为 seeewxyz
- 取反
input sample | encode | decode |
---|---|---|
s00000001wxyzb | s00000001wxyz1 | |
s0000001wxyzbb | s0000001wxyz10 | |
s000001wxyzbbb | s000001wxyz100 | |
s00001wxyzbbbb | s00001wxyz1000 | |
s0001wxyzbbbbb | s0001wxyz10000 | |
s001wxyzbbbbbb | s001wxyz100000 | |
s01wxyzbbbbbbb | s01wxyz1000000 | |
s1wxyzbbbbbbbb | s1wxyz10000000 |
例子: 输入pcm = 1234 (二进制为0000 0100 1101 0010 --> 转换格式 0 00001 0011 010010)
- 取符号位s=0
- 强度位eee=011
- 高样本位wxyz=0011
- 组合为seeewxyz = 00110011
- 取反11001100 (16进制0xCC)