音频编码-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
线性输出代码
s0000000abcdxs000abcds0000000abcd1
s0000001abcdxs001abcds0000001abcd1
s000001abcdxxs010abcds000001abcd10
s00001abcdxxxs011abcds00001abcd100
s0001abcdxxxxs100abcds0001abcd1000
s001abcdxxxxxs101abcds001abcd10000
s01abcdxxxxxxs110abcds01abcd100000
s1abcdxxxxxxxs111abcds1abcd1000000

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
线性输出值
s00000001abcdxs000abcds00000001abcd1
s0000001abcdxxs001abcds0000001abcd10
s000001abcdxxxs010abcds000001abcd100
s00001abcdxxxxs011abcds00001abcd1000
s0001abcdxxxxxs100abcds0001abcd10000
s001abcdxxxxxxs101abcds001abcd100000
s01abcdxxxxxxxs110abcds01abcd1000000
s1abcdxxxxxxxxs111abcds1abcd10000000

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的主要内容,如果未能解决你的问题,请参考以下文章

编码g.711 g.168 g.729 g.723 哪个好

一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:以g711-mulaw为例添加新的编码格式解析支持

G.711编码原理

直播常见面试题

g711u与g729比較编码格式

G711格式语音采集/编码/转码/解码/播放