java g722 解码_AMR音频编码器概述及文件格式分析

全称Adaptive Multi-Rate,自适应多速率编码,主要用于移动设备的音频,压缩比比较大,但相对其他的压缩格式质量比较差,由于多用于人声,通话,效果还是很不错的。

一、分类

1. AMR:又称为AMR-NB,相对于下面的WB而言,

语音带宽范围:300-3400Hz,

8KHz抽样

2. AMR-WB:AMR WideBand,

语音带宽范围:50-7000Hz

16KHz抽样

“AMR-WB”全称为“Adaptive Multi-rate - Wideband”,即“自适应多速率宽带编码”,采样频率为16kHz,是一种同时被国际标准化组织ITU-T和3GPP采用的宽带语音编码标准,也称为G722.2标准。AMR-WB提供语音带宽范围达到50~7000Hz,用户可主观感受到话音比以前更加自然、舒适和易于分辨。

与之作比较,现在GSM用的EFR(Enhenced Full Rate,增强型全速率编码)采样频率为8kHz,语音带宽为200~3400Hz。

AMR-WB应用于窄带GSM(全速信道16k,GMSK)的优势在于其可采用从6.6kb/s, 8.85kb/s和12.65kb/s三种编码,当网络繁忙时C/I恶化,编码器可以自动调整编码模式,从而增强QoS。在这种应用中,AMR-WB抗扰度优于AMR-NB。

AMR-WB应用于EDGE、3G可充分体现其优势。足够的传输带宽保证AMR-WB可采用从6.6kb/s到23.85kb/s共九种编码,语音质量超越PSTN固定电话。

二、编码方式

1. AMR-NB:

AMR一共有16种编码方式,0-7对应8种不同的编码方式,8-15用于噪音或者保留用。

Frame Type

Mode Indication

Mode Request

Frame content (AMR mode, comfort noise, or other)

0

0

0

AMR4,75 kbit/s

1

1

1

AMR5,15 kbit/s

2

2

2

AMR5,90 kbit/s

3

3

3

AMR6,70 kbit/s (PDC-EFR)

4

4

4

AMR7,40 kbit/s (TDMA-EFR)

5

5

5

AMR7,95 kbit/s

6

6

6

AMR10,2 kbit/s

7

7

7

AMR12,2 kbit/s (GSM-EFR)

8

-

-

AMRSID

9

-

-

GSM-EFR SID

10

-

-

TDMA-EFR SID

11

-

-

PDC-EFR SID

12-14

-

-

For future use

15

-

-

No Data (No transmission/No reception)

2. AMR-WB:

Frame Type Index

Mode Indication

Mode Request

Frame content (AMR-WB mode, comfort noise, or other)

0

0

0

AMR-WB 6.60 kbit/s

1

1

1

AMR-WB 8.85 kbit/s

2

2

2

AMR-WB 12.65 kbit/s

3

3

3

AMR-WB 14.25 kbit/s

4

4

4

AMR-WB 15.85 kbit/s

5

5

5

AMR-WB 18.25 kbit/s

6

6

6

AMR-WB 19.85 kbit/s

7

7

7

AMR-WB 23.05 kbit/s

8

8

8

AMR-WB 23.85 kbit/s

9

-

-

AMR-WB SID (Comfort Noise Frame)

10-13

-

-

For future use

14

-

-

speech lost

15

-

-

No Data (No transmission/No reception)

-

-

二、AMR帧格式:

AMR有两种类型的帧格式:AMR IF1和AMR IF2

1. AMR IF1:

IF1的帧格式如下图所示:

0359220.jpg

FrameType, Mode Indication, Mode Request对应上面两个表格里的数。从上面的表格里我们可以看出,这三个域的值是相同的。所以在IF2中省略了Mode Indication, Mode Request两个域。

Frame Quality Indicator: 0表示bad frame或者corrupted frame;1表示good frame

每一帧的数据有分为三个部分:Class A/B/C

Class A:一帧中最敏感、最重要的数据。一旦这一部份数据有损坏,整个帧就无法解码,就损坏了。所以,一般在无线传输的时候要使用各种冗余的方式对这部分数据加以保护。

Class B:相对于Class A不那么重要的数据。

Class C:比Class B还不重要的数据。

2. AMR IF2:

IF2的帧格式如下图所示:

0359221.jpg

相对于IF1, IF2省去了Frame Quality Indicator, Mode Indication, Mode Request和CRC校验。但是增加了bit填充。因为AMR帧中数据的长度并不是字节(8bit)的整数倍,所以在有些帧的末尾需要增加bit填充,以使整个帧的长度达到字节的整数倍。

有关IF2帧中各个域的信息请参考下面的帧大小节的表格。

三、帧大小

1. AMR-NB

Frame Type Index

Frame content

Number of bits in Frame Type

Number of Bits in AMR Core Frame

Number of Bitsin

Bit Stuffing

Number of octets (N)

0

AMR4,75

4

95

5

13

1

AMR5,15

4

103

5

14

2

AMR5,90

4

118

6

16

3

AMR6,70

4

134

6

18

4

AMR7,40

4

148

0

19

5

AMR7,95

4

159

5

21

6

AMR10,2

4

204

0

26

7

AMR12,2

4

244

0

31

8

AMRSID

4

39

5

6

9

GSM-EFR SID

4

43

1

6

10

TDMA-EFR SID

4

38

6

6

11

PDC-EFR SID

4

37

7

6

12-14

For future use

-

-

-

-

15

No Data

4

0

4

1

Number of bits in Classes A, B, and C for each AMR codec mode

Frame Type

AMR

codec mode

Total number of bits

Class A

Class B

Class C

0

4,75

95

42

53

0

1

5,15

103

49

54

0

2

5,90

118

55

63

0

3

6,70

134

58

76

0

4

7,40

148

61

87

0

5

7,95

159

75

84

0

6

10,2

204

65

99

40

7

12,2

244

81

103

60

2. AMR-WB:

Composition of AMR-WB IF2 Frames for all Frame Types

Frame Type Index

Frame content

Number of bits in Frame Type

Number of bits in Frame Quality Indicator

Number of Bits in AMR-WB Core Frame

Number of Bits in Bit Stuffing

Number of octets (N)

0

AMR-WB 6.60 kbit/s

4

1

132

7

18

1

AMR-WB 8.85 kbit/s

4

1

177

2

23

2

AMR-WB 12.65 kbit/s

4

1

253

6

33

3

AMR-WB 14.25 kbit/s

4

1

285

6

37

4

AMR-WB 15.85 kbit/s

4

1

317

6

41

5

AMR-WB 18.25 kbit/s

4

1

365

6

47

6

AMR-WB 19.85 kbit/s

4

1

397

6

51

7

AMR-WB 23.05 kbit/s

4

1

461

6

59

8

AMR-WB 23.85 kbit/s

4

1

477

6

61

9

AMR-WB SID (Comfort Noise Frame)

4

1

40

3

6

10-13

For future use

-

-

-

-

-

14

speech lost

4

1

0

3

1

15

No Data (No transmission/No reception)

4

1

0

3

1

Frame Type

AMR-WB

codec mode

Total number of bits

Class A

Class B

Class C

0

6.60

132

54

78

0

1

8.85

177

64

113

0

2

12.65

253

72

181

0

3

14.25

285

72

213

0

4

15.85

317

72

245

0

5

18.25

365

72

293

0

6

19.85

397

72

325

0

7

23.05

461

72

389

0

8

23.85

477

72

405

0

四、PCM16和AMR之间的转换Amr一帧为20毫秒以AMR 4.75Kbits/s为例:每秒产生的声音位数= 4750bits/s每20ms帧占用的位数= 4750bits/s / 50frames/s = 95bits每20ms帧占用的字节数= 95bits / 8bits/byte = 11.875bytes -圆整到12字节,不足的补0加上一个字节的帧头,所以,20ms一帧的AMR: 12-bytes + 1-byte = 13-bytes相反,转换回来就成了13-bytes * 50frames/s * 8bits/byte = 5200bits/s注意,这里两个数值并不对应,是由于圆整的原因

五、AMR文件的存储格式(RFC 3267):

AMR IF1, IF2定义了AMR的帧格式,用于无线传输用。RFC 3267定义了把AMR数据存成文件的文件格式。

AMR的文件格式如下图1所示:

它包含一个文件头,然后就是一帧一帧的AMR数据了。

1.文件头格式:

AMR文件支持单声道和多声道。单声道和多声道的文件头是不同的。

单声道:

AMR-NB文件头:"#!AMR/n" (or 0x2321414d520a in hexadecimal)(引号内的部分)

AMR-WB文件头:"#!AMR-WB/n" (or 0x2321414d522d57420a in hexadecimal).(引号内)

多声道:

多声道的文件头包含一个magic number和32bit channle description域。

0359222.jpg

AMR-NB的magic number:"#!AMR_MC1.0/n"

(or 0x2321414d525F4D43312E300a in hexadecimal).

AMR-WB的magic number:"#!AMR-WB_MC1.0/n"

(or 0x2321414d522d57425F4D43312E300a in hexadecimal).

0359223.jpg

32bit的channel description域的定义如下:

0359224.jpg

其中reserved bits必须为0,CHAN:表示当前文件中含有几个声道。

帧头的格式:

帧头的格式如图2所示,它占1个字节(8个bit)

P为填充为设置为0

FT为编码模式, 即上面提到的16中编码模式。Q为帧质量指示器,如果为0表明帧被损坏。

图3列举了AMR-NB 5.9Kbit的一个帧的格式,

对于5.9kbit一帧的有118bit的数据,15*8=120=118+2,所以在最后有2个bit的填充位。

参考文献:

RFC3267 RTP Payload Format for AMR and AMR-WB

3GPP TS 26.201 V6.0.0

3GPP TS 26.101 V6.0.0

AMR的源码可以在3GPP的网页下载,NB,和WB都有,一个浮点库,一个是定点库,要分清楚

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AMR在IP域中的编码(rfc3267,4867) 缩写解释 SID Silence Descriptor (Comfort Noise Frame) 1 AMR编码介绍 AMR编码是一种自适应多速率编码,根据传输信道的实际情况,调整编码模式、速率和纠错码位数来保证语音质量,在数据压缩和容错上面取得平衡。一般语音质量越高抗干扰能力越弱。在GSM网络,基站、基站控制器可根据网络质量和信号质量情况动态调整语音编码模式以提高不同网络状况下的语音质量。现在手机终端基本上都支持AMR编码,Nokia从2004年开始提供支持AMR的终端,目前所有的新型号终端都支持AMRAMR在IP域中的编码(rfc3267,4867) AMR算法 参考文档 (1) 3GPP TS26.190, AMR Wideband speech codec; Transcoding functions(Release 5). (2) 3GPP TS 26.194, Voice Activity Detection (VAD). (3) 3GPP TS 26.174, AMR wideband speech codec; Test sequences. (4) 3GPP TS 26.194, Frame Structure. 2 AMR在IP域中的净荷格式 RFC3267/4867协议描述AMR编码在RTP中的载荷格式,是其在IP域的存在形式。 对于每个RTP会话,AMR净荷有两种模式,分别为节省带宽模式和字节对齐模式,具体采用那种模式,由信令协商决定;采用后一模式可以后可以引入鲁棒排序、帧交叉编码和CRC校验等方式提高语音传输的质量。 以下三种场景分别为1IP域的终端进行会话、2非IP域终端通过网关和3IP域终端会话以及非IP域终端之间的通信场景,各个场景的特点见协议描述。 AMRAMR-WB净荷格式 二者格式区别,a.帧类型;b.前者的采样频率为8KHZ,后者为16KH;c.模式不一样 净荷结构如下,包括净荷头,内容表和语音数据: +----------------+-------------------+---------------- | payload header | table of contents | speech data ... +----------------+-------------------+---------------- Payloads containing more than one speech frame-block are called compound payloads. 节省带宽模式Bandwidth-Efficient Mode a. 净荷头格式: 0 1 2 3 +-+-+-+-+ | CMR | +-+-+-+-+ CMR(codec mode request)编码模式请求,由发送者向接受者的请求发送者编码器将来的编码速率模式,保存帧类型索引,如果是AMR,取值范围为0-7,表示8种速率模式,如果为AMR-WB,取值范围为0-8,表示9种速率。取值15意味着当前是没有指定哪个模式的请求。 模式选定后,由于采样频率恒定,具体包的打包时长还是不变,不同速率只是净荷长度不一样,例如对于AMR模式0,其速率是4.75Kbit/s,净荷中包含的语音数据为95bits。 AMR的8种速率索引表,见[1] AMR在IP域中的编码(rfc3267,4867) AMR-WB的9种速率索引表,见[2] AMR在IP域中的编码(rfc3267,4867) b. 净荷内容表ToC(table of contents),第一项表示一个语音帧 0 1 2 3 4 5 +-+-+-+-+-+-+ |F| FT |Q| +-+-+-+-+-+-+ F:用于标志是否最后一个帧,0表示最后1帧.如果是多帧复用才有Toc才会有多项,否则只有1项。 FT:标志对音帧语音编码模式或舒适噪志的模式,取值范围同CMR取值,FT=14 (SPEECH_LOST, only available for AMR-WB) and FT=15 (NO_DATA),FT=15表示没有当前帧没有净荷;取值10-13该帧要丢弃。 Q:指示帧质量,为0表示对应帧被破坏,1表示未被破坏;如果该帧已被破坏,那么可以通过直接丢弃该帧来处理。 净荷内容表就是对帧内容的数据格式说明, c. 语音数据speech data 语音数据即为真正的语音帧或舒适噪声帧的数据,每帧数据的描述和ToC每一项对应起来,数据长度取决于对应模式ToC项中的FT标识的模式。 示例: 单通道单帧 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CMR=15|0| FT=4 |1|d(0) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | d(147)|P|P| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 单通道多帧 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CMR=1 |1| FT=0 |1|1| FT=9 |1|1| FT=15 |1|0| FT=1 |1|d(0) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | d(131)| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |g(0) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | g(39)|h(0) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | h(176)|P|P|P|P|P|P|P| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 多通道多帧,见协议 字节对齐模式Octet-aligned Mode a. 净荷头格式 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 +-+-+-+-+-+-+-+-+- - - - - - - - | CMR |R|R|R|R| ILL | ILP | +-+-+-+-+-+-+-+-+- - - - - - - - CMR:同上; R:保留位,区分节省带宽模式,这些保留位作用之一就是字节对齐; ILL:可选,指示交错长度(取值为L,交错长度即为L+1); ILP:可选,交错块的索引,取值范围为0到ILL,超过这个范围,该帧块应被丢弃。 b. ToC +---------------------+ | list of ToC entries | +---------------------+ | list of frame CRCs | (optional) - - - - - - - - - - - Note, for ToC entries with FT=14 or 15, there will be no corresponding speech frame or frame CRC present in the payload. 组成同节省带宽模式 ToC项:在该模式下,6位ToC也需要2位补齐。 CRC:CRC校验位可选,如果带外信令协商需要校验,则每项对应每个语音数据进行8位长度的校验。 语音数据 同节省带宽模式,只是要求每帧必须补0对齐;对于多帧的净荷,可以和节省模式一样,一帧顺序排,也可以所有帧以字节为单位交错排序,尽量把各个帧错误敏感位排前面。 示例: 单通道多帧 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CMR=6 |R|R|R|R|1|FT#1=5 |Q|P|P|0|FT#2=5 |Q|P|P| f1(0..7) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | f1(8..15) | f1(16..23) | .... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ : ... : +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ... |f1(152..158) |P| f2(0..7) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | f2(8..15) | f2(16..23) | .... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ : ... : +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ... |f2(152..158) |P| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 多通道 3 AMR语音帧结构 AMRAMR-WB的语音数据结构分别详见TS 26.101,26.201描述,这里介绍AMR-NB的语音数据编码结构。 语音数据位根据重要性分成类,A、B、C类,其对错误的敏感性和重要性依次为A>B>C,如下,4.75Kb模式的总的位数为95位,A类42位,B类53位。 AMR在IP域中的编码(rfc3267,4867) AMR净荷数据把重要的数据位放在前面,不重要的放在后面,为了把语音数据中重要的数据位放置A类,需要对编码器编出的比特位进行重排序,26.101把编码后数据位的位置和重排序的位置对应起来形成一张表供查询, - for j = 0 to K-1 //第0位到第K-1位全部重排 - d(j) := s(tablem(j)+1); //查对应模式的表找到重排后相应位置 例如下表6.7kb模式的排序表,共134位,第82位数据位排序后对应18位 AMR在IP域中的编码(rfc3267,4867) 上节节省带宽模式和字节对齐模式,d(i)均是排序后的数据。 下图示例相比上一节还加了8位CRC校验码。 4 AMR NB/WB信令协商参数 AMR常用如下 octet-align,是节省带宽模式还是字节对节模式,一般取值为1表示字节对齐,为0或不带默认表示为节省带宽模式; mode-set,一旦请求带了模式集,之后AMR媒体流只选择属于这个模式集的模式来发送; mode-change-period,模式改变周期; maxptime,最大支持的打包时长(ms); crc,净荷是否进行CRC校验,一般为1表示需要,媒体流会携带校验位; robust-sorting,是否进行鲁棒排序; interleaving,定义交错帧块数; ptime,指包时长; channels,音频通道数,例如采用左右通道数值则为2; AMR-WB常用参数同上 4 多帧复用 为了降低带宽,减少网络传输的RTP包数,把多帧的数据打包在1个RTP包里面进行传输。净荷里面用ToC表来管理多帧数据,说明模式等内容,这样也可根据网络状况灵活改变多帧的速率,例如,多帧中每个帧的速率不一定要一样。 采用多帧复用要注意关注RTP包的大小、时戳是否正确。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值