ITU-TG.729算法及其實時實現(xiàn)
G.729的解碼也是按幀進(jìn)行的,主要是對符合G.729協(xié)議的碼流進(jìn)行解碼,得到相應(yīng)的參數(shù),根據(jù)語音產(chǎn)生的機理,合成語音。解碼的方框圖如圖2所示,其主要部分為:參數(shù)解碼;后濾波處理。
G.729解碼過程如下。
·參數(shù)解碼
首先解碼得到線譜對參數(shù),并將線譜對參數(shù)轉(zhuǎn)換為線性預(yù)測系數(shù)。然后解碼出基音周期,獲得自適應(yīng)碼本矢量V(n)。解碼出固定碼本矢量的四個脈沖的位置和符號,計算出固定碼本矢量c(n)。解碼出固定本預(yù)測增益gc和固定碼本增益,接著得到激勵信號
,n=0……39。最后將激勵信號
u(n)輸入到線性預(yù)測合成濾波器中,計算出重構(gòu)語音。
·后濾波處理
后濾波處理主要是自適應(yīng)后濾波。自適應(yīng)后置濾波器是由三個濾波器級連而成:長時后置濾波器Hp(z),短時后置濾波器Hf(z),頻譜傾斜補償濾波器Ht(z),后面接著進(jìn)行一個自適應(yīng)增益控制過程。后置 濾波器的系數(shù)每一個子幀更新一次。后置濾波能夠有效地改善合成出的語音質(zhì)量。
2 G.729編解碼器的實現(xiàn)
我們在Analog Device的定點數(shù)字處理芯片ADSP-2181[4][5]上實時實現(xiàn)了符合ITU-T G.729的全部功能,進(jìn)行編解碼總共用了22MIPS(ADSP-2181處理速度為33MIPS)。實時實現(xiàn)了G.729的編解碼功能,主要有以下的難點。
·數(shù)據(jù)在DSP中的安排。在DSP中只要是聲明的變量,DSP的連接程序就會分配數(shù)據(jù)空間。如果我們象C語言編程那樣定義局部變量,就會浪費大量的存儲空間。
·數(shù)據(jù)精度的處理。在16位的定點信號處理芯片上實現(xiàn)一些浮點算法時,為了使運算速度加快,往往要針對定點芯片的特點,用定點數(shù)來表示浮點數(shù)。雖然速度提高了,但是很可能導(dǎo)致運算精度不夠。
·有限計算資源的利用。ADSP2181只有33MIPS,而且不能使所有的MIPS都用來實現(xiàn)G.729的編解碼功能。
·DSP高速運行時,DSP與主機的數(shù)據(jù)交互。
·語音信號和編解碼緩沖區(qū)的維護(hù)。這些緩沖區(qū)至少都有兩者要去存儲,如語音信號緩沖區(qū), 一方面語音編碼模塊要調(diào)用,另一方面采集中斷程序也要調(diào)用它。而在語音編碼模塊調(diào)用的過程中,該緩沖區(qū)不應(yīng)該被其它模塊所改變,所以中斷程序不應(yīng)該此時去存儲這個緩沖區(qū),這就存在著矛盾。
2.1 軟件設(shè)計
軟件設(shè)計主要包括三個部分。
· 命令解釋器
命令解釋器主要是用于解釋主CPU發(fā)來的各種命令,如發(fā)送或接收編解碼數(shù)據(jù)、查詢編解碼狀態(tài)以及啟動、停止編解碼操作等。該模塊不直接與主CPU打交道,而是通過接口功能模塊,間接實現(xiàn)與主CPU的數(shù)據(jù)信息交換。
· G.729數(shù)據(jù)引擎
我們在ADSP-2181上完成了G.729的實時編/解碼工作。
ADSP-2181不僅包含了ADSP-2100系列的基本結(jié)構(gòu)(三個運算單元、數(shù)據(jù)地址發(fā)生器和一個程序序列器),還含有兩個串行口、一個16位的內(nèi)部IDMA口,一個8位的BMDA口、一個可編程定時器、標(biāo)志輸入輸出(Flag I/O、外部中斷能力以及片內(nèi)程序和數(shù)據(jù)存儲器等周邊設(shè)備。ADSP-2181片內(nèi)集成了共80K字節(jié)的存儲器,它們分別是16K字(24bit)程序存儲器和16k字(16bit)的數(shù)據(jù)存儲器,大量的片內(nèi)存儲器使得復(fù)雜的G.729編解碼算法能夠全部放入ADSP-2181片內(nèi),無須增加任何的片外RAM,簡化了硬件設(shè)計和接口。
評論