縮寫解釋
SID Silence Descriptor (Comfort Noise Frame)
1 AMR編碼介紹
AMR編碼是一種自適應多速率編碼,根據傳輸信道的實際情況,調整編碼模式、速率和糾錯碼位數來保證語音質量,在數據壓縮和容錯上面取得平衡。一般語音質量越高抗干擾能力越弱。在GSM網絡,基站、基站控制器可根據網絡質量和信號質量情況動態調整語音編碼模式以提高不同網絡狀況下的語音質量。現在手機終端基本上都支持AMR編碼,Nokia從2004年開始提供支持AMR的終端,目前所有的新型號終端都支持AMR。
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域終端之間的通信場景,各個場景的特點見協議描述。
AMR和AMR-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-WB的9種速率索引表,見[2]
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語音幀結構
AMR和AMR-WB的語音數據結構分別詳見TS 26.101,26.201描述,這裏介紹AMR-NB的語音數據編碼結構。
語音數據位根據重要性分成類,A、B、C類,其對錯誤的敏感性和重要性依次爲A>B>C,如下,4.75Kb模式的總的位數爲95位,A類42位,B類53位。
AMR淨荷數據把重要的數據位放在前面,不重要的放在後面,爲了把語音數據中重要的數據位放置A類,需要對編碼器編出的比特位進行重排序,26.101把編碼後數據位的位置和重排序的位置對應起來形成一張表供查詢,
- for j = 0 to K-1 //第0位到第K-1位全部重排
- d(j) := s(tablem(j)+1); //查對應模式的表找到重排後相應位置
例如下表6.7kb模式的排序表,共134位,第82位數據位排序後對應18位
上節節省帶寬模式和字節對齊模式,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包的大小、時戳是否正確。
參考
[1] 3GPP TS 26.101
[2] 3GPP TS 26.201
[3] rfc3267,rfc4867