170 likes | 380 Views
G.711 簡介. Speaker : Chungyi Wang Adviser : Quincy Wu Date : 20070305. outline. PCM G.711 的取樣基本原理 A-law Mu-law A-law V.S Mu-law Reference. PCM. PCM (Pulse code modulation) 波形編碼,把類比的音訊信號轉換為數位信號 G.711 有兩個編碼方式,分別是 A-law Mu-law
E N D
G.711 簡介 Speaker : Chungyi Wang Adviser : Quincy Wu Date : 20070305
outline • PCM • G.711 的取樣基本原理 • A-law • Mu-law • A-law V.S Mu-law • Reference
PCM • PCM (Pulse code modulation) • 波形編碼,把類比的音訊信號轉換為數位信號 • G.711有兩個編碼方式,分別是 • A-law • Mu-law • G.711的編碼方式會將14bits(所以會用16bits儲存)的樣本訊息轉換成8bits的樣本以期傳送資料壓縮 from:http://en.wikipedia.org/wiki/Pulse_code_modulation
G.711 的取樣基本原理 • 低位數的差異 • 取較具影響的位數 • 前N位較具影響,好比說N = 5 (強度1位,樣本4位) • 由16bits轉成8bits • 傳送時將重要的位數encode成8bits (保留重要位數) • 接收端將此decode成PCM的16bits (有些許失真)
A-law(1/4) • 規則 • 取影響最大的5位 • s 代表的是sign,於樣本為正數時填1 • 逢偶數位取補數 • s x’ x x’w x’ y z’
A-law(2/4) • 範例 -- 3210 (0000110010001010)2 => 10011100 • 取s,s = 1 • 取強度位置 • 0 0001 10010001010 • Xs = 100 • 取高位樣本 • 0 0001 10010001010 • wxyz = 1001 • 結合以上數字 • sxxxwxyz • 11001001 • 逢偶位數取補數 • 1 1001001 • 1 0011100
A-law(3/4) • 範例 -- 321(0000000101000001)2 => 11000001 • 取s,s = 1 • 取強度位置 • 0 0000001 01000001 • Xs = 001 • 取高位樣本 • 0 0000001 01000001 • wxyz = 0100 • 結合以上數字 • sxxxwxyz • 10010100 • 逢偶位數取補數 • 1 0010100 • 1 1000001
A-law(4/4) • 範例程式 • 使用mediastreamer2的g711common.h • unsigned char s16_to_alaw(int pcm_val) • 將16bit的原始樣本 encode 成為8bit的a-law碼 • int alaw_to_s16(unsigned char a_val) • 將8bit的a-law碼 decode 成為16bit的原始樣本 • unsigned char s16_to_ulaw(int pcm_val) • int ulaw_to_s16(unsigned char a_val)
Mu-law(1/6) • 規則 • 1.取得範圍值,得到8-bit基本值b(ex 0x80) • 2.取得間隔數值size(ex 256)
Mu-law(2/6) • 規則 • 3.取得區間基本值rb(ex 2015) • 4.算出與區間基本值rb的距離d • d = rb - sample • 5.依據間距大小size,算出平移量 • s = d / size • 6.與8-bit基本值相加 • output = b + s
Mu-law(3/6) • 範例 – 2345 => 0x9D • 1.取得範圍值 • range => 4063~2015 • 1-1.得到8-bit基本值 • b = 0x90 • 2.取得間隔數值 • size = 128 • 3.取得區間基本值 • rb = 4063 • 4.算出與區間基本值rb的距離d • d = rb – sample = 4063 – 2345 = 1718
Mu-law(4/6) • 5.依據間距大小size,算出平移量 • s = d / size = 1718 / 128 = 13.42… => 13 • 6.與8-bit基本值相加 • output = b + s = 0x90 + 13 = 9D
Mu-law(5/6) • Decode • 建立對應的陣列 • 大小為255 • 先前的2345 => 0x9D, • 執行結果得到>>ulaw 9d becomes 2271
Mu-law(6/6) • 範例程式 • 秀出Mu-law全部的Decode結果
A-law V.S Mu-law (2/2) • 如果將A-law的間距加大一倍到8192,那麼與Mu-law的量化執行結果會相近 (link 3) • 在A-law於較小的數值有較大的動態範圍值(dynamic range) ,也就是靜音時會比較採樣雜訊,而不是僅取靜音 (link 3) • 於33-127的數值兩者的執行效果相近,但是Mu-law如果在數值32之前的區間加入粒狀理論(granularity),Mu-law會較少使用all-zero來取代雜音的訊息量化 (link 4)
Reference • http://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-G.711-198811-I!!PDF-E&type=items • ITU-T G.711 pdf • http://en.wikipedia.org/wiki/G.711 • Wikipedia : G.711 & A-law • http://en.wikipedia.org/wiki/Mu-law • Wikipedia : Mu-law • http://72.14.235.104/search?q=cache:CIgTx4nuxeQJ:telecom.tbi.net/pcm1.html+mu-law+Comparison+with+A-law&hl=zh-TW&ct=clnk&cd=5&gl=tw • A-law & Mu-law 較詳盡的介紹