丟包補償技術(Packet Loss Concealment——PLC)是iLBC Codec中非常重要的一項技術,更是VOIP Codec應用中不可缺少的組成部分。iLBC的PLC只是在解碼端進行封包補償處理。在解碼端根據收到的bitstream逐幀進行解碼的過程中,iLBC decoder首先拿到每幀的 bitstream 要判斷當前幀是否完整,如果沒有問題則按照正常的iLBC 解碼流程重建語音訊號,見《深入剖析iLBC 解碼器原理》;如果發生了語音封包丟失,那麼就進入PLC單元進行處理。PLC主要根據前一幀的解碼資訊,利用基音同步重複的方法近似替代當前的丟失幀,以達到丟包補償。
一、PLC unit 的幾種情形
1、過去幀、當前幀都接收正確
進入正常的iLBC decoder解碼流程,需要儲存當前幀的狀態資訊,這些狀態資訊包括LPC資訊、解碼後的殘差訊號等。如果下一幀的位元速率丟失的話,就要用到這些儲存的資訊。
2、僅當幀發生丟包
如果當前幀沒有丟失,那麼進入PLC unit重建LPC係數和殘差訊號。後面會詳細介紹LPC和殘差訊號的補償方法。
3、連續多幀發生丟包
如果發生連續多幀丟包,那麼就需要多次進入PLC unit,並且需要利用經過補償的幀狀態資訊。值得注意的是,越靠後面丟失的幀越難以精確的重建,所以對連續丟包的增益採用逐幀遞減,以避免引入更大的訊號失真。
4、過去幀經過PLC處理,需要與當前幀平滑處理
為了使經過PLC補償的幀與接下來沒有丟包的幀保持語音連續而需要進行平滑,主要根據前後幀的相關性處理。
二、PLC重建LPC係數
iLBC 的PLC對於丟失LPC的補償是採用了過去幀的最後一個子幀的LPC係數來簡單的重建。這個方法是顯然的,因為無論從空間上還是時間上最後一個子幀都與當前丟失的LPC具有最大相關性。但是這種簡單的複製當處理連續多幀時也顯然會引入更大的失真。
三、PLC重建殘差訊號
激勵訊號(殘差訊號)通常可以分為兩部分組成:准周期成分和類雜訊成分。因此PLC實際上首先需要重建這兩個部分,准周期成分可以根據測量前一幀的基音周期來近似得到,類雜訊成分則可以通過產生隨機雜訊得到,二者的能量比例也可以借鑒前一幀的比例關係。所以首先要對前一幀進行基音檢測,然後以基音同步的方式重建丟失幀的話音部分,然後利用相關性得到類雜訊的增益,最後進行混合以重建整個殘差訊號。
在連續丟幀的情況下,為了減少各個補償幀之間的相關性,會將能量進行逐幀遞減,但依然會產生一定的聽覺雜訊。如果採用插入的方法,雖然可能音質會好些,但是卻會引入更大的延時。
四、iLBC PLC的缺點
在連續丟幀的情況下,PLC所補償的各個語音幀具有相同的頻譜特性(相同的LPC造成)和基音頻率,非常容易引入一種可察覺的雜訊,尤其是當基音頻率較高的時候,這種因為過分的周期性所引起的。通過適當的插入可以緩解這一問題,但往往引入更大的延時。
參考資料:
1、IETF:RFC3951.txt
2、潘搏勝《iLBC解碼程式進階處理之研究》
一家之言,歡迎討論!