AMR音頻編碼器概述及文件格式分析

全稱Adaptive Multi-Rate,自適應多速率編碼,主要用于移動設備的音頻壓縮比比較大但相對其他的壓縮格式質量比較差由于多用于人聲通話效果還是很不錯的。

一、分類

1. AMR: 又稱為AMR-NB,相對于下面的WB而言,

語音帶寬范圍:3003400Hz

8KHz抽樣

2. AMR-WB:AMR WideBand

????? 語音帶寬范圍: 507000Hz

????? 16KHz抽樣

“AMR-WB”全稱為“Adaptive Multi-rate - Wideband”,即自適應多速率寬帶編碼,采樣頻率為16kHz,是一種同時被國際標準化組織ITU-T3GPP采用的寬帶語音編碼標準,也稱 G722.2標準。AMR-WB提供語音帶寬范圍達到507000Hz,用戶可主觀感受到話音比以前更加自然、舒適和易于分辨。

  與之作比較,現在GSM用的EFR(Enhenced Full Rate,增強型全速率編碼)采樣頻率為8kHz,語音帶寬為2003400Hz

  AMR-WB應用于窄帶GSM(全速信道16kGMSK)的優勢在于其可采用從6.6kb/s, 8.85kb/s12.65kb/s三種編碼,當網絡繁忙時C/I惡化,編碼器可以自動調整編碼模式,從而增強QoS。在這種應用中,AMR-WB抗擾 度優于AMR-NB

AMR-WB應用于EDGE3G可充分體現其優勢。足夠的傳輸帶寬保證AMR-WB可采用從6.6kb/s23.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

AMR 4,75 kbit/s

1

1

1

AMR 5,15 kbit/s

2

2

2

AMR 5,90 kbit/s

3

3

3

AMR 6,70 kbit/s (PDC-EFR)

4

4

4

AMR 7,40 kbit/s (TDMA-EFR)

5

5

5

AMR 7,95 kbit/s

6

6

6

AMR 10,2 kbit/s

7

7

7

AMR 12,2 kbit/s (GSM-EFR)

8

-

-

AMR SID

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 的幀格式如下圖所示:

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的幀格式如下圖所示:

相對于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 Bits in
Bit Stuffing

Number of octets (N)

0

AMR 4,75?

4

95

5

13

1

AMR 5,15

4

103

5

14

2

AMR 5,90

4

118

6

16

3

AMR 6,70

4

134

6

18

4

AMR 7,40

4

148

0

19

5

AMR 7,95

4

159

5

21

6

AMR 10,2

4

204

0

26

7

AMR 12,2

4

244

0

31

8

AMR SID

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

?

?

四、PCM16AMR之間的轉換
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數據了。

?

<!--[if !supportLists]-->1.?????? <!--[endif]-->文件頭格式:

?AMR 文件支持單聲道和多聲道。單聲道和多聲道的文件頭是不同的。

?單聲道:

?AMR-NB文件頭: "#!AMR/n" (or 0x2321414d520a in hexadecimal)(引號內的部分)

?AMR-WB 文件頭:"#!AMR-WB/n" (or 0x2321414d522d57420a in hexadecimal).(引號內)

多聲道:

多聲道的文件頭包含一個magic number32bit channle description域。

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

(or 0x2321414d525F4D43312E300a in hexadecimal).

AMR-WBmagic number"#!AMR-WB_MC1.0/n"

????? ???????????????????(or 0x2321414d522d57425F4D43312E300a in hexadecimal).

32bitchannel description域的定義如下:

其中 reserved bits必須為0 CHAN:表示當前文件中含有幾個聲道。

?

幀頭的格式:

幀頭的格式如圖2 所示, 它占1個字節(8bit

P為填充為設置為0

FT為編碼模式, 即上面提到的16中編碼模式。
Q
為幀質量指示器,如果為0表明幀被損壞。

?

3 列舉了AMR-NB 5.9Kbit的一個幀的格式,

對于5.9kbit一幀的有118bit的數據,15*8=120=118+2, 所以在最后有2bit的填充位。

?

參考文獻:

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都有,一個浮點庫,一個是定點庫,要分清楚

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455137.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455137.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455137.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

查詢自己OpenGL的版本信息

GLvoid PrintVersion() {const GLubyte* name glGetString(GL_VENDOR); //返回負責當前OpenGL實現廠商的名字const GLubyte* biaoshifu glGetString(GL_RENDERER); //返回一個渲染器標識符&#xff0c;通常是個硬件平臺const GLubyte* OpenGLVersion glGetStr…

airpod藍牙耳機音量大解決辦法_關于AirPods的常見問題匯總 全面了解蘋果AirPods無線耳機...

小編帶來關于AirPods必知的24個問題&#xff0c;全面了解蘋果AirPods無線耳機。蘋果決定在iPhone7中拋棄3.5毫米耳機接口&#xff0c;這引發了許多爭議和不解。蘋果這樣做的原因部分在于&#xff0c;希望人們轉而使用無線耳機。因此蘋果也推出了自主的無線耳機AirPods。對于無線…

單例設計模式-懶漢式(線程安全)

懶漢式(線程安全) 有缺點說明 解決了線程不安全問題 效率太低了,每個線程在想獲得類的實例時候,執行getInstance()方法都要進行同步.而其實這個方法只執行了一次實例化代碼就夠了,后面的想獲取該類實例,直接return就行了.方法進行同步效率太低 結論: 在實際開發中,不推薦使用…

剖析Docker Swarm和Mesos:是什么?如何結合?有什么優勢?

本文講的是剖析Docker Swarm和Mesos&#xff1a;是什么&#xff1f;如何結合&#xff1f;有什么優勢&#xff1f;&#xff0c;【編者的話】本文來自Mesosphere&#xff0c;從生產環境的需求出發&#xff0c;簡要介紹了Docker Swarm的誕生背景&#xff0c;以及其與Mesos、 Mesos…

濮陽第二屆創客機器人比賽_咸陽市舉行第二屆機器人大賽暨第一屆創客大賽

11月14日&#xff0c;由陜西省教育信息化管理中心指導&#xff0c;市教育局主辦&#xff0c;咸陽師范學院、市少工委協辦的咸陽市第二屆機器人大賽暨第一屆創客大賽在咸陽師范學院舉辦。各個學校的同學展示自己的發明創造。咸陽日報全媒體記者 馬沅聰 攝據悉&#xff0c;來自各…

MP3文件格式解析

1&#xff0c; MP3簡介 MP3是今天一種常見的音樂格式&#xff0c;但恐怕除了工作要求之外&#xff0c;有興趣對此進行研究的人恐怕不多。所以&#xff0c;當我打算做MP3解碼方面的工作時&#xff0c;在找資料時也頗費了一番周折&#xff0c;同時也覺得很有趣。所以想在這里分…

懶漢式(線程安全,同步代碼塊兒)

懶漢式(線程安全,同步代碼塊兒) 代碼演示 // 懶漢式 (線程安全_ 同步放法_) class Singleton{private static Singleton instance;private Singleton() {}// 提供一個靜態的公有方法 加入了同步處理的代碼// 解決線程安全問題// 即懶漢式// 我們在這里加一個關鍵字 synchroni…

同余定理證明

轉載于:https://www.cnblogs.com/cmyg/p/7206474.html

非常抱歉,

非常抱歉&#xff0c;好長一段時間沒寫了&#xff0c;但是我在博客園偶爾還會寫寫這個行業必須不斷地學才不會被淘汰&#xff0c;幸好我是主動接受知識&#xff0c;我喜歡這個。。。。。。。。。。轉載于:https://blog.51cto.com/52770825/1962949

乘基取整法是什么_深入理解計算機系統(六):進制間的轉換原理

目錄1、進制的介紹2、二進制轉換成其他進制3、十進制轉換成其他進制4、十六進制轉換成其他進制5、總結上一篇博客我們講解了信息的在計算機中是如何存儲以及如何表示的。但是對于各個進制的轉換只是一筆帶過了&#xff0c;后來作者仔細研究了進制轉換的原理&#xff0c;發現還是…

單例設計模式-雙重檢查

雙重檢查 雙重檢查應用實例 代碼演示: class Singleton{private static volatile Singleton singleton;private Singleton(){}// 提供一個靜態公有方法public static Singleton getInstance() {if (instance null) {synchronized (Singleton.class) {if (instance null) {…

symbian系統開發教程(一)

第一章&#xff1a;Symbian OS簡介作者&#xff1a;謝興 enigma19971hotmail.com---轉載需注明出處 下載word文檔1.1. Symbian系統簡介當前有很多手機運行Symbian OS&#xff0c;數量甚至超出您的想象。到目前為止已經有超過7500 萬、100 多種型號的手機運行Sym…

小談c#數據庫存取圖片的方式

第一種方式 文件夾與數據庫配合 /// <summary>/// 上傳圖片/// </summary>/// <param name"FUSShopURL">FileUpload對象</param>/// <param name"UpladURL">圖片要放到的目錄名稱</param>/// <returns>如果Fi…

c#課程設計簡單題目_《C#項目案例》課程設計題目

1《C#項目案例》課程設計題目一、課程設計的基本目標1、通過本次課程設計&#xff0c;熟練掌握開發語言C#和開發環境——.NET。開發語言的熟練需要通過編寫一定長度的代碼(1000&#xff5e;2000行代碼)才能達到&#xff0c;開發環境的熟練需要反復的程序調試訓練。2、加深對軟件…

筆記吧

map的第一個為關鍵值&#xff0c;只可讀&#xff0c;不可寫。第二個為對應值&#xff1b;vector的消除有很大的困擾&#xff0c;感覺存在很大的局限性&#xff1b;問題——不能夠復雜話&#xff0c;一個問題先從較淺的方面想起&#xff0c;其實在現有基礎和請況下&#xff0c;不…

單例設計模式-靜態內部類

靜態內部類 靜態內部類應用實例 代碼演示 package com.atguigu.principle.singleton.type07;/** * author victor * site https://victorfengming.github.io/ * company XDL * project java_mode * package com.atguigu.principle.singleton.type07 * created 2021-02-02 20…

Symbian系統開發教程(二)

第二章&#xff1a;數據類型與語法 作者&#xff1a;謝興 enigma19971hotmail.com 轉載需注明出處 下載word版本 Symbian系統已經提供了一套已經定義好的內置的數據類型。為了保證你的代碼是編譯器無關的&#xff0c;應當使用下面symbian系統提供的數…

design php 如何使用ant_Ant Design Pro初探—添加面包屑

Ant Design Pro初探—添加面包屑上次咱們說了新建頁面&#xff01;頁面建成了&#xff0c;開始填充頁面 新建面頁面不會的看上一片文章:Ant Design Pro初探—新建頁面首先是需要添加家面包屑&#xff0c;上代碼&#xff1a;import React, { PureComponent } from react;import …

C++主要操作符重載的定義和總結

C中預定義的運算符的操作對象只能是基本數據類型&#xff0c;實際上&#xff0c;對于很多用戶自定義類型&#xff0c;也需要有類似的運算操作。例如&#xff1a; class complex { public: complex(double r0.0,double I0.0){realr;imagI;} void display(); private: do…

原生JS數組去重的幾種方法

有時候我們做項目的時候往往會需要把數組里面一些重復的項去掉&#xff0c;但是原生JS有排序&#xff0c;有篩選等等&#xff0c;但是就是沒有數組去重怎么辦呢&#xff1f;這能怎么辦&#xff0c;自己手動實現嘛。&#xff08;以下代碼直接在原型上添加的的方法&#xff0c;為…