摘要:設計了基于DSP的G.729語音編解碼器,并針對G.729算法標準源碼代碼效率低、執(zhí)行時間長的不足,從算法精簡、代碼優(yōu)化等方面進行了優(yōu)化。優(yōu)化后的算法在保證了高質量語音輸出的同時,提高了編碼效率,實現(xiàn)了對語音信號的實時處理。最后對系統(tǒng)性能進行了測試,結果滿足設計要求。
關鍵詞:G.729;DSP;語音編碼;算法優(yōu)化
0 引言
語音信號處理是現(xiàn)代通信研究的重要內容之一,語音壓縮編碼作為其關鍵技術,如今已得到了極大的發(fā)展。G.729是國際電信聯(lián)盟(ITU)于1996年提出的采用共軛結構代數(shù)碼激勵線性預測(CS-ACELP)的語音編碼算法,由于其具有低速率、低延時、高質量等優(yōu)點,被廣泛應用于數(shù)字通信系統(tǒng),如IP電話、視頻會議、移動通信等。數(shù)字信號處理器(DSP)價格低廉,并具有強大的運算能力,用它來實現(xiàn)G.729算法具有很大的現(xiàn)實意義。近年來,國內外研究基于DSP的G.729語音編碼算法的學者很多,但隨著無線通信系統(tǒng)用戶越來越多,以及DSP在結構、性能上的巨大變化,怎樣使該算法在DSP上最高效的實現(xiàn),依然是一個很重要的課題。
本文首先對G.729算法進行了分析,然后結合DSP的特點,分別進行了系統(tǒng)的硬件和軟件設計。該系統(tǒng)不但滿足G.729算法要求,還可以作為其他語音編譯碼平臺;在此基礎上,本文針對ITU提供的標準源碼代碼效率低、執(zhí)行時間長等不足,提出了算法的具體優(yōu)化技術,并對優(yōu)化結果進行了比較分析。結果表明,優(yōu)化后的算法在保證語音質量的同時,提高了編碼效率,實現(xiàn)了對語音信號的實時處理。
1 ITU-T G.729原理分析
ITU-T G.729算法以自適應預測編碼技術為基礎,采用矢量量化、合成分析和感覺加權等技術。其編碼速率達到8 Kb/s,合成語音質量不低于32 Kb/sADPCM的水平。
該算法要求輸入信號為8 kHz取樣、16 b線性PCM信號。在編碼器端,每80樣點為一幀(每幀再分為兩個子幀),分析并提取語音信號各種參數(shù)(LPC濾波器系數(shù)、自適應碼書和固定碼書的編號、自適應碼字增益和固定碼字增益),把這些參數(shù)進行80 b編碼發(fā)送。
在解碼端,把收到的比特流恢復成參數(shù)編碼,解碼后得到各個參數(shù),用自適應碼書編號從自適應碼書中得到自適應碼字,用固定碼書編號從固定碼書中得到固定碼字,分別乘以它們的增益,按點相加后構成激勵序列。激勵LPC綜合濾波器重構語音(綜合濾波器由LPC系數(shù)構成)。重構語音信號在輸出前經(jīng)過后置處理,包括長時后置濾波、短時綜合濾波和高通濾波。
2 系統(tǒng)硬件設計
系統(tǒng)硬件結構圖如圖1所示。其中DSP芯片采用TI公司的TMS320VC5416,音頻接口采用16位音頻編解碼芯片TLV320AIC23,SRAM和FLASH分別采用芯片CY7C1041CV33和SST39VF400。此外,系統(tǒng)還配有電源芯片、電壓轉換芯片、CPLD(EPM3128ATC100)等。
系統(tǒng)編碼流程為:由音頻接口芯片TLV320AIC23將模擬信號轉換成8K×16 b/s的數(shù)字信號,采樣后的數(shù)字信號通過多通道緩沖串口McB-SP0傳送到DSP的內部緩沖區(qū),當緩沖區(qū)內的數(shù)據(jù)積累到一幀(80×16 b)時啟動編碼程序,編碼完成后將8 Kb/s的壓縮碼流通過數(shù)字接口(Mc-BSP2)輸出至信道。
系統(tǒng)解碼流程為:由McBSP2將信道發(fā)送來的數(shù)字碼流接收至DSP的內部接收緩沖區(qū),然后經(jīng)DSP進行解碼處理,解碼后的數(shù)字語音通過Mc-BSP0發(fā)送給TLV320AIC23,經(jīng)過D/A轉換恢復出原始語音信號。由此,該系統(tǒng)最終實現(xiàn)了語音的采集、編碼、發(fā)送和接收、解碼、播放的功能。[!--empirenews.page--]
3 系統(tǒng)軟件設計
系統(tǒng)軟件部分主要包括音頻接口模塊、數(shù)字接口模塊、CPLD控制模塊及語音處理模塊等。音頻接口模塊主要完成對TMS320VC5416的多通道緩沖串口McBSP0、McBSP1的配置及對音頻接口芯片的初始化等;數(shù)字接口模塊作為與外部信道的接口,在輸出語音碼流的同時提供幀同步與位同步信號,設計的重點在于McBSP2的配置,尤其是其內部采樣率發(fā)生器的配置;CPLD控制模塊完成TMS320VC5416各個控制信號和地址線的邏輯組合,以擴展外圍存儲器SRAM和FLASH,開發(fā)環(huán)境為QuartusⅡ。語音處理模塊是本設計的核心,將在下面重點介紹。
3.1 語音處理模塊軟件設計
語音處理模塊由DSP完成,軟件流程圖如圖2所示。
系統(tǒng)上電后,首先完成DSP內部寄存器、變量、外圍設備、音頻編解碼芯片的初始化,當McBSP有數(shù)據(jù)輸入時,McBSP產(chǎn)生一個事件報告DMA控制器,觸發(fā)DMA通道以后臺形式將數(shù)據(jù)傳輸?shù)浇邮站彌_區(qū);接收緩沖區(qū)每收到一定單元的數(shù)據(jù),觸發(fā)DMA中斷,CPU響應該中斷進入中斷服務程序,提取數(shù)據(jù),完成數(shù)據(jù)的編碼或解碼處理;然后再將處理后的數(shù)據(jù)送至發(fā)送緩沖區(qū),由DMA傳送給多通道緩沖串口。
編解碼算法采用G.729算法,ITU為G.729算法提供了標準C源代碼,并采用模塊化設計,具有可讀性強、便于維護等優(yōu)點,但該算法復雜度較高,而DSP芯片資源有限,處理延時很大。在實際應用中,語音編解碼器對算法實時性要求非常高,因此必須對原始代碼進行算法精簡和代碼優(yōu)化,這也是本文的重要工作之一。
3.2 編解碼算法優(yōu)化
G.729算法是經(jīng)過長時間不斷的研究與討論,最終制定出的一個標準算法,對算法本身再進行大幅度優(yōu)化是很困難的。不過,可以在算法的細節(jié)和具體實現(xiàn)方法上進行精簡。
3.2.1 碼本搜索算法精簡
在10維LSP量化碼本搜索中,需要找到一個碼矢量,使得它與輸入矢量的均方誤差最小,如式(1)所示。
在ITU提供的標準算法中,程序每次搜索時,先計算完本次的均方誤差,然后再與之前的最小值進行比較。實際上,如果本次未計算完的均方誤差已經(jīng)大于之前保存的最小值時,可以直接停止本次計算進入到下一次計算中,這樣能節(jié)省大量乘和累加運算。
[!--empirenews.page--]
圖3是該算法精簡后的流程圖。
實驗證明,在10幀語音信號的編碼過程中,這部分算法優(yōu)化后平均可減少15 000次左右的L_mac運算的調用。
3.2.2 去除不必要的溢出判斷
使用CCS中的profiler工具對ITU提供的標準C源碼進行分析,結果表明,該算法大部分運算都集中在basic_op.c文件中的L_add()、L_mult()等幾個基本函數(shù)上。進一步分析發(fā)現(xiàn),這些函數(shù)在溢出判斷上花費了大量的時間,而實際運算中真正會產(chǎn)生溢出的地方非常少。因此,為了進一步提高代碼效率,在完全不會產(chǎn)生溢出的地方用簡單的基本運算取代函數(shù)的調用,這樣即能大大縮短運算時間,還能節(jié)省調用函數(shù)的開銷。例如:
這段程序中,由于-215≤a[i]≤215-1,-215≤b[i]≤215-1,那么a[i]*b[19-i]顯然不會超出區(qū)間[-231,231-1],即這一部分不會產(chǎn)生溢出問題,因此這里的L_mult函數(shù)便可簡單替換為:
這雖是一段極小的程序,但經(jīng)過這樣簡單的置換后卻能減少數(shù)十個時鐘周期。在整個代碼中類似的例子很多,優(yōu)化后的效果非常明顯。
3.2.3 循環(huán)優(yōu)化
對循環(huán)的優(yōu)化一直是代碼優(yōu)化的重點,一般的循環(huán)優(yōu)化包括:循環(huán)合并、循環(huán)展開、循環(huán)內部的指令盡可能移到循環(huán)外等。這些方法在文獻中有詳細的介紹,這里就不再贅述。TMS320C54X系列芯片采用6級流水線結構,可以并行執(zhí)行多條指令,并在一定條件下可以實現(xiàn)零開銷循環(huán)處理。[!--empirenews.page--]
所謂零開銷循環(huán)是指處理器在執(zhí)行循環(huán)時,不用在循環(huán)終止的判斷、循環(huán)的跳轉及循環(huán)計數(shù)器的遞減上額外花費時間。但這就要求編譯器必須知道初始值、更新和結束條件;循環(huán)體內部不能調用函數(shù);循環(huán)體內不能包含break語句;循環(huán)表達式中不能含有隨循環(huán)體中的條件變化而變化的循環(huán)變量;循環(huán)計數(shù)應該遞減等。為了實現(xiàn)零開銷循環(huán),本文對標準C代碼進行了大量優(yōu)化,如在文件Qua_lsp.c中有如下循環(huán):
優(yōu)化前后本段代碼所消耗的時鐘周期數(shù)對比見表1。
3.2.4 使用DSPLIB庫優(yōu)化
TMS320C54X系列提供的通用數(shù)字信號處理算法庫(DSPLIB庫)包含有50多個通用的信號處理程序,全部由匯編語言編寫,并可由C語言調用,方便C語言與匯編語言混合編程。在計算量大、對實時性要求又高的G.729中調用DSPLIB庫函數(shù),對于提高代碼效率具有很大的意義。
DSPLIB幾乎包括了當前已經(jīng)成熟的數(shù)字信號處理的大部分算法。如:FFT運算、濾波與卷積運算、自適應濾波運算、相關運算、數(shù)學函數(shù)運算、三角函數(shù)運算、矩陣運算等。
3.2.5 指針尋址
在G.729算法中包含了大量數(shù)組元素的存取操作,ITU提供的標準代碼直接對數(shù)組進行操作,使得浪在地址計算上的時間開銷很大。若對數(shù)組采用指針尋址方式,可節(jié)省很多時間。而通常情況下數(shù)組又都應用在循環(huán)內部,指針尋址方式更加凸顯出了它的必要性。
除了以上幾種優(yōu)化方法外,使用內聯(lián)函數(shù),合理利用暫存器,使用宏定義等也都對代碼的優(yōu)化起到很好的作用。
4 測試結果及性能分析
利用CCS提供的性能分析工具(profiler)對優(yōu)化前后的代碼進行分析,在TMS320VC5416上實現(xiàn)一幀數(shù)據(jù)編碼所用的時間分別為96 ms與8 ms,其中TMS320VC5416的CPU時鐘頻率為160 MHz。對幾個主要函數(shù)優(yōu)化前后的運行時間進行比較,對比如表2所示。
分析結果表明,優(yōu)化后的時間比優(yōu)化前大大縮短,并嚴格控制在了10 ms以內,保證了系統(tǒng)的實時性。同時,將原始語音和重建語音的語音波形進行對比,如圖4所示。觀察對比波形可知,編碼前后語音波形差別很小,重建語音基本保持了原始語音的信息。通過主觀聽覺測試,重建語音清晰易懂,質量較高,MOS主觀評分在4.0以上,并且整個系統(tǒng)運行穩(wěn)定。
5 結語
本文實現(xiàn)了基于DSP的語音編譯碼器設計,該設計對ITU提供的G.729源代碼進行了算法精簡和代碼優(yōu)化,優(yōu)化后的代碼具有編碼效率高、占用資源少、實時性強等優(yōu)點。與源代碼相比,它的編碼效率提高了10倍以上,克服了源代碼難以應用在實時語音通信系統(tǒng)的缺點。
目前,該設計已經(jīng)應用在本實驗室的語音通信實驗系統(tǒng)中,與傳統(tǒng)語音實驗系統(tǒng)相比,為學生提供了更先進的語音編碼實驗,模塊化的軟件設計也更適合學生的參與。同時,該系統(tǒng)采用通用的DSP硬件平臺,具有可擴展性強的特點,可實現(xiàn)多種語音編碼算法,為學生自主性學習提供了良好的條件。