《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信与网络 > 业界动态 > 一种基于G.711包丢失隐藏改进算法的研究

一种基于G.711包丢失隐藏改进算法的研究

2008-07-14
作者:严志军1,2, 许希斌2

??? 摘 要:? 對一種改進(jìn)的高性能包丟失隱藏算法" title="包丟失隱藏算法">包丟失隱藏算法進(jìn)行了分析。此算法以G.711脈沖編碼調(diào)制" title="編碼調(diào)制">編碼調(diào)制為基礎(chǔ),建立一種新型線性預(yù)測模型,并通過仿真得出此改進(jìn)算法對VoIP語音丟失包能起到比較好的恢復(fù)效果。
??? 關(guān)鍵詞:? VoIP? 平均意見得分? 包丟失隱藏算法? 線性預(yù)測

?

??? 當(dāng)前VoIP受到人們越來越多的喜愛和歡迎,其受關(guān)注程度逐步超越傳統(tǒng)的以電路交換為基礎(chǔ)的公用交換電話網(wǎng)絡(luò)(PTSN)。然而IP網(wǎng)絡(luò)需要解決的問題不僅是基于非實時業(yè)務(wù),更重要的是實時業(yè)務(wù)。而IP網(wǎng)絡(luò)中實時業(yè)務(wù)的保證主要在以下幾個方面:抖動、延時和信道錯誤。這些錯誤的產(chǎn)生就會導(dǎo)致收端的包丟失,從而降低語音的通話質(zhì)量。以模擬為基礎(chǔ)的編碼器,特別是國際電聯(lián)(ITU-T" title="ITU-T">ITU-T)標(biāo)準(zhǔn)的G.723.1[1]和G.729-A[2],由于它們的低速率(G.723.1為5.3k~6.4kbps,G.729-A為8kbps)而普遍用于IP網(wǎng)絡(luò)語音編碼。這些編碼器內(nèi)嵌的包丟失隱藏算法可靠地保證了網(wǎng)絡(luò)中包丟失帶來的失真等。但是,這些算法都需要比較多的內(nèi)存保存足夠完好的傳輸幀來恢復(fù)丟失的幀,這樣可能會因此破壞網(wǎng)絡(luò)中一些好的包而導(dǎo)致“State Error”出現(xiàn)。另一方面,脈沖編碼調(diào)制(PCM,64kbps)相對以上兩種編碼方式有更高的質(zhì)量,但是它沒有能力對丟失的包進(jìn)行恢復(fù)。與模擬編碼器相比,PCM調(diào)制方式能更迅速恢復(fù)丟失的包。相對簡單的PCM調(diào)制方式和其良好的性能使得其在VoIP采用的編碼算法中占有重要的地位。
??? 在PCM流中,已經(jīng)有好幾種方法描述幀丟失問題。最簡單的就是在幀丟失期間,插入靜音包。這種方式雖然在一定程度上解決了包丟失問題,但是帶來的后果是難以忍受的通話靜音。其他的隱藏算法主要是依據(jù)語音相對固定的特性。還有一種比較普遍的商業(yè)包丟失隱藏算法原理是復(fù)制接收端最后一個好的語音包作為丟失的包。這種算法較前一種算法有所改進(jìn)但是還是不能得到高質(zhì)量" title="高質(zhì)量">高質(zhì)量的語音包[3]。
??? 還有一種標(biāo)準(zhǔn)是ANSI標(biāo)準(zhǔn)T1-521-2000(附錄B)。這種算法需要良好的線性預(yù)測模型預(yù)測丟失的語音波形。它完全采用模擬為基礎(chǔ)的codecs方式。它首先對從前一個傳輸完好的語音包進(jìn)行完整的分析;其次,綜合單元利用上述分析的一些參數(shù)連同最近接收的語音采樣點(diǎn)進(jìn)行合成,成為一個最相似語音包代替丟失的語音包。算法的延時為5ms。同時算法計算也比較復(fù)雜(每10ms包2.3MIPS)。此算法得到的語音包的質(zhì)量與ITU-T G.711附錄A相當(dāng)[4]。
1 APLC算法描述
??? ITU-T制定的G.711標(biāo)準(zhǔn)中,已經(jīng)提供了其PCM編碼方式的包丟失隱藏算法(PLC)[5]。這種方法主要是波形替代,其原理如下:首先,PLC算法通過語音采樣進(jìn)行基音周期檢測,并且把語音采樣點(diǎn)保存到歷史buffer中(history buffer)(390個采樣點(diǎn),8kHz采樣頻率);其次隱藏單元指針指向一個基音周期末端,然后復(fù)制包丟失期間的語音信號。預(yù)先復(fù)制的基音周期放到一個由丟失的語音段產(chǎn)生的間隙。算法同時對最后一個接收到的完好語音包和丟失的包進(jìn)行迭加,這種迭加保證了語音傳輸?shù)钠交妥匀?。同時算法在迭加過程中有3.75ms的延時。
??? 上述算法PCM編碼以線性預(yù)測為基礎(chǔ),其線性預(yù)測公式為:

???

其中,S(n)為第n個數(shù)據(jù)采樣點(diǎn),p為預(yù)測序列值,a(i)為線性預(yù)測系數(shù),b(n)為線性預(yù)測誤差。
??? 從(1)式可見,語音采樣S(n)由二部分組成,第一部分為線性預(yù)測系數(shù)與一組過去的樣本值S(n-1),S(n-2),…S(n-p)線性組合而成,它可以看成從S(n)過去的樣本值來預(yù)測或估計當(dāng)前值S(n)的結(jié)果,故又稱之為線性預(yù)測值;第二部分是輸入的預(yù)測誤差b(n)。
??? 如果LPC從連續(xù)的采樣點(diǎn)中得不到相關(guān)系數(shù)的話,b(n)誤差會比較大。在發(fā)生包丟失的情況下,前一個采樣點(diǎn)通過公式(1)可以得到。但是輸入的預(yù)測誤差b(n)是不確定的。在ITU-T標(biāo)準(zhǔn)G.711-Annex A中,丟失幀的基音周期預(yù)測信號通過一種類似的隱藏算法——反向基音周期復(fù)制(RORPP)實現(xiàn)。公式如下:

???

其中,S(n)表示LPC預(yù)測,為基音周期預(yù)測周期信號,G為基音周期預(yù)測系數(shù)。設(shè)參數(shù)α、β,(2)式可變?yōu)椋?/FONT>

???

??? 再設(shè)μ、v,則上式變?yōu)?

???

??? 參數(shù)μ、v根據(jù)網(wǎng)絡(luò)中包丟失的嚴(yán)重程度分別賦予不同的值。
??? 其工作原理如下:
??? 在PCM解碼過程中,接收端對接收的包進(jìn)行解碼并且發(fā)送到音頻輸出口。同時為了支持包隱藏算法,解碼輸出的信號同時保存到總長為390個采樣的history buffer中,此history buffer用來計算自相關(guān)參數(shù)、預(yù)估基音周期和LP系數(shù),并且提供預(yù)先的采樣點(diǎn)S(n-i),i??? 丟失的語音包中至少有一個包,計算丟失包恢復(fù)的參考值主要為丟失的前10ms包(首次丟失幀)。在包丟失開始期間,基音周期檢測單元根據(jù)ITU-T包丟失隱藏標(biāo)準(zhǔn)G.711-A計算出自相關(guān)系數(shù)的不同峰值來預(yù)估當(dāng)前的基音周期,采樣點(diǎn)是由這種基音周期檢測方式計算出來的。與此同時,系統(tǒng)計算出最后20ms語音采樣點(diǎn)前50個自相關(guān)系數(shù)。LP分析器通過Levinson-Durbin算法計算出LP系數(shù)。為了能覆蓋到至少一個基音周期,LP預(yù)測序列值設(shè)為50。前50個自相關(guān)系數(shù)用于LP合成濾波器(語音模型)中。
??? 眾所周知,一個語音幀有80個采樣點(diǎn)。在此算法中,在語音丟失幀中采樣90個點(diǎn),以達(dá)到平穩(wěn)傳輸包的目的。最后10個采樣點(diǎn)是根據(jù)丟失的包進(jìn)行預(yù)測的值。如果下一個包仍然丟失,則這10個采樣點(diǎn)就作為下個丟失包的前10個采樣點(diǎn);如果下一個包沒有發(fā)生丟失,則這些采樣點(diǎn)與一衰減系數(shù)" title="衰減系數(shù)">衰減系數(shù)相乘,并且和下一個完好的語音包的前10個采樣點(diǎn)(和一升序系數(shù)相乘)迭加。迭加后的輸出即用來替代包丟失后的下一包頭10個完好的采樣點(diǎn)。這種處理保證了丟失語音部分到完好語音包的平滑傳輸。
??? 如果包丟失超過10ms,則只需稍微改變ITU-T G.711-A中長期預(yù)估采樣值,而仍然采用上次丟失計算出的那些參數(shù)進(jìn)行下10ms丟失包的恢復(fù)計算。在連續(xù)丟包情況下,基音周期預(yù)測復(fù)制器與一衰減系數(shù)相乘,此衰減系數(shù)初始值為1,每隔10ms下降0.2。衰減系數(shù)反映了丟包期間包衰減的平滑度。最后在連續(xù)丟包60ms后,基音周期預(yù)測復(fù)制器和輸入殘余信號都為0,式(3)變成沒有輸入的模型,最后導(dǎo)致語音包嚴(yán)重失真而不能恢復(fù)。
2 仿真試驗分析
??? 仿真試驗的目的是為了驗證上面提出的APLC算法的可行性及系統(tǒng)性能的改善程度。在本仿真試驗中,選一個比較典型的一段語音包(從采樣點(diǎn)47 700~48 000)為研究對象,參數(shù)α、β、μ、v的值分別為0.4和0.6。圖1為此段完好的語音包。

?


??? 圖2為丟失的語音包段。圖3和圖4分別是經(jīng)過G.711 PLC算法和APLC算法恢復(fù)的語音包數(shù)據(jù)。

?

?

?

?

??? 圖5是通過ITU-T 的P.862 PESQ(Perceptual Estimation of Speech Quality)標(biāo)準(zhǔn)對其Mos值分別進(jìn)行估計的結(jié)果,通過4個人分別說一段8s長的相同的話。文件的格式為線性PCM,談話文件從ITU-T附錄P.23得到。

?


??? 從上述仿真結(jié)果分析可以看到,有5%包丟失率的語音數(shù)據(jù)在經(jīng)過G.711 PLC算法后,丟失語音包的恢復(fù)不是很理想。而經(jīng)APLC算法后,語音包的恢復(fù)可以從圖4中看出,相對于G.711有了比較大的改進(jìn),整體Mos值也有較大的改進(jìn),達(dá)到3.6。APLC算法達(dá)到了預(yù)期的目的。
??? 本文中介紹一種新的基于PCM(每包為10ms語音包長)包丟失隱藏算法。新的算法模型通過對線性預(yù)測參數(shù)進(jìn)行改進(jìn),形成改進(jìn)的APLC算法,最后通過對語音數(shù)據(jù)包仿真驗證了新算法對丟失包的高質(zhì)量的還原效果。但是APLC線性預(yù)測效果在特定的條件下還不是很準(zhǔn)確,如參數(shù)μ、v的設(shè)置,理論上應(yīng)該是每時每刻根據(jù)語音信號的不同,這兩個參數(shù)動態(tài)地變化著。但是實際上,這種動態(tài)的改變目前還不能做到,在后面的工作中需要作進(jìn)一步深入研究。
參考文獻(xiàn)
[1] Dual rate speech coder for multimedia communications transmitting at 5.3 and 6.3kbps. ITU-T Recommendation??G.723.1, March 1996.
[2] ?Coding of speech at 8kbps using conjugate-structure algebraic-code-excited linear-prediction (CS-ACELP). ITU-T Recommendation G.729,March 1996.
[3]?GUNDUZHAN E, MONTAHAN K. A linear prediction based packet loss concealment algorithm for PCM coded speech,IEEE Trans. Speech and Audio Process. 9(8) (November 2001):778-785.
[4] ?HASSAN M, NAYANDORO A. Internet telephony: services,technical challenges, and products. IEEE Communication Magazine, April 2000:96-103.
[5]? MAHFUZ E. Packet loss concealment for voice transmission over IP networks. Department of Electrical Engineering ?McGill University Montreal,Canada, September 2001.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。