《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動態(tài) > ITU-T G.729算法及其實時實現(xiàn)

ITU-T G.729算法及其實時實現(xiàn)

2009-04-21
作者:李錦宇 羅 鑫 王仁華

  摘 要: G.729編解碼算法,實時實現(xiàn)的G.729系統(tǒng)的軟件設(shè)計和硬件設(shè)計。在ADSP-2181上實現(xiàn)的G.729編解碼器,已經(jīng)通過了ITU-T G.729的全部測試矢量,并且已經(jīng)在數(shù)字語音記錄儀和H.323網(wǎng)上多媒體通信系統(tǒng)中得到推廣應(yīng)用。
  關(guān)鍵詞: G.729協(xié)議 ADSP-2181 接口模塊 IDMA口


  G.729協(xié)議[1]是由ITU-T的第15研究小組提出的,并在1996年3月通過的8Kbps的語音編碼協(xié)議。
  G.729協(xié)議使用的算法是共軛結(jié)構(gòu)的算術(shù)碼本激勵線性預(yù)測(CS-ACELP),它基于CELP編碼模型[2]。由于G.729編解碼器具有很高的語音質(zhì)量和很低的延時,被廣泛地應(yīng)用在數(shù)據(jù)通信的各個領(lǐng)域,如IP phone和H.323網(wǎng)上多媒體通信系統(tǒng)等。
  針對實時實現(xiàn)G.729的一些難點,我們提出了解決的方法。目前,我們已經(jīng)在Analog Device的定點數(shù)字處理芯片ADSP-2181上實時實現(xiàn)了符合ITU-T G.729
  編解碼器的全部功能,該編解碼器占用了22MIPS的運算量。我們在ADSP-2181上實現(xiàn)的G.729編解碼器,已經(jīng)通過了ITU-T G.729的全部測試矢量,并且已經(jīng)在數(shù)字語音記錄儀和H.323網(wǎng)上多媒體通信系統(tǒng)中進(jìn)行了推廣應(yīng)用。
1 G.729協(xié)議編解碼算法介紹
1.1 G.729編碼算法介紹
  電話線路上的模擬語音信號,經(jīng)話路帶寬濾波(符合ITU-T G.712建議)后,被8kHz采樣,量化成16bit線性PCM數(shù)字信號輸入到編碼器。該編碼器是基于線性預(yù)測分析合成技術(shù),盡量減少實際語音與合成語音之間經(jīng)聽覺加權(quán)后差分信號的能量為準(zhǔn)則來進(jìn)行編碼的。編碼器的結(jié)構(gòu)框圖如圖1所示,其主要部分有:
  ·線性預(yù)測分析和LPC系數(shù)的量化;
  ·開環(huán)基音周期估計;
  ·自適應(yīng)碼本搜索;
  ·固定碼本搜索;
  ·碼本增益量化。


  下面分別描述這五部分的主要技術(shù)。
  ·線性預(yù)測分析與LPC系數(shù)的量化
  首先對信號進(jìn)行加線性預(yù)測分析窗,分析窗由兩部分組成。第一部分是半個漢明窗,第二部分是四分之一個余弦信號。將加窗后的語音信號通過Levinson-Durbin算法獲得線性預(yù)測濾波器系數(shù)ai,i=1……10。由于線譜對參數(shù)比線性預(yù)測系數(shù)具有更好的內(nèi)插特性和量化特性[3], G.729將LPC參數(shù)轉(zhuǎn)換成相應(yīng)的線
  譜對參數(shù),最后對線譜對參數(shù)進(jìn)行量化。
  ·開環(huán)基音分析
  為了減少自適應(yīng)碼本搜索的復(fù)雜度,需要計算開環(huán)基音Top,使自適應(yīng)碼本搜索在開環(huán)基音值附近進(jìn)行。基音值的范圍在18~145個樣本點之間。
  ·自適應(yīng)碼本搜索
  G.729對每個子幀進(jìn)行閉環(huán)基音搜索,它通過最小化原始語音信號和重構(gòu)語音信號的加權(quán)均方誤差來進(jìn)行閉環(huán)基音搜索。對子幀1的閉環(huán)基音T1的搜索是局限在開環(huán)基音Top的一個小范圍內(nèi),對子幀2的閉環(huán)基音T2的搜索是局限在閉環(huán)基音T1的一個小范圍內(nèi)。這樣可以減少基音搜索的復(fù)雜度。
  ·固定碼本搜索
  G.729固定碼本矢量含有四個非0脈沖,每個脈沖的幅度要可以是+1或-1。通過最小化加權(quán)語音信號和加權(quán)重構(gòu)語音信號的均方誤差來進(jìn)行固定碼本的搜索。
  ·增益量化
  G.729對自適應(yīng)碼本增益和固定碼本增益采用二級共軛結(jié)構(gòu)碼本進(jìn)行矢量量化。在碼本搜索時,采用預(yù)搜索策略,使得運算量只為全搜索算法的1/4。
1.2 G.729解碼算法介紹
  G.729的解碼也是按幀進(jìn)行的,主要是對符合G.729協(xié)議的碼流進(jìn)行解碼,得到相應(yīng)的參數(shù),根據(jù)語音產(chǎn)生的機(jī)理,合成語音。解碼的方框圖如圖2所示,其主要部分為:參數(shù)解碼;后濾波處理。


  G.729解碼過程如下。
  ·參數(shù)解碼
  首先解碼得到線譜對參數(shù),并將線譜對參數(shù)轉(zhuǎn)換為線性預(yù)測系數(shù)。然后解碼出基音周期,獲得自適應(yīng)碼本矢量v(n)。解碼出固定碼本矢量的四個脈沖的位置和符號,計算出固定碼本矢量c(n)。解碼出固定本預(yù)測增益gc和固定碼本增益,接著得到激勵信號。最后將激勵信號
  u(n)輸入到線性預(yù)測合成濾波器中,計算出重構(gòu)語音
  ·后濾波處理
  后濾波處理主要是自適應(yīng)后濾波。自適應(yīng)后置濾波器是由三個濾波器級連而成:長時后置濾波器Hp(z),短時后置濾波器Hf(z),頻譜傾斜補(bǔ)償濾波器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與主機(jī)的數(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位的BDMA口、一個可編程定時器、標(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è)計和接口。
  · 接口功能模塊
  該模塊實現(xiàn)ADSP-2181與主CPU的數(shù)據(jù)實際交換工作。該模塊包括DSP的主控程序和數(shù)據(jù)傳輸兩部分。DSP的主控程序主要負(fù)責(zé)不斷將采集到的語音數(shù)據(jù)分幀,送入編碼器,并將接收到的碼流分類后送入解碼器模塊。數(shù)據(jù)傳輸部分負(fù)責(zé)采集數(shù)據(jù)和與主CPU的數(shù)據(jù)交換。
2.2 硬件設(shè)計
  本系統(tǒng)考慮了各CPU之間的數(shù)據(jù)交換與協(xié)調(diào)等問題。ADSP2181具有一個16位的IDMA口,在處理器全速運行的情況下,ADSP-2181可以自動完成IDMA口的接收和發(fā)送數(shù)據(jù),這為系統(tǒng)的設(shè)計帶來了很大的便利。利用ADSP-2181的這個性質(zhì),我們通過IDMA口來實現(xiàn)ADSP-2181與主CPU的數(shù)據(jù)交互。
  我們設(shè)計了ADSP-2181與PC機(jī)ISA總線接口的主從系統(tǒng)。在這個主從系統(tǒng)中,PC機(jī)為主CPU,ADSP-2181為從CPU。在啟動時,由PC機(jī)通過IDMA口將程序裝載入ADSP-2181內(nèi)部存儲器中。在ADSP-2181全速運行時,主機(jī)可以查詢從機(jī)的運行狀態(tài)、讀取壓縮后的G.729碼流,也可以送入待解碼的G.729碼流等。
  在該主從系統(tǒng)中,PC機(jī)通過ADSP-2181的IDMA口來讀寫它的內(nèi)部存儲器。PC總線通過GAL譯碼,形成,IACK信號,與ADSP-2181的IDMA口連接,這樣就實現(xiàn)了在ADSP-2181全速運行的情況下,PC機(jī)仍能訪問到ADSP-2181內(nèi)部存儲器。
  圖3是主從系統(tǒng)中的ADSP-2181功能與接口的框圖。語音信號由ADSP1847采集,通過ADSP-2181的串口0送入到ADSP-2181進(jìn)行編碼。編碼數(shù)據(jù)通過IDMA口送到主機(jī)進(jìn)行存儲。需要解碼的數(shù)據(jù)從主機(jī)由IDMA口送到ADSP-2181進(jìn)行解碼,解碼后獲得的語音信號通過串口0送至ADSP1847。


2.3 難點的解決
  數(shù)據(jù)在DSP中的安排。維護(hù)好一張變量表,每次進(jìn)入一個模塊時,首先使用已經(jīng)分配但暫時不用的變量。只在不夠的情形下,再去分配額外的變量,同時將這些新分配的變量計入到變量表中,供其它模塊使用。另外維護(hù)好一個局部變量堆棧,使得各個模塊的內(nèi)部局部變量分配在堆棧中,當(dāng)從該模塊退出時,就從堆棧中彈出這些局部變量,釋放空間。
  數(shù)據(jù)精度的處理。對精度要求比較高的地方,將計算的中間變量采用32位來表示,運算結(jié)束后,再轉(zhuǎn)換成16位表示,這樣指令條數(shù)增加不多,但精度卻大大提高了。在某些精度要求比較高的模塊,采用尾數(shù)和指數(shù)來表示浮點數(shù),自己編寫一套指數(shù)和尾數(shù)的運算庫,由于尾數(shù)和指數(shù)表示法有足夠大的精度范圍,完全滿足要求。但只能在少許地方采用這種方法,否則運算量就會上去,給實時實現(xiàn)帶來困難。
  有限計算資源的利用。利用ADSP強(qiáng)大的多功能指令可以非常好地利用有限計算資源。
  DSP高速運行時,DSP與主機(jī)的數(shù)據(jù)交互。由于ADSP-2181具有一個16位的IDMA口,在處理器全速運行的情況下,ADSP-2181可以自動完成IDMA口的接收和發(fā)送數(shù)據(jù),這為系統(tǒng)的設(shè)計帶來了很大的便利。利用ADSP-2181的這個性質(zhì),我們通過IDMA口來實現(xiàn)ADSP-2181與主CPU的數(shù)據(jù)交互。
  語音信號和編解碼緩沖區(qū)的維護(hù)。本系統(tǒng)的數(shù)據(jù)交互都是采用雙緩沖的工作方式。雙緩沖的好處在于數(shù)據(jù)的交互不會影響到其他工作的正常進(jìn)行。
  本系統(tǒng)的數(shù)據(jù)采集與播放采用雙緩沖的工作方式。采集時采用cod_ad和cod_work兩個緩沖區(qū),播放時采用decod_ad和decod_work兩個緩沖區(qū)。cod_ad用于ADSP-2181的串口數(shù)據(jù)采集,cod_work用于ADSP-2181的編碼。當(dāng)cod_ad采完一幀數(shù)據(jù)后與cod_work互換。decod_ad用于ADSP-2181的串口數(shù)據(jù)播放,decod_work用于ADSP-2181的解碼。當(dāng)播放完一幀數(shù)據(jù)后,decod_ad與decod_work互換。采集與播放程序放在ADSP-2181的中斷服務(wù)程序中。本系統(tǒng)只開放ADSP-2181的接收中斷,ADSP-2181每接收一個數(shù)據(jù),同時就播放一個數(shù)據(jù)。
  另外G.729的編碼器的編碼數(shù)據(jù)和解碼器的解碼數(shù)據(jù)都有兩個緩沖區(qū),緩沖區(qū)的工作原理與數(shù)據(jù)采集和播放的雙緩沖區(qū)的工作原理相同。
  綜上所述,ITU-T的G.729協(xié)議是一個ITU-T的8kbps語音編解碼協(xié)議,它具有高音質(zhì)和低延時的特點。軟件設(shè)計主要包括三個部分:命令解釋器、G.729數(shù)據(jù)引擎、接口功能模塊。我們用ADSP-2181實時實現(xiàn)了G.729協(xié)議,在ADSP-2181的數(shù)據(jù)采集/播放和ADSP-2181與主CPU接口的數(shù)據(jù)交互方面都采用了雙緩沖方式。硬件設(shè)計主要是通過ADSP-2181的IDMA口,來實現(xiàn)主CPU與ADSP-2181的數(shù)據(jù)交互。
  針對實時實現(xiàn)G.729的一些難點,我們提出了一系列解決的方法,通過這些解決方法,我們已經(jīng)在Analog Device的定點數(shù)字處理芯片ADSP-2181上實時實現(xiàn)了符合ITU-T G.729的全部功能,并且已經(jīng)通過了ITU-T G.729的全部測試矢量。該編解碼器已經(jīng)在數(shù)字語音記錄儀和H.323網(wǎng)上多媒體通信系統(tǒng)中推廣應(yīng)用。
參考文獻(xiàn)
1 ITU-T Recommendation G.729. Coding of Speech at 8kbit/s Using Conjugate-Structure Algebraic-Code-Ex-cited Linear-Prediction.International Telecommunication U-nion,1996
2 M.Schroeder and B.Atal.Code-excited linear predicition (CELP):high quality speech at very low bit rates. Proc.IEEE Int.Conf.Acoust.,Speech,Signal Processing,1985, 937-940
3 B.S.Atal,R.V.Cox,and P.Kroon. Spectral quantization and interprolation for CELP coders.in Proc.Int.Conf.A-coust.Speech Sign.Proess.1989,69-72
4 ADSP-2100 Family User's Manual,Analog Devices
5 ADSP-2171&81 User's Manual,Analog Devices

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(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。