1. 程式人生 > >音訊編解碼總結

音訊編解碼總結

主要的speech codec 有: G.711, G.723, G.726 , G.729, ILBC,QCELP, EVRC, AMR, SMV

主要的audiocodec 有: real audio, AAC,AC3, MP3, WMA, SBC等,各種編解碼都有其應用的重點領域。

G.711

G.711就是語音模擬訊號的一種非線性量化,細分有二種:G.711 A-lawand和G.711 u-law.

不同的國家和地方都會選取一種作為自己的標準. 

G.711 bitrate 是64kbps. 

詳細的資料可以在ITU 上下到相關的spec,下面主要列出一些效能引數:
G.711(PCM方式:PCM=脈碼調製 :Pulse Code Modulation)
• 取樣率:8kHz
• 資訊量:64kbps/channel
• 理論延遲:0.125msec
• 品質:MOS值4.10 

G.723.1

G.723.1是一個雙速率的語音編碼器,是 ITU-T建議的應用於低速率多媒體服務中語音或其它音訊訊號的壓縮演算法;

其目標應用系統包括H.323、H.324等多媒體通訊系統,目前該演算法已成為IP電話系統中的必選演算法之一;

編碼器的幀長為30ms,還有7.5ms的前瞻,編碼器的演算法時延為37.5ms;

編碼器首先對語音訊號進行傳統電話頻寬的濾波(基於G.712),再對語音訊號用傳統8000-Hz速率進行抽樣(基於G.711),並變換成16 bit線性PCM碼作為該編碼器的輸入;在解碼器中對輸出進行逆操作來重構語音訊號;

高速率編碼器使用多脈衝最大似然量化(MP-MLQ),低速率編碼器使用代數碼激勵線性預測(ACELP)方法,編碼器和解碼器都必須支援此兩種速率,並能夠在幀間對兩種速率進行轉換;

此係統同樣能夠對音樂和其他音訊訊號進行壓縮和解壓縮,但它對語音訊號來說是最優的;採用了執行不連續傳輸的靜音壓縮,這就意味著在靜音期間的位元流中加入了人為的噪聲。除了預留頻寬之外,這種技術使發信機的調變解調器保持連續工作,並且避免了載波訊號的時通時斷。

G.726

   G.726有四種位元速率:40, 32, 24, 16 kbit/s Adaptive Differential Pulse CodeModulation(ADPCM-自適應差分PCM),最為常用的方式是 32 kbit/s,但由於其只是 G.711速率的一半,所以可將網路的可利用空間增加了一倍。

G.726具體規定了一個 64 kbpsA-law 或 µ-law PCM 訊號是如何被轉化為40, 32, 24或16 kbps 的ADPCM 通道的。在這些通道中,24和16 kbps 的通道被用於數位電路倍增裝置(DCME)中的語音傳輸,而40 kbps 通道則被用於 DCME 中的資料解調訊號(尤其是4800 kbps 或更高的調變解調器)。

G.726 encoder 輸入一般都是G.711 encoder的輸出:64kbps A-law oru-law.其演算法實質就是一個ADPCM, 自適應量化演算法。

G.729

 G.729語音壓縮編譯碼演算法
採用演算法是共軛結構的代數碼激勵線性預測(CSACELP),是基於CELP編碼模型的演算法;能夠實現很高的語音質量(長話音質)和很低的演算法延世;演算法幀長為10ms,編碼器含5ms前瞻,演算法時延15ms;其重建語音質量在大多數工作環境下等同於32kb/s的ADPCM(G.726),MOS分大於4.0;編碼時輸入16bitPCM語音訊號,輸出2進位制位元流;譯碼時輸入為2進位制位元流,輸出16bitPCM語音訊號;在語音訊號8KHz取樣的基礎上,16bit線性PCM後進行編碼,壓縮後資料速率為8Kbps;具有相當於16:1的壓縮率。
G.729系列在當前的VOIP得到廣泛的應用,且相關分支較多,可以直接從ITU網上得到source code 和相關文件。
G.729(CS-ACELP方式:ConjugateStructure Algebraic Code Excited Linear Prediction)
• 取樣率:8kHz
• 資訊量:8kbps/channel
• 幀長:10msec
• 理論延遲:15msec
• 品質:MOS值3.9

iLBC(internet lowbitrate codec)

 是全球著名語音引擎提供商Global IP Sound開發,它是低位元率的編碼解碼器,提供在丟包時具有的強大的健壯性。iLBC 提供的語音音質等同於或超過 G.729 和 G.723.1,並比其它低位元率的編碼解碼器更能阻止丟包。iLBC 以13.3 kb/s (每幀30毫秒)和15.2 kb/s (每幀20毫秒)速度執行,很適合撥號連線。
         iLBC的主要優勢在於對丟包的處理能力。iLBC獨立處理每一個語音包,是一種理想的包交換網路語音編解碼。在正常情況下,iLBC會記錄下當前資料的相關引數和激勵訊號,以便在之後的資料丟失的情況下進行處理;在當前資料接收正常而之前資料包丟失的情況下,iLBC會對當前解碼出的語音和之前模擬生成的語音進行平滑處理,以消除不連貫的感覺;在當前資料包丟失的情況下,iLBC會對之前記錄下來的激勵訊號作相關處理並與隨機訊號進行混合,以得到模擬的激勵訊號,從而得到替代丟失語音的模擬語音。總的來說,和標準的低位速率編解碼相比,iLBC使用更多自然、清晰的元素,精確的模仿出原始語音訊號,被譽為更適合包交換網路使用的可獲得高語音質量的編解碼。
此外,大部分標準的低位速率編解碼,如G.723.1和G.729,僅對300Hz——3400Hz的頻率範圍進行編碼。在這個頻率範圍裡,用G.711編解碼所達到的語音質量,就是傳統PSTN網路進行語音通話的效果。
iLBC充分利用了0——4000Hz的頻率頻寬進行編碼,擁有超清晰的語音質量,這大大超出傳統300Hz——3400Hz的頻率範圍。
廣受歡迎的Skype網路電話的核心技術之一就是iLBC語音編解碼技術,Global IP Sound稱該編碼器語音品質優於PSTN,而且能忍受高達30%的封包損失。
總的來說,在相同的包交換通訊條件下,iLBC的語音質量效果比G.729、G.723.1以及G.711更好,聲音更加圓潤飽滿,且丟包率越高,iLBC在語音質量上的優勢就越明顯!
目前,在國際市場上已經有很多VoIP的裝置和應用廠商把iLBC整合到他們的產品中。如:Skype, Nortel等。在國內市場上,目前尚無VoIP廠家正式推出支援“iLBC”的閘道器裝置,迅時公司 率先推出支援“iLBC”的中繼閘道器和IAD裝置。

如何計算一路話音消耗的頻寬

在voice這方面,是如何計算使用某種codec所消耗的頻寬呢?在預設情況下,把模擬話音轉換為數字話音後,按20ms一段20ms一段切開,用rtp封裝起來,然後包上udp header,ip header,最後是layer 2的包頭,然後發出去。
假設咱們用g.729編碼,並在ethernet上傳輸。一起來算算一路話音需要多大頻寬吧。
g.729每路話音是8kbit/s,那麼開始轉換:
8000bps / 8 = 1000 bytes/s,得到g.729每秒需要頻寬1000 bytes
那麼預設都是把20ms的話音封成一個packet,也就可以算出1秒內傳送多少個packet:
1s / 20ms = 50個
也就是說g.729每20ms需要的頻寬為:1000bytes/s / 50 =20bytes/s
之後乙太網幀頭6-byte,ip包頭20-byte,udp包頭8-byte,rtp包頭12-byte,這樣,再加上g.729的payload為20bytes,也就是說每20ms就要產生一個6 + 20 + 8 + 12 +20 = 66-byte長度的幀,那麼一秒就要傳送50個66-byte,等於3300-byte,轉成kbit/s: 3300byte/s * 8/1000 = 26.4kbit/s
最終得出g.729一路話音佔用頻寬(包括layer2 header)為26.4kbps

語音編碼的頻寬計算

VOIP Bandwidth consumption naturally dependson the codecused.  
VOIP消耗的頻寬一般取決於所使用的語音編碼.
When calculating bandwidth, one can't assume that everychannel is used all thetime. Normal conversation includes a lot of silence,which often means nopackets are sent at all.So even if one voice call sets uptwo 64 Kbit RTPstreams over UDP over IP over Ethernet (which adds overhead),the full bandwidthis not used at all times.  
計算頻寬時,不能假設每一個通道都處於使用狀態.正常的通話過程包括一系列的靜音,也就意味著並不是一直都有包在傳送.所以一個語音呼叫建立兩個經過UDP,IP和乙太網的64Kbit的RTP流(總開銷),全部頻寬並末一直被使用.
A codec that sends a 64kb stream results in a much largerIP network stream. Themain cause of the extra bandwidth usage is IP and UDPheaders. VoIP sends smallpackets and so, many times, the headers are actuallymuch larger than the datapart of the packet.  
一個傳送64kb流的語音編碼很大程度上都是IP網路流的結果.額外的頻寬使用主要是IP或UDP頭的增加.VOIP只傳送少量的包,很多時候,實際上是包頭遠遠大於包資料.Codec       BR          NEB
G.711      64 Kbps      87.2Kbps
G.729       8 Kbps       31.2 Kbps
G.723.1    6.4 Kbps       21.9Kbps
G.723.1    5.3 Kbps       20.8Kbps
G.726      32 Kbps      55.2 Kbps
G.726      24 Kbps      47.2 Kbps
G.728      16 Kbps      31.5 Kbps
iLBC        15 Kbps      27.7 Kbps  
BR = Bit rate
NEB = Nominal Ethernet Bandwidth (one direction)

根據我的使用經驗,8K的G.729加上IP封裝後達到32K,為了防封殺,還有的使用者使用IP Sec裝置將語音做成VPN,這樣G.729加上IP封裝,再加上VPN會達到60多K。
注:頭三段中文是我自己譯過來的,所以讀起來並不怎麼準確,而且會感覺彆扭,呵呵.多多包涵了.有興趣的朋友可以再譯一次.以供借鑑.
叢集通軟交換電話-所需頻寬說明
VoIP所需要的頻寬,通常取決於它所使用的codec編碼方法。在計算頻寬時,不能假定每個通道總是在使用之中。通常的會話過程中包括大量的靜默時段,就是不傳送任何資料包。
一個會話建立了兩個64kbps的RTP流,在UDP/IP/Ethernet上,並非在所有的時間都使用全部的頻寬。
一種編碼方法傳送64kbps的資料流,會導致大得多的IP網的資料流,引起額外頻寬的主要原因是IP和UDP的報文頭.當VoIP傳送小的資料包時,在大多數時候,報文頭實際上要比包中的資料大得多。
下面的表列出了各種編碼方法,所需要的頻寬:

編碼方法

編碼所需頻寬

實際所需要的網路頻寬

G.711

64 Kbps

87.2 Kbps

G.729

8 Kbps

31.2 Kbps

G.723.1

6.4 Kbps

21.9 Kbps

G.723.1

5.3 Kbps

20.8 Kbps

G.726

32 Kbps

55.2 Kbps

G.726

24 Kbps

47.2 Kbps

G.728

16 Kbps

31.5 Kbps

編碼所需頻寬,是指理論上所需要的頻寬。但在實際的傳輸過程中,還要付出其他的消耗,如報文頭。真正需要的頻寬是實際所需要的網路頻寬,這是大致的數值,而不是嚴格的精確值。實際所需要的網路頻寬通常是乙太網所需要的頻寬,或者是ppp連線所要的頻寬。
QQ使用的編碼技術GIPS,實際使用起來感覺聲音比較清晰,相對於SIP的編碼就顯得聲音有些不好,請問,GIPS理論佔用的頻寬有多大?能不能在SIP加入GIPS編碼方式?
GIPS公司用的語音編碼技術是 iLBC編碼。GIPS技術可根據頻寬狀況自動調節編碼位元速率,提供低位元速率高質量的音訊。

GIPS的核心技術(網路自適應演算法,丟包補償演算法和回聲消除演算法)可很好地解決語音延遲與回聲問題,帶來完美音質,提供比電話還清晰的語音通話效果。

iLBC若採30ms一幀,則理論頻寬需要13.33 kbps。若20ms 一幀,則理論頻寬需要15.2kbps 。
iLBC的語音質量要比 G.729A好些,但是能夠容忍丟失更多的包;也就是在丟包後,iLBC恢復能力更強。
iLBC計算複雜度與G.729A差不多。都是計算度比較複雜的演算法。
SIP終端中,也有使用 iLBC編碼的。skype 、QQ在語音編碼上並沒有什麼優勢。由於它們是私有協議,目前在穿透私網(NAT)和防火牆上,更好做些,所以媒體流的路徑,可能比SIP標準(目前)好做些而已。穿透易,路徑選得近些,音質就顯得好些。
G711在大約有 100Kbps 頻寬時,有很好的語音質量。
G.726 在大約有 50Kbps 頻寬時,有好的語音質量。
G.729 在大約有 30Kbps 頻寬時,有好的語音質量。

GIPS公司用的語音編碼技術是頻寬可變的位元速率,也就是根據網路 實際的頻寬狀態,調整語音編碼的壓縮比率。 也就是頻寬越少,語音壓縮得越厲害,失真損失越多;頻寬越好,就壓縮不厲害,失真損失少。
注意語音編碼用的壓縮,都是有失真壓縮,也就壓縮後語音會些失真。
什麼是iLBC?
iLBC是一種專為包交換網路通訊設計的編解碼,優於目前流行的G.729、G.723.1,對丟包進行了特有處理,既使在丟包率 相當高的網路環境下,仍可獲得非常清晰的語音效果。
iLBC所佔用頻寬?
   30ms ptime的iLBC所佔用的總通訊頻寬比通常採用的ptime 20ms的G.729的頻寬還要小,以下是iLBC與傳統編解碼佔用頻寬列表:
iLBC——語音質量的飛躍
語音質量一直是VoIP應用的主要難點,如何保證和提高IP網路傳輸語音的通話效果,是VoIP應用迫切需要解決的問題。“iLBC”編解碼的出現,解決了在包交換的IP網路中,傳輸語音所遇到的網路丟包嚴重影響通話質量等實際問題,實現了“語音質量的飛躍”。
下圖為在不同的網路丟包環境下,使用iLBC與G.729A、G.723.1編解碼的語音質量比較。
圖1. iLBC與 G.729A、G.723.1的比較(Dynastat, Inc)
無論在高丟包率條件下還是在沒有丟包的條件下,iLBC的語音質量都優於目前流行的G.723.1, G.729A等標準編解碼;而且丟包率越大,使用iLBC的語音質量優勢越明顯。通常情況下,為了衡量IP網路語音質量,將≥5%丟包率的網路情況定義為VoIP的極限網路條件。經過語音質量測試,即使在5%丟包率的情況下,iLBC仍然能夠提供相當於GSM手機的語音質量。

Internet話音分組傳輸技術

在IP網中傳輸層有兩個並列的協議:TCP和UDP。

TCP是面向連線的,它提供高可靠性服務;UCP是無連線的,它提供高效率的服務。

高可靠性的TCP用於一次傳輸要交換大量報文的情況,高效率的UDP用於一次交換少量的報文或實時性要求較高的資訊。

實時傳輸協議RTP提供具有實時特徵的、端到端的資料傳輸業務,可以用來傳送聲音和活動影象資料,在這項資料傳輸業務中包含了裝載資料的識別符號、序列號、時戳以及傳送監視。通常RTP的協議資料單元是用UDP分組來承載的。而且為了儘量減少時延,話音淨荷通常都很短。圖3表示一個IP話音分組的結構,圖中 IP,UDP和RTP的控制頭都按最小長度計算。 這種IP話音分組的開銷很大,約為66%~80%。於是有人提出了組合RTP分組的概念

 採用這種組合複用方法的確可以大大提高傳輸效率,但是目前尚無標準。

如果支援RTP的網路能提供組播功能,則它也可用組播方式將資料送給多個目的使用者。

RTP 本身沒有提供任何確保及時傳送的機制,也沒有提供任何傳輸質量保證的機制,因而業務質量完全由下層網路的質量來決定。同時,RTP不保證資料包按序號傳送,即使下層網路提供可靠性傳送,也不能保證資料包的順序到達。包含在RTP中的序列號就是供接收方重新對資料包排序之用。

與RTP相配套的另一個協議是RTCP協議。RTCP是RTP的控制協議,它用於監視業務質量並與正在進行的會話者傳送資訊。

因此,我們可以根據這個圖3計算出每路G.729編碼的頻寬佔用量:

頻寬佔用=傳輸的總位元組數 / 傳輸的總時間

頻寬=(20byte(IP頭)+8byte(UDP頭)+12byte(RTP頭)+20byte(資料))/20ms=60byte/20ms

以上計算公式含義為:每20ms,需要傳輸的位元組數包括20個位元組的IP包頭,8個位元組的UDP包頭,12各位元組的RTP包頭,20位元組的語音資料共60位元組,結果為:3 byte/ms=3000byte/s=24000bit/s=24kbit/s。

因此,理論上G.729中每個資料包包含兩幀語音的編碼方式,佔用頻寬24kbit/s,而又有封裝效率的估算公式為:

封裝效率=[(壓縮後的語音包× n × 幀長/ 8)] / [(壓縮後的語音包×n× 幀長/ 8 )+40] 。

n表示打進n個語音包。

以G.729信源編碼為例,如一個RTP包打進一個語音包,則實際傳送碼流為40kbit/s,時延約為 10 ms;

如打兩個語音包,則實際傳送碼流為24kbit/s,時延約為 20ms;

如打四個語音包,實際傳送碼流為16kbit/s,時延為40ms。

為保證編碼打包的時延,若將預設語音包的數量定為兩個,實際傳送碼流即為24kbit/s,而不是8kbit/s。

因此對於語音業務這類實時性要求非常高的業務,要保證語音的質量,根據ITU-T標準語音的全程往返時延應當控制在450ms為宜,編碼打包後形成的單位碼流通常是在20kbit/s。

由以上論述我們知道,每路G.729編碼的IP語音佔用約20Kbit/s的頻寬,實際佔用的總頻寬數=語音總路數*20Kbit/s。

語音編解碼方式及其所佔用的頻寬的關係
語音編碼的頻寬和實際所佔用的頻寬是不同的,語音編碼的頻寬是實際語音包的頻寬,而語音包在IP網路上傳輸時,還需要增加各種包頭,如RTP包頭、UDP包頭、IP包頭。由於語音包本身很小,所以相對而言這些額外的頻寬是很可觀的。在下表中列出了各種編碼方式下的打包時長以及所對應的實際頻寬。

實際頻寬與語音編碼和打包時長的關係:
語音編解碼        打包時長     語音資料頻寬    實際所佔頻寬
G.723.1(5.3K)       30ms        5.3K            5.3*(20+40)/20=   16.2K 
G.723.1(5.3K)       60ms        5.3K            5.3*(40+40)/40=   10.6K
G.723.1(6.3K)       30ms        6.3K            6.3*(24+40)/24=   16.8K
G.723.1(6.3K)       60ms        6.3K            6.3*(48+40)/48=   11.6K
G.729               20ms        8K              8*(20+40)/20=   24K  
G.729               60ms        8K              8*(60+40)/60=   13.3K
由上表可以很明顯的看出,打包時間越長,所佔用的實際頻寬越小,但時延越大。

說明
1、RTP包頭:12bytes   UDP包頭:8bytes    IP包頭:20bytes。
2、表中的頻寬計算中沒有包含物理幀頭,需根據具體網路而定。
3、表中的頻寬計算中,沒有考慮靜音檢測。靜音檢測的效率按60%計算。

音訊:

名稱      取樣率 取樣精度 佔用頻寬(kbps)
G.723.1 8k 16bit 5.3 ~ 6.3kbps
ILBC 8k 16bit 13.33 ~ 15.2kbps
CCITT A-LAW 8k 16bit 64 ~ 128kbps


視訊:

影象解析度 —— 幀數 佔用頻寬(kbps)
160 × 120 —— 5 ~ 30fps 20 ~ 100kbps
176 × 144 —— 5 ~ 25fps 20 ~ 110kbps
320 × 240 —— 5 ~ 30fps 40 ~ 200kbps
352 × 288 —— 5 ~ 25fps 40 ~ 220kbps
640 × 480 —— 5 ~ 30fps 120 ~ 1000kbps
720 × 576 —— 5 ~ 25fps 120 ~ 1500kbps

國際電信聯盟 G 系列典型語音壓縮標準的引數比較

演算法 型別 位元速率 (kbit/s) 演算法延時 (ms)
G.711 A-Law / μ -Law 64 0
G.722 SB-ADPCM 64/56/48 0
G.723.1 MP-MLQ/ACELP 6.3/5.3 37.5
G.726 ADPCM 16/24/32/40 0
G.727 Embedded ADPCM 16/24/32/40 0
G.728 LD-CELP 16 < 2
G.729 CS-ACELP 8 15


PCM的8K取樣率的由來:Nyquist(那奎斯特)定理認為如果以最高頻率2倍的速率取樣,就可以將訊號完整地恢復到模擬形式——大多數聲音都低於4KHz;
A-law與u-law,都使用壓縮演算法在8位中得到12-13位的PCM質量,某些情況下u-law的聲音質量稍好於A-law;如果需要u-law到a-law的轉換,則由u-law國家負責;
編碼器分類:波形編碼器——PCM、ADPCM,利用波形冗餘特性編碼的壓縮技術;源編碼器——利用聲音產生的源特性,只發送原始語音的簡化特徵資訊,包括LPC(linear predictivecoding),CELP(code excitedlinear prediction compression),MP-MLQ(multipulse,multilevel quantization)等
G.7xx系列與PCM等的關係,前者是標準,後者是演算法;
衡量編碼優劣的標準:bit率,時延,複雜度,質量;
語音質量的評測:主觀評測MOS(mean opinion score,平均意見得分),由人根據主觀感受給出;客觀評測PSQM(Perceptual SpeechQuality Measurement,知覺語音質量測量),由計算機根據某些客觀資料給出。