《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于TMS320C5416的G.729語(yǔ)音編解碼算法的優(yōu)化和實(shí)現(xiàn)
基于TMS320C5416的G.729語(yǔ)音編解碼算法的優(yōu)化和實(shí)現(xiàn)
黃 冰,楊召青,呂治國(guó)
摘要: 通過(guò)分析G.729語(yǔ)音編解碼算法和TMS320VC5416的原理,提出了有效優(yōu)化算法的方案,降低了算法的復(fù)雜度,把優(yōu)化的G.729算法在TMS320VC5416的系統(tǒng)板實(shí)現(xiàn),完成對(duì)輸入語(yǔ)音或數(shù)據(jù)的壓縮、存儲(chǔ)及回放。
Abstract:
Key words :

    摘 要: 通過(guò)分析title="G.729">G.729語(yǔ)音編解碼算法和TMS320VC5416的原理,提出了有效優(yōu)化算法的方案,降低了算法的復(fù)雜度,把優(yōu)化的G.729算法在TMS320VC5416的系統(tǒng)板實(shí)現(xiàn),完成對(duì)輸入語(yǔ)音或數(shù)據(jù)的壓縮、存儲(chǔ)及回放。
    關(guān)鍵詞: G.729算法;算法優(yōu)化;語(yǔ)音編碼;TMS320C5416

     隨著多媒體信息技術(shù)和網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,信息量快速增長(zhǎng),使信道資源顯得越來(lái)越寶貴。為了在有限的信道資源下傳輸盡可能多的信息,語(yǔ)音壓縮成為必要手段。ITU組織(國(guó)際電信聯(lián)盟)在l996年制定了G.729協(xié)議,即共軛結(jié)構(gòu)碼激勵(lì)線(xiàn)性預(yù)測(cè)編碼算法(CS-ACELP)。其編碼速率為8kb/s,可以滿(mǎn)足網(wǎng)絡(luò)通信的要求,具有良好的語(yǔ)音質(zhì)量,對(duì)不同的應(yīng)用環(huán)境有較強(qiáng)的適應(yīng)性,是一種性能較好的語(yǔ)音壓縮國(guó)際標(biāo)準(zhǔn),被廣泛應(yīng)用在個(gè)人移動(dòng)通信、衛(wèi)星通信等各個(gè)領(lǐng)域。


1 G.729編解碼算法的原理
    語(yǔ)音信號(hào)的波形編碼力圖使重建語(yǔ)音波形保持原始語(yǔ)音信號(hào)的波形形狀。這類(lèi)編碼器通常將語(yǔ)音信號(hào)作為一般的波形信號(hào)來(lái)處理,它具有適應(yīng)能力強(qiáng)、語(yǔ)音質(zhì)量好等優(yōu)點(diǎn),但所需用的編碼速率高。參數(shù)編碼通過(guò)對(duì)語(yǔ)音信號(hào)特征參數(shù)的提取及編碼來(lái)降低編碼速率,力圖使重建語(yǔ)音信號(hào)盡可能保持原語(yǔ)音的語(yǔ)意,而重建信號(hào)的波形同原語(yǔ)音信號(hào)的波形可能會(huì)有相當(dāng)大的差別。二十世紀(jì)70年代中期,特別是80年代以來(lái),語(yǔ)音編碼技術(shù)有了突破性的進(jìn)展,提出了一些非常有效的處理方法,如混合編碼。這種算法克服了原有波形編碼器與聲碼器的弱點(diǎn),而結(jié)合了它們各自的長(zhǎng)處,在4kb/s~16kb/s速率上能夠得到高質(zhì)量合成語(yǔ)音,而在本質(zhì)上也具有波形編碼的優(yōu)點(diǎn)。G.729所描述的CS-ACELP(Conjugate-Structure Al2gebraic-Coder-Excited Linear Prediction)聲碼器采用的CELP聲碼器就屬于這類(lèi)編碼器。
    CELP編碼基于合成分析(A-B-S)的搜索過(guò)程、感知加權(quán)矢量量化(VQ)和線(xiàn)性預(yù)測(cè)(LP)技術(shù),采用這種編碼方案使傳輸?shù)谋忍芈蚀蟠蠼档?。CS-ACELP的思想是由共軛結(jié)構(gòu)碼線(xiàn)性預(yù)測(cè)(CS-CELP)和代數(shù)碼本激勵(lì)線(xiàn)性預(yù)測(cè)(ACELP)的思想整合而來(lái)的。在編碼端,主要進(jìn)行有線(xiàn)譜對(duì)(LSP)參數(shù)的量化、基音分析、固定碼本搜索和增益量化四個(gè)步驟。編碼器首先對(duì)輸入信號(hào)(8kHz采樣16bit PCM信號(hào))進(jìn)行預(yù)處理,然后對(duì)每幀語(yǔ)音信號(hào)進(jìn)行線(xiàn)性預(yù)測(cè),得到LPC系數(shù),并把LPC參數(shù)轉(zhuǎn)換成LSP參數(shù),最后對(duì)LSP參數(shù)進(jìn)行矢量量化。在接下來(lái)的基音分析中,每一幀先搜索到最佳基音時(shí)延T的一個(gè)候選時(shí)延,然后依據(jù)候選時(shí)延搜索每一幀的最佳基音時(shí)延。最后還要對(duì)自適應(yīng)碼本增益和固定碼本增益進(jìn)行量化。在解碼端,首先由接收到的比特流得到各種參數(shù)標(biāo)志進(jìn)行解碼,得到10ms語(yǔ)音幀編碼參數(shù)。解碼器在每一子幀內(nèi),對(duì)LSP系數(shù)進(jìn)行內(nèi)插,并把它們變換成LP濾波器系數(shù)后,依次進(jìn)行激勵(lì)生成、語(yǔ)音合成和后處理工作。
2 算法優(yōu)化和DSP應(yīng)用改進(jìn)
    G.729語(yǔ)音編解碼系統(tǒng)要求實(shí)時(shí)性高,需在有限的時(shí)間內(nèi)對(duì)外部輸入的信號(hào)完成指定處理,即信號(hào)處理的速度必須大于等于輸入信號(hào)更新的速度,因此需要進(jìn)行算法的優(yōu)化改進(jìn)。對(duì)C語(yǔ)言編寫(xiě)的代碼進(jìn)行優(yōu)化,同時(shí)使用內(nèi)聯(lián)指令,又在C程序中嵌入?yún)R編語(yǔ)句,盡量提高信號(hào)處理的速度。
2.1 算法的優(yōu)化改進(jìn)
    首先在算法上進(jìn)行改進(jìn),如圖1所示,采用一種結(jié)合WD-LSP(Weighted Delta-LSP)[1]函數(shù)并結(jié)合次最優(yōu)部分碼本快速搜索的CS-ACELP語(yǔ)音編碼算法,同時(shí)采用基于聲學(xué)心理模型的知覺(jué)加權(quán)濾波器,使語(yǔ)音編碼在不降低語(yǔ)音質(zhì)量的情況下降低計(jì)算復(fù)雜度。WD-LSP函數(shù)主要用于區(qū)分UV-V(unvoice-voice)/S-V(silence-voice)的邊界。其原理是:如果函數(shù)值大于給定的極限值η,則開(kāi)環(huán)基音延遲Top重新估計(jì),否則,開(kāi)環(huán)基音延遲Top用前一幀自適應(yīng)碼本延遲來(lái)更新。在第i幀F(xiàn)i的WD-LSP函數(shù)和用于確定開(kāi)環(huán)基音延遲Top的算法如下:
   
其中LSPi(k)是在第i幀中的k階LSP系數(shù);wk是加權(quán)系數(shù),它用于增強(qiáng)UV-V/S-V邊界的WD-LSP函數(shù)。為了獲取wk,一個(gè)包含23 014個(gè)UV-V邊界和9 519個(gè)S-V邊界的大型數(shù)據(jù)庫(kù)用于估計(jì)delta-LSP在UV-V/S-V邊界的平方根值(RMS)。因此,WD-LSP用于檢測(cè)VU-V/S-V邊界非常敏感。η是一個(gè)設(shè)為0.01的極限值。整個(gè)計(jì)算可節(jié)省21%的計(jì)算量,經(jīng)過(guò)這種算法前后語(yǔ)音信號(hào)如圖2所示。

 

 

 

2.2 進(jìn)行C語(yǔ)言?xún)?yōu)化
    基于G.729標(biāo)準(zhǔn)的聲碼器最終在定點(diǎn)TMS320C5416上實(shí)時(shí)實(shí)現(xiàn)。在定點(diǎn)TMS320C5416內(nèi),浮點(diǎn)數(shù)是通過(guò)將小數(shù)點(diǎn)固定在特定位置來(lái)表示的,這是定點(diǎn)TMS320C5416的局限之一。為了區(qū)分小數(shù)的不同值域,使用了Q-格式。不同的Q-格式在于小數(shù)點(diǎn)的位置不同,因此整數(shù)域也不同。當(dāng)兩個(gè)數(shù)相乘時(shí),會(huì)產(chǎn)生一個(gè)特殊的符號(hào)位。如:兩個(gè)Q4數(shù)相乘, 需要附加一個(gè)左移的操作以去除這個(gè)多余的符號(hào)位,乘積應(yīng)該是一個(gè)Q9格式的。如果DSP中的FRST位被置位,這個(gè)去除多余符號(hào)位的移位操作能夠自動(dòng)完成。對(duì)于16位數(shù)的乘法運(yùn)算,應(yīng)該得到32 位的乘積。但是,由于只需要16位的積,該32位乘積中只有高16位被存儲(chǔ)下來(lái),積的低16位被丟棄。為了達(dá)到高準(zhǔn)確性,在連續(xù)的乘法運(yùn)算過(guò)程中(如卷積),應(yīng)該一直保持32位的計(jì)算結(jié)果,只對(duì)最終的計(jì)算結(jié)果進(jìn)行丟棄低16位的截短操作。為了達(dá)到更高的準(zhǔn)確性,在這一操作過(guò)程中會(huì)使用到一種雙重精度格式, 這種格式僅僅出現(xiàn)在使用單精度不夠,而又不必要使用32位精度的時(shí)候。兩個(gè)32位數(shù)相乘,只需要32位的乘積,而不是64位,不過(guò)注意到TMS320C5416是16位的,所以在雙重精度格式中,32位整數(shù)分為高位字和低位字。高、低位字中都含有符號(hào)位,以進(jìn)行快乘運(yùn)算。其格式如下:
    L_32=hi_word<<16+lo_word<<1
    Hi_word=L_32>>16
    Lo_word=L_32-hi_word>>1
    當(dāng)累加器中的數(shù)值超過(guò)一定范圍時(shí)將會(huì)產(chǎn)生溢出。在G.729算法標(biāo)準(zhǔn)中, 累加器的值被限定在80000000~7FFFFFFF之內(nèi)——即最小負(fù)數(shù)和最大正數(shù)。不過(guò)在TMS320C5416中,如果將PMST寄存器中的OVM置位,則溢出會(huì)得到自動(dòng)處理。
2.3 內(nèi)聯(lián)指令的應(yīng)用和C程序中嵌入?yún)R編語(yǔ)句
    由于語(yǔ)音編碼的特點(diǎn),編解碼函數(shù)都是由一些基本的加減乘除簡(jiǎn)單函數(shù)組織而成,這些函數(shù)定義在BASIC OP.C和OPER_32B.C兩個(gè)文件中,如果能夠?qū)@些簡(jiǎn)單函數(shù)進(jìn)行內(nèi)聯(lián)指令(intrinsic)的優(yōu)化,就能達(dá)到事半功倍的效果。內(nèi)聯(lián)指令是匯編指令的直接映射,具有很高的效率。例如:
    #define muh_ r(varl,var2)           _mpylir(varl,var2)
    #define L_ add(L_var1,L_var2)       _sadd(L_var1,L_var2)
    #define L_ muh(var1,var2)           _smpy(var1,var2)
    在C程序中嵌入?yún)R編語(yǔ)句的方法比較簡(jiǎn)單,只需在匯編語(yǔ)句的左右加上一個(gè)引號(hào),然后用小括弧將匯編語(yǔ)句括住,并在括弧前加上ASM標(biāo)識(shí)符,例如ASM(“匯編語(yǔ)句”)。采用這種方法一方面可以在C程序中實(shí)現(xiàn)用C語(yǔ)言無(wú)法實(shí)現(xiàn)的一些硬件控制功能,如修改中斷控制寄存器、中斷使能或屏蔽、讀取狀態(tài)寄存器和中斷標(biāo)志寄存器等;另一方面,也可以用這種方法在C程序中的關(guān)鍵部分用匯編語(yǔ)句代替C語(yǔ)言以?xún)?yōu)化程序。而采用這種方法的缺點(diǎn)是比較容易破壞C環(huán)境,因?yàn)镃編譯器在編譯嵌入了匯編語(yǔ)句的C程序時(shí)并不檢查或分析所嵌入的匯編語(yǔ)句。采用這種方法需要注意以下幾點(diǎn):
    (1)不要破壞C環(huán)境,因?yàn)镃編譯器并不檢查和分析嵌入的匯編語(yǔ)句。
    (2)匯編語(yǔ)句不要改變C程序中變量的值,不要在匯編語(yǔ)句中加入?yún)R編器而改變匯編環(huán)境。
    在簡(jiǎn)化算法的基礎(chǔ)上,使用CCS提供的C優(yōu)化器進(jìn)行C語(yǔ)言?xún)?yōu)化,同時(shí)還使用內(nèi)聯(lián)函數(shù)和匯編優(yōu)化。
3 G.729在TMS320C5416上的實(shí)現(xiàn)
3.1 TMS320C5416的體系結(jié)構(gòu)和應(yīng)用
    TMS320C5416(以下簡(jiǎn)稱(chēng)C5416)是TI公司最近推出的一款高性?xún)r(jià)比的通用l6位定點(diǎn)DSP芯片,它的內(nèi)核CPU基本組成與TMS320C54X系列一樣。C5416的單指令周期為6.25 RS,每秒執(zhí)行的指令數(shù)為160×106,指令系統(tǒng)豐富并具有很多多功能指令,使用了6級(jí)指令流水線(xiàn)結(jié)構(gòu),這些都很適合實(shí)現(xiàn)低時(shí)延的G.729聲碼器。采用一個(gè)40bit ALU、128K×16bit片內(nèi)RAM(包括64KB的片內(nèi)DARAM和64KB的片內(nèi)SARAM)、3個(gè)獨(dú)立的l6bit數(shù)據(jù)內(nèi)存總線(xiàn)、1個(gè)程序內(nèi)存總線(xiàn)、3個(gè)MCBSP、6信道DMA控制器、1個(gè)8/l6位并行增強(qiáng)主機(jī)端口接口及2個(gè)l6bit計(jì)時(shí)器。
    在TMS320C5416中通過(guò)PCM3002進(jìn)行語(yǔ)音信號(hào)的A/D和D/A轉(zhuǎn)換,PCM3002使用兩個(gè)串行通道,一個(gè)用于控制內(nèi)部寄存器,另外一個(gè)用于數(shù)據(jù)傳輸。在系統(tǒng)板TMS320C5416中默認(rèn)的語(yǔ)音信號(hào)的抽樣率是48kHz,通過(guò)修改PCM3002的內(nèi)部控制寄存器,設(shè)定PCM3002信號(hào)的抽樣率。為了滿(mǎn)足G.729編碼的要求,PCM3002信號(hào)的抽樣率為8 000Hz。為了充分利用DSP進(jìn)行信號(hào)處理,通過(guò)使用MCBSP和DMA把抽樣的數(shù)據(jù)送入DMA的緩沖區(qū)中,當(dāng)緩沖區(qū)滿(mǎn)時(shí)產(chǎn)生一次中斷,DSP把DMA的緩沖區(qū)中的數(shù)據(jù)讀入DSP中進(jìn)行處理,然后把處理過(guò)的數(shù)據(jù)送入DMA發(fā)送緩沖區(qū)。
3.2 G.729在TMS320C5416的實(shí)現(xiàn)
    G.729的處理過(guò)程中采用塊處理技術(shù)如圖3所示。按照G.729標(biāo)準(zhǔn),每塊(幀)由80個(gè)樣本組成,最初80個(gè)樣本被存起來(lái),處理過(guò)程中有兩個(gè)操作是同時(shí)進(jìn)行的。在處理塊L中數(shù)據(jù)的同時(shí),存儲(chǔ)L+1塊的數(shù)據(jù)。

 


    在G.729軟件仿真時(shí)發(fā)現(xiàn)運(yùn)算量較大的部分是LSP系數(shù)的矢量量化與激勵(lì)碼本(自適應(yīng)碼本和固定碼本)的搜索,這兩個(gè)部分的運(yùn)算量大約占全部編解碼運(yùn)算量的60%以上。所以在優(yōu)化過(guò)程中,著重對(duì)固定碼本Acelp_Code_A()、分?jǐn)?shù)基音分析pitch_fr3()、開(kāi)環(huán)基音分析pitch_ol_fast()、增益量化Qua_gain()等占據(jù)絕大多數(shù)運(yùn)算量的函數(shù)進(jìn)行了優(yōu)化;僅僅簡(jiǎn)化算法不能滿(mǎn)足實(shí)時(shí)要求,還使用了CCS提供的C優(yōu)化器進(jìn)行C語(yǔ)言?xún)?yōu)化,同時(shí)還可以使用內(nèi)聯(lián)函數(shù)和匯編語(yǔ)句。經(jīng)過(guò)以上處理后,輸出的信號(hào)滿(mǎn)足通信要求。通過(guò)分析優(yōu)化前后這些主要模塊的速度對(duì)照表(如表1所示),可以看出各個(gè)主要模塊的優(yōu)化效果是比較明顯的。一幀語(yǔ)音信號(hào)經(jīng)過(guò)處理前后幅頻圖(如圖4所示),可以看出語(yǔ)音信號(hào)經(jīng)過(guò)處理后保持良好的語(yǔ)音質(zhì)量。

 

 


    系統(tǒng)運(yùn)行主要分為四個(gè)過(guò)程:語(yǔ)音存儲(chǔ),數(shù)據(jù)編碼壓縮,數(shù)據(jù)解壓縮,語(yǔ)音回放。將輸入的語(yǔ)音數(shù)據(jù)首先進(jìn)行抗疊濾波,然后進(jìn)行模數(shù)轉(zhuǎn)換,經(jīng)DSP采集并存入RAM存儲(chǔ)器中,即是語(yǔ)音存儲(chǔ)過(guò)程;接著運(yùn)行編碼程序,將前面存儲(chǔ)的信息進(jìn)行壓縮并存儲(chǔ),這是編碼過(guò)程;然后進(jìn)行解碼,并將數(shù)據(jù)存回原來(lái)的位置;最后DSP執(zhí)行輸出指令,將解碼后的數(shù)據(jù)送到數(shù)模轉(zhuǎn)換器中,實(shí)現(xiàn)模擬輸出。
    用C5416最終實(shí)時(shí)實(shí)現(xiàn)了G.729聲碼器,用該聲碼器分別實(shí)時(shí)播放純語(yǔ)音文件、語(yǔ)音加背景音樂(lè)文件。對(duì)重建語(yǔ)音質(zhì)量的主觀(guān)測(cè)試結(jié)果表明,恢復(fù)語(yǔ)音保留了很好的說(shuō)話(huà)人特征,合成語(yǔ)音的清晰度和自然度均較好。該聲碼器性能測(cè)試數(shù)據(jù)如下:編解碼一幀平均時(shí)鐘周期數(shù)為1 010 350,CPU時(shí)鐘頻率為160MHz,所以編解碼一幀需要7.31ms時(shí)間;程序RAM容量為9.381KB;數(shù)據(jù)和常數(shù)RAM容量為7.146KB。以上數(shù)據(jù)表明,G.729編解碼器在C5416上實(shí)時(shí)實(shí)現(xiàn)的技術(shù),可以很好地應(yīng)用在電話(huà)會(huì)議、多媒體通信以及采用寬帶語(yǔ)音編碼的通信系統(tǒng)中。
參考文獻(xiàn)
[1] 宋欽梅,黃冰.基于G.729A的CSACELP語(yǔ)音編碼算法的優(yōu)化改進(jìn)[J].電子技術(shù)應(yīng)用,2007,33(3).
[2] 沈勇,唐昆.DM642上G.729A編解碼算法實(shí)現(xiàn)和應(yīng)用[J].微計(jì)算機(jī)信息,2006.
[3] 曹延偉,林嘉宇.用定點(diǎn)DSP實(shí)現(xiàn)ITU G.729語(yǔ)音壓縮算法[J].微處理機(jī)信息,2001,(3).
[4] 王虹,陳鍇.DSP實(shí)現(xiàn)G.729語(yǔ)音編解碼方法及關(guān)鍵技術(shù)研究[J].信息技術(shù),2005,(7).
[5] 劉為超,黎福海.G.729在DSP應(yīng)用中代碼優(yōu)化研究[J].現(xiàn)代電子技術(shù),2005,(5).
[6] 王炳錫.語(yǔ)音編碼[M].西安:西安電子科技大學(xué)出版社,2002.
[7] TU-T Recommendation G.729 Annex A-Reduced Complexity CS-ACELPD[S].1996.(5).
[8] TMS320VC5416 Fixed-Point Digital Signal Processor l[R],2001.
[9] 黃濤.基于通用DSP的G.729語(yǔ)音壓縮編解碼算法的實(shí)現(xiàn)與優(yōu)化[D].天津:天津大學(xué)出版社,2005,(8)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。