全稱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 | 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 | 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 | 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 | 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數據了。
?
<!--[if !supportLists]-->1.?????? <!--[endif]-->文件頭格式:
?AMR 文件支持單聲道和多聲道。單聲道和多聲道的文件頭是不同的。
?單聲道:
?AMR-NB文件頭: "#!AMR/n" (or 0x2321414d520a in hexadecimal)(引號內的部分)
?AMR-WB 文件頭:"#!AMR-WB/n" (or 0x2321414d522d57420a in hexadecimal).(引號內)
多聲道:
多聲道的文件頭包含一個magic number和32bit channle description域。
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).
32bit的channel description域的定義如下:
其中 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都有,一個浮點庫,一個是定點庫,要分清楚