摘要 調查顯示了用于IP網絡語音應用的各種丟包補償技術。丟包補償技術可以分為兩類:基于發送端補償和基于接受端補償。基于發送端補償包括前向差錯糾正、交織和重傳技術;基于接受端補償包括了多種錯誤隱蔽算法。最后給出了應用建議。
一、基于發送端補償
基于發送端補償可以分為兩類:主動重傳(本文不討論)和被動通道編碼。被動通道編碼包含傳統的前向差錯糾正技術(FEC)和基于交織的技術。按照和媒體內容的關系,前向差錯糾正包括與媒體無關的方法和利用音頻屬性的媒體相關方法。這些總結如圖1所示。
圖1 基于發送端補償技術分類
為了便于討論,我們把一個語音包區分為多個單元。
與媒體無關前向差錯糾正
這種方式中每n個媒體數據包附帶k個校驗包。校驗包的每個比特都是由相關的數據包的同位置比特產生的。圖2是每4個媒體數據包附帶1個校驗包的情況。
優點:該方式補償與具體的媒體內容無關,計算量小,易于實施。
缺點:不能立即解碼,引入延時,帶寬增加。
圖2 與媒體無關前向差錯糾正
媒體相關前向差錯糾正
一種簡單的抗丟包方式是,采用多個包傳送同樣的音頻單元。一旦丟了一個,信息可以從另外一個包含該單元的恢復出來。圖3表示了媒體相關前向差錯糾正的原理。
第一個傳輸的復本稱為主要編碼,第二個傳輸的復本稱為次要編碼。次要編碼可以是和第一個相同,但是大部分采用較低碼率和較低音質的編碼技術。編碼器的選擇取決于帶寬需求和計算復雜度需求。次要編碼采用以下方法:
圖3 媒體相關前向差錯糾正的原理
短時能量和過零率測量;
低比特分析合成編碼,比如LPC(2.4-5.6kb/s);
全速率GSM編碼(13.2kb/s)。
如果主要編碼器能做到高音質和低碼率,那么次要編碼器可以采用和主要編碼器一樣的方法。比如,ITU G.723.1可以采用這種方式,因其音質好,碼率5.3/6.3kb/s,但計算量大。
媒體相關前向差錯糾正引起了包大小的額外開銷。比如,8kHz PCM U律的主要編碼器占用64kb/s帶寬,全速率GSM編碼的次要編碼器占用13.2kb/s帶寬,這樣就增加了20%的帶寬開銷。但是,額外的帶寬開銷并不是固定而是可變的。分析表明,利用語音的特性,并不需要在每個語音包附加媒體相關前向差錯糾正,加上這些策略,可以節省30%的帶寬。
媒體相關前向差錯糾正的一個好處就是不會引入大的延時,最多也就是一個包的延時。這適合實時交互的應用。
交織
當我們考慮比語音包還小的語音單元并且可以承受較大的延時,交織是一種很有用的抗丟包技術。語音單元在傳輸之前重新排序,這樣在傳輸流中原來領近的語音單元變成有規律間隔的單元,接收端再按原來的順序排列回來。圖4顯示20ms包分為5ms單元的例子。可以看到傳輸的一個丟包變成了分散的多包中的單元丟失。
圖4 跨多個包的交織單元
交織帶來兩個好處:
長時間的丟包給聽覺帶來不舒適和難以理解,但是短時間的單元丟失是更易被聽覺接受的,也容易理解;
錯誤隱藏比較容易處理短時間的單元丟失,因為時間短語音的變化小。
交織的不足就是也會引入延時,只適合非交互式的應用。交織的另外一大好處就是不會引起帶寬需求的增加。
二、基于接收端補償
當發送端不能做到較好的丟包補償或發送端不能參與丟包補償時,需要在接受端進行丟包補償。錯誤隱蔽算法就是接受端的丟包補償技術,它產生一個與丟失的語音包相似的替代語音。這種技術的可能性是基于語音的短時語音相似性,它可以處理較小的丟包率(<15%)和較小的語音包(4-40ms)。當丟包的長度達到音素的長度(5-100ms),該技術就不適應了,因為整個音素都會丟失。
圖5錯誤隱藏技術分類
從圖5可見,基于接收端的差錯隱藏技術可以分為三類:
1、 基于插入的方法
插入一個填充包來修復丟包,填充包一般都很簡單,比如靜音包、噪聲包或重復前面的包。雖然容易實現。但這種方法的效果是很差的。該方式的缺點就是沒有利用語音的信息來重新產生信號。
拼接法(Splicing):直接把丟包兩端的語音拼接起來,這種最簡單的方法不但打亂了語音的時鐘順序,而且只適合很小的丟包間隔(4-16ms)和極低的丟包率,丟包率大于3%就不能忍受了。
靜音置換法(Silence substitution):該方法在丟包處加入靜音,這樣保持了語音的時鐘順序。它只有在很小的包大小(<4ms)和很低的丟包率(<2%)是有效的。隨著包大小的增加,他的性能明顯下降,到40ms的包大小就完全不能接受了。
噪聲置換法(Noise substitution):該方法在丟包處加入背景噪聲或舒服噪聲。它比靜音置換法好處是提高了語音的可理解性,效果較好。
重復法(Repetition):利用接受到的最近包來重復代替丟失的包,具有低計算量和適度的音質。較長的后續丟失包可以衰減重復的包來產生。比如GSM中,丟包前20ms采用重復,后續320ms的通過衰減重復包到零。
2、 基于插值的方法
該方式通過某種形式的模式匹配和插值技術以期望得到與原來丟包相似的代替包。該方式比插入方法實現難度要大但效果好些。該方式相對插入法的好點就是考慮到了語音的變化信息來產生信號。
波形置換法(Waveform substitution):該方式使用丟包前(可選后)的語音來找到合適的信號代替丟包。它通過單端或雙端模式來確認合適的基音周期。單端模式時,基因周期重復跨越丟包區域,雙端模式時需要對兩邊的周期進行插值。
基音波形復制法(Pitch waveform replication):這是一種帶有基音周期檢測算法的改進型波形置換法。它利用丟包雙端的信息,在無聲狀態時可以重復前面的包,有聲狀態時重復基音波形。其效果比波形置換法要好。
時間尺度修正法(Time scale modification):該方法允許語音從丟包兩端按基音周期伸展來跨越丟包區域,在兩者交疊的地方進行平均。該方法計算量較大,但是效果比前面兩個好些。
3、 基于重構的方法
該方式通過丟包前后的解碼信息來重構產生一個補償包。該方式音質最好但是實現難度也是最大的。重構修復技術使用語音壓縮算法的知識來獲得編碼參數,這樣丟失的包就可以合成。該方法依賴于編碼算法,但是由于有大量信息可用,效果較好,計算量也大。
傳輸狀態插值法(Interpolation of transmitted state):對變換域編碼和線性預測編碼而言,解碼器可以在傳輸狀態之間進行插值。比如 ITU G.723.1對丟包兩端的線性預測系數進行插值,使用原先幀的周期激勵。這種方法的計算量和解碼是一樣的,不會增加。
基于模型的恢復法(Model-based recovery):該方法把丟包前后的語音嵌入到一個語音模型中用來產生丟失的包。有研究者采用過去的樣本對語音進行自回歸分析建模。這種方法的適應性是因為,第一,間隔的語音幀如果足夠小(8-10ms)就有很強的相關性;第二,大部分的低比特率編碼技術就是采用的自回歸分析和激勵信號的模型。
圖6 錯誤隱藏技術的復雜度和質量關系
要獲得好的丟包補償效果就必須采用復雜的算法。圖6顯示了各種錯誤隱蔽算法的復雜度和質量對應關系,可以根據需要采用。比如帶有衰減的包重復法是一種折衷方案。
三、應用建議
非交互式應用
對于非交互式的語音應用,比如多點廣播,對延時的要求沒有音質高。交織是強烈推薦的丟包補償技術,對于交織后的語音,還要采用合適的錯誤隱蔽算法。與媒體無關的前向誤差糾正技術也適合這種應用。
交互式應用
交互式的應用比如IP電話,對延時很敏感,因此,交織和與媒體無關的前向誤差糾正技術都不適合這種應用。媒體相關的前向誤差糾正技術只引入很小的延時和較小的帶寬增加,是較好的選擇,可以利用低比特率的次要編碼器獲得丟包補償效果。另外,還可以采用帶有衰減的包重復法等效果較好計算簡單的錯誤隱蔽算法進一步提高音質。
本文出自 “碧海銀沙” 博客,請務必保留此出處http://silversand.blog.51cto.com/820613/166161