音频编码-G.711
Posted 不会写代码的猴子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了音频编码-G.711相关的知识,希望对你有一定的参考价值。
G.711是一种窄带音频编解码器,最初设计用于提供 64 kbit/s 的长途质量音频的电话。G.711 传递 300–3400 Hz 范围内的音频信号,并以每秒 8,000 个样本的速率对其进行采样,该速率的容差为百万分之 50 (ppm)。使用 8 位的非均匀(对数)量化来表示每个样本,从而产生 64 kbit/s 的比特率。有两个略有不同的版本:主要用于北美和日本的μ-law和在北美以外的大多数其他国家/地区使用的A-law。 G.711 是用于音频压扩的ITU-T标准(推荐),标题为 1972 年发布的语音频率脉冲编码调制 (PCM)。它是许多技术的必需标准,例如H.320和H. .323标准。它也可用于IP 网络上的传真通信(如T.38规范中所定义)。 已发布 G.711 的两项增强功能:G.711.0利用无损数据压缩来减少带宽使用,而G.711.1通过增加带宽来提高音频质量。
特点
8 kHz 采样频率
64 kbit/s 比特率(8 kHz 采样频率 × 8 比特/样本)
典型的算法延迟为 0.125 ms,无前瞻延迟
G.711是一种波形语音编码器
G.711 附录 I 定义了分组丢失隐藏(PLC) 算法,以帮助隐藏分组网络中的传输丢失
G.711 附录 II 定义了一种不连续传输(DTX) 算法,该算法使用语音活动检测(VAD) 和舒适噪声生成(CNG) 来减少静音期间的带宽使用
理想条件下的PSQM测试产生 G.711 μ-law 的平均意见分数为 4.45,G.711 A-law 的平均意见分数为 4.45
网络压力下的 PSQM 测试对 G.711 μ-law 产生的平均意见得分为 4.13,对于 G.711 A-law 产生 4.11
类型
G.711 定义了两种主要的压扩算法,μ-law 算法和A-law 算法。两者都是对数的,但 A-law 专门设计用于更简单的计算机处理。该标准还定义了一系列重复代码值,定义了 0 dB的功率电平。 μ-law 和 A-law 算法将 14 位和 13 位有符号线性 PCM 样本(分别)编码为对数 8 位样本。因此,G.711编码器将为以 8 kHz 采样的信号创建 64 kbit/s 比特流。 G.711 μ-law 倾向于为较高范围的信号提供更高的分辨率,而 G.711 A-law 在较低的信号电平下提供更多的量化电平。 使用术语 PCMU、G711u 或 G711MU 表示 G711 μ-law,使用 PCMA 或 G711A 表示 G711 A-law。
A-law
A-law 编码将 13 位有符号线性音频样本作为输入,并将其转换为 8 位值,如下所示:
线性输入码 | 压缩码 异或 01010101 | 线性输出代码 |
---|---|---|
s0000000abcdx | s000abcd | s0000000abcd1 |
s0000001abcdx | s001abcd | s0000001abcd1 |
s000001abcdxx | s010abcd | s000001abcd10 |
s00001abcdxxx | s011abcd | s00001abcd100 |
s0001abcdxxxx | s100abcd | s0001abcd1000 |
s001abcdxxxxx | s101abcd | s001abcd10000 |
s01abcdxxxxxx | s110abcd | s01abcd100000 |
s1abcdxxxxxxx | s111abcd | s1abcd1000000 |
1.该值是通过取输入值的二进制补码表示形式产生的,如果值为负数,则将符号位之后的所有位取反。
2.^ 有符号的幅度表示
s符号位在哪里,s是它的倒数(即正值用MSB = s = 1 编码),标记的位x被丢弃。请注意,表的第一列使用与第三列不同的负值表示。因此,例如,输入的十进制值 -21 在位反转后以二进制表示为 1000000010100,它映射到 00001010(根据表的第一行)。解码时,这映射回 1000000010101,它被解释为十进制的输出值 -21。输入值 +52(二进制的 0000000110100)映射到 10011010(根据第二行),它映射回 0000000110101(十进制的 +53)。 这可以看作是一个浮点数,具有 4 位尾数 m(相当于 5 位精度)、3 位指数 e和 1 个符号位s,其格式与公式给出 seeemmmm的解码线性值y一样 这是一个 13 位有符号整数,范围为 ±1 到 ±(2 12 − 2 6 )。请注意,由于添加了 0.5(量化步长的一半),因此没有压缩代码解码为零。 此外,该标准规定在传输八位字节之前将所有结果偶数位(LSB为偶数)反转。这是为了提供大量的 0/1 转换,以促进 PCM 接收器中的时钟恢复过程。因此,无声 A 律编码的 PCM 通道的 8 位样本在八位字节中编码为 0xD5 而不是 0x80。 当通过 E0 ( G.703 ) 发送数据时,首先发送 MSB(符号),最后发送 LSB。 ITU-T STL [3]将解码算法定义如下(它将解码值放在 16 位输出数据类型的 13 个最高有效位中)。
void alaw_expand(lseg, logbuf, linbuf)
long lseg;
short *linbuf;
short *logbuf;
short ix, mant, iexp;
long n;
for (n = 0; n < lseg; n++)
ix = logbuf[n] ^ (0x0055); /* re-toggle toggled bits */
ix &= (0x007F); /* remove sign bit */
iexp = ix >> 4; /* extract exponent */
mant = ix & (0x000F); /* now get mantissa */
if (iexp > 0)
mant = mant + 16; /* add leading '1', if exponent > 0 */
mant = (mant << 4) + (0x0008); /* now mantissa left justified and */
/* 1/2 quantization step added */
if (iexp > 1) /* now left shift according exponent */
mant = mant << (iexp - 1);
linbuf[n] = logbuf[n] > 127 /* invert, if negative sample */
? mant
: -mant;
μ-law
μ-law(有时称为 ulaw、G.711Mu 或 G.711μ)编码采用二进制补码表示的 14 位有符号线性音频样本作为输入,如果值为负,则反转符号位之后的所有位,添加 33(二进制 100001)并将其转换为 8 位值,如下所示:
线性输入值 | 压缩代码 XOR 11111111 | 线性输出值 |
---|---|---|
s00000001abcdx | s000abcd | s00000001abcd1 |
s0000001abcdxx | s001abcd | s0000001abcd10 |
s000001abcdxxx | s010abcd | s000001abcd100 |
s00001abcdxxxx | s011abcd | s00001abcd1000 |
s0001abcdxxxxx | s100abcd | s0001abcd10000 |
s001abcdxxxxxx | s101abcd | s001abcd100000 |
s01abcdxxxxxxx | s110abcd | s01abcd1000000 |
s1abcdxxxxxxxx | s111abcd | s1abcd10000000 |
1.此值是通过取输入值的二进制补码表示,如果值为负数则反转符号位之后的所有位,然后加上 33。
2.^ 有符号的幅度表示。最终结果是通过将该值的大小减少 33 来产生的。
s符号位在哪里,标记的位x被丢弃。 此外,该标准规定在传输八位字节之前将编码位反转。因此,无声 μ 律编码的 PCM 通道具有 8 位样本传输的 0xFF 而不是八位字节中的 0x00。 添加 33 是必要的,以便所有值都落入一个压缩组,并在解码时将其减去。 将格式化为 as 的编码值seeemmmm分解为 4 位尾数m、3 位指数e和 1 位符号位s,解码后的线性值y由公式给出 这是一个 14 位有符号整数,范围为 ±0 到 ±8031。 请注意,0 以 0xFF 传输,-1 以 0x7F 传输,但在两种情况下接收到的结果都是 0。
G.711.0
G.711.0,也称为 G.711 LLC,利用无损数据压缩将带宽使用量减少多达 50%。 G.711脉冲编码调制标准的无损压缩于2009年9月获得ITU-T批准。
G.711.1
G.711.1 是 G.711 的扩展,于 2008 年 3 月作为 ITU-T Recommendation G.711.1 发布。其正式名称为Wideband Embedded extension for G.711 脉冲编码调制。 G.711.1,允许添加窄带和/或宽带(16000 个样本/秒)增强功能,每个增强功能都以(包含的)基本 G.711 比特流比特率的 25%,导致数据速率为 64、80 或 96 kbit /秒。 G.711.1 在 64 kbit/s 下与 G.711 兼容,因此可以预见在现有的基于 G.711 的 IP 语音 ( VoIP ) 基础设施中的有效部署。G.711.1 编码器可以在 80 和 96 kbit/s 下以 50-7000 Hz 的带宽对 16 kHz 的信号进行编码,对于 8-kHz 采样,输出可以产生带宽从 50 到 4000 Hz 的信号,运行64 和 80 kbit/s。 G.711.1 编码器创建一个嵌入式比特流,其结构分为三层,对应于三种可用比特率:64、80 和 96 kbit/s。比特流不包含关于包含哪些层的任何信息,实现将需要关于哪些层可用的带外信令。G.711.1 的三个层是:低频段的对数压扩脉冲编码调制 (PCM),包括噪声反馈、具有自适应比特分配的嵌入式 PCM 扩展,用于提高低频段基础层的质量,以及加权矢量量化编码基于修正离散余弦变换(MDCT) 的较高频带。 2010 年计划对 G.711.1 进行两项扩展:超宽带扩展(带宽至 14000 Hz)和无损比特流压缩。
许可
1972 年发布的 G.711 专利已过期,因此无需许可证即可使用。
以上是关于音频编码-G.711的主要内容,如果未能解决你的问题,请参考以下文章
一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:以g711-mulaw为例添加新的编码格式解析支持