G.729AB学习笔记

一、概念

         G.729:原始版本的编码。

         G.729A:G.729精简版,兼容原始版本,源码经过简化,所以音质较差。

         G.729B:此版本有静音抑制(Silence Suppression),与上面两个版本无法兼容。

         G.729AB:这个版本是有SID(Silence Insertion Descriptor)G.729A版本,而且兼容G.729B

         原文:G.729B Which provides a silence compression method that enables a voice activity detection (VAD) module. It is used to detect voice activity in the signal. It also includes a discontinuous transmission (DTX) module which decides on updating the background noise parameters for non speech (noisy frames). It uses 2-byte Silence Insertion Descriptor (SID) frames transmitted to initiate comfort noise generation (CNG). If transmission is stopped, and the link goes quiet because of no speech, the receiving side may assume that the link has been cut. By inserting comfort noise, analog hiss is simulated digitally during silence to assure the receiver that the link is active and operational.

         VAD:Voice Activity Detection,对当前活动帧进行检测,提供一个静音压缩算法。

         CNG:舒适噪音生成,在静音的时候产生一定的语音,一直静音下,人的感官觉得不适。

         DTX:非连续传输,噪音帧传输。

         BFI:Bad Frame Idicator,坏帧指示,静音帧标识。

         SID: Silence Insertion Descriptor2个字节表示。

二、编码详解

         1G.729AB编码帧解析:(Coder_ld8aprm2bits_ld8k函数处理)

编码后的short串为serial,第二个short字符标识帧的有效长度,同时表示帧的类型:

Ø           如果为80,普通帧。

Ø  如果为15 or 16, 指的G.729B中的SID帧,这个长度依据传输类型,如果定义OCTET_TX_MODE则为15

Ø  如果为0,表示该帧不传输。

如果serial[1]不为0,每两个字节编码成为BIT_0或者BIT_1

原文:In the distributed software of G.729 and its annexes (including G.729A, G.729B and G.729AB) the bitstream file contains, for each frame:

one 16 bit synchro word: serial[0] = SYNC_WORD (0x6B21);

one 16 bit word indicating the number Nb of bits for the frame: serial[1] = Nb:

Nb = 80 for G.729, G.729A, and for active frames of G.729B/G.729AB;

Nb = 15 or 16 (depending on the option of transmission) for SID frames of

G.729B/G.729AB;

Nb = 0 for untransmitted frames of G.729B/G.729AB;

Nb 16 bit words encoding the bits (BIT_0 = 0x007F, or BIT_1 = 0x0081)

when Nb 0, serial [i]= BIT_0 or BIT_1 for i = 2 to Nb + 1.

In the bitstream file of the G.729 software a frame erasure is indicated by zeroing those Nb words.

Frame number(short)

Actual frame typeencoder

T

Active

(T+1)

SID

(T+2)

Not Transmitted

2G.729AB解码帧解析:(bits2prm_ld8kDecod_ld8a函数处理)

Frame number

Present decoded frame type

T

Active

(T+1)

Active with BFI

(T+2)

Valid not Transmitted

3Asterisk G.729AB

Asterisk采用G.729AB编码库,但是在语音编解码时,固定使用G.729A。该编码库没有源码,以动态库的方式提供,支持多线程调用。

编解码主要是在文件codec_g729.c中的函数lintog729_frameout()g729tolin_framein()

启用A或者B开关是在函数G729AB_ENC_CONFIG(tmp->inst_g729_enc_h, G729_ENC_VAD, MODE_G729A)最后一个参数。

从函数lintog729_frameout()tmp->bitStream帧的长度控制上看,即使上面启用MODE_G729AB模式,但是这里固定处理成10short型数据,因此不支持G.729B

         改进后的Asterisk G.729AB Codec支持兼容AB(主要是实现VAD功能),具体的方法如下:图2.3.1显示编码过程,图2.3.2显示解码过程

G.729AB学习笔记_第1张图片

2.3.1 编码流程

 G.729AB学习笔记_第2张图片

 

2.3.2 解码流程


你可能感兴趣的:(Parameters,encoding,Descriptor,generation,compression,Codec)