一種G.729語音編解碼算法的優(yōu)化和實(shí)現(xiàn)方案
出處:黃 冰,楊召青,呂治國 發(fā)布于:2011-06-21 10:37:41
摘 要: 通過分析G.729語音編解碼算法和TMS320VC5416的原理,提出了有效優(yōu)化算法的方案,降低了算法的復(fù)雜度,把優(yōu)化的G.729算法在TMS320VC5416的系統(tǒng)板實(shí)現(xiàn),完成對輸入語音或數(shù)據(jù)的壓縮、存儲及回放。
多媒體信息技術(shù)和網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,語音通信技術(shù)也在不斷地進(jìn)行更新。語音壓縮編碼技術(shù)在語音通信技術(shù)中占據(jù)了重要的地位。人們希望用盡可能低的碼率獲得盡可能好的合成語音質(zhì)量。在日常的語音通信中,有將近一半的時(shí)間是空閑的而沒有講話,始終用一個(gè)速率進(jìn)行語音編解碼是對信道資源的一種浪費(fèi),于是非連續(xù)傳輸/舒適噪聲生成(DTX/CNG)技術(shù)應(yīng)運(yùn)而生。這種技術(shù)實(shí)現(xiàn)了變速率語音編解碼。 語音編碼技術(shù)質(zhì)量的評價(jià)可分為主觀評價(jià)和客觀評價(jià)。主觀評價(jià)方法是人對語音質(zhì)量的真實(shí)反映。采用主觀測試也是對語音系統(tǒng)的一種可靠的評估。
1 G.729編解碼算法的原理
G.729編碼方案是電話帶寬的語音信號編碼的標(biāo)準(zhǔn),對輸入語音性質(zhì)的模擬信號用8kHz、采樣,16比特線性PCM量化。G.729A是ITU推出的語音編碼標(biāo)準(zhǔn)G.729的簡化版本。語音信號的波形編碼力圖使重建語音波形保持原始語音信號的波形形狀。這類編碼器通常將語音信號作為一般的波形信號來處理,它具有適應(yīng)能力強(qiáng)、語音質(zhì)量好等優(yōu)點(diǎn),但所需用的編碼速率高。參數(shù)編碼通過對語音信號特征參數(shù)的提取及編碼來降低編碼速率,力圖使重建語音信號盡可能保持原語音的語意,而重建信號的波形同原語音信號的波形可能會有相當(dāng)大的差別。這種算法克服了原有波形編碼器與聲碼器的弱點(diǎn),而結(jié)合了它們各自的長處,在4kb/s~16kb/s速率上能夠得到高質(zhì)量合成語音,而在本質(zhì)上也具有波形編碼的優(yōu)點(diǎn)。G.729所描述的CS-ACELP聲碼器采用的CELP聲碼器就屬于這類編碼器。
CELP是近10年來成功的語音編碼算法。CELP語音編碼算法用線性預(yù)測提取聲道參數(shù),用一個(gè)包含許多典型的激勵(lì)矢量的碼本作為激勵(lì)參數(shù),每次編碼時(shí)都在這個(gè)碼本中搜索一個(gè)的激勵(lì)矢量,這個(gè)激勵(lì)矢量的編碼值就是這個(gè)序列的碼本中的序號。CELP已經(jīng)被許多語音編碼標(biāo)準(zhǔn)所采用,美國聯(lián)邦標(biāo)準(zhǔn)FS1016就是采用CELP的編碼方法,主要用于高質(zhì)量的窄帶語音保密通信。在編碼端,主要進(jìn)行有線譜對(LSP)參數(shù)的量化、基音分析、固定碼本搜索和增益量化四個(gè)步驟。編碼器首先對輸入信號(8kHz采樣16bit PCM信號)進(jìn)行預(yù)處理,然后對每幀語音信號進(jìn)行線性預(yù)測,得到LPC系數(shù),并把LPC參數(shù)轉(zhuǎn)換成LSP參數(shù),對LSP參數(shù)進(jìn)行矢量量化。在接下來的基音分析中,每一幀先搜索到基音時(shí)延T的一個(gè)候選時(shí)延,然后依據(jù)候選時(shí)延搜索每一幀的基音時(shí)延。解碼器在每一子幀內(nèi),對LSP系數(shù)進(jìn)行內(nèi)插,并把它們變換成LP濾波器系數(shù)后,依次進(jìn)行激勵(lì)生成、語音合成和后處理工作。
2 算法優(yōu)化和DSP應(yīng)用改進(jìn)
G.729語音編解碼系統(tǒng)要求實(shí)時(shí)性高,需在有限的時(shí)間內(nèi)對外部輸入的信號完成指定處理,即信號處理的速度必須大于等于輸入信號更新的速度,因此需要進(jìn)行算法的優(yōu)化改進(jìn)。對C語言編寫的代碼進(jìn)行優(yōu)化,同時(shí)使用內(nèi)聯(lián)指令,又在C程序中嵌入?yún)R編語句,盡量提高信號處理的速度。
DSP是一種獨(dú)特的微處理器,是以數(shù)字信號來處理大量信息的器件。其工作原理是接收模擬信號,轉(zhuǎn)換為0或1的數(shù)字信號。再對數(shù)字信號進(jìn)行修改、刪除、強(qiáng)化,并在其他系統(tǒng)芯片中把數(shù)字?jǐn)?shù)據(jù)解譯回模擬數(shù)據(jù)或?qū)嶋H環(huán)境格式。它不僅具有可編程性,而且其實(shí)時(shí)運(yùn)行速度可達(dá)每秒數(shù)以千萬條復(fù)雜指令程序,遠(yuǎn)遠(yuǎn)超過通用微處理器,是數(shù)字化電子世界中日益重要的電腦芯片。它的強(qiáng)大數(shù)據(jù)處理能力和高運(yùn)行速度,是值得稱道的兩大特色。
2.1 算法的優(yōu)化改進(jìn)
首先在算法上進(jìn)行改進(jìn),如圖1所示,采用一種結(jié)合WD-LSP函數(shù)并結(jié)合次部分碼本快速搜索的CS-ACELP語音編碼算法,同時(shí)采用基于聲學(xué)心理模型的知覺加權(quán)濾波器,使語音編碼在不降低語音質(zhì)量的情況下降低計(jì)算復(fù)雜度。WD-LSP函數(shù)主要用于區(qū)分UV-V/S-V的邊界。其原理是:如果函數(shù)值大于給定的極限值η,則開環(huán)基音延遲Top重新估計(jì),否則,開環(huán)基音延遲Top用前一幀自適應(yīng)碼本延遲來更新。在第i幀F(xiàn)i的WD-LSP函數(shù)和用于確定開環(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ù)庫用于估計(jì)delta-LSP在UV-V/S-V邊界的平方根值(RMS)。因此,WD-LSP用于檢測VU-V/S-V邊界非常敏感。η是一個(gè)設(shè)為0.01的極限值。整個(gè)計(jì)算可節(jié)省21%的計(jì)算量,經(jīng)過這種算法前后語音信號如圖2所示。


2.2 進(jìn)行C語言優(yōu)化
C語言是一種成功的系統(tǒng)描述語言,用C語言開發(fā)的UNIX操作系統(tǒng)就是一個(gè)成功的范例;同時(shí)C語言又是一種通用的程序設(shè)計(jì)語言,在國際上廣泛流行。世界上很多著名的計(jì)算公司都成功的開發(fā)了不同版本的C語言,很多的應(yīng)用程序也都使用C語言開發(fā)的,它是一種很有發(fā)展前途的程序設(shè)計(jì)語言。C是中級語言。它把語言的基本結(jié)構(gòu)和語句與低級語言的實(shí)用性結(jié)合起來。C 語言可以像匯編語言一樣對位、字節(jié)和地址進(jìn)行操作, 而這三者是計(jì)算機(jī)基本的工作單元。
基于G.729標(biāo)準(zhǔn)的聲碼器終在定點(diǎn)TMS320C5416上實(shí)時(shí)實(shí)現(xiàn)。在定點(diǎn)TMS320C5416內(nèi),浮點(diǎn)數(shù)是通過將小數(shù)點(diǎn)固定在特定位置來表示的,這是定點(diǎn)TMS320C5416的局限之一。為了區(qū)分小數(shù)的不同值域,使用了Q-格式。不同的Q-格式在于小數(shù)點(diǎn)的位置不同,因此整數(shù)域也不同。當(dāng)兩個(gè)數(shù)相乘時(shí),會產(chǎn)生一個(gè)特殊的符號位。如:兩個(gè)Q4數(shù)相乘, 需要附加一個(gè)左移的操作以去除這個(gè)多余的符號位,乘積應(yīng)該是一個(gè)Q9格式的。如果DSP中的FRST位被置位,這個(gè)去除多余符號位的移位操作能夠自動(dòng)完成。對于16位數(shù)的乘法運(yùn)算,應(yīng)該得到32 位的乘積。但是,由于只需要16位的積,該32位乘積中只有高16位被存儲下來,積的低16位被丟棄。兩個(gè)32位數(shù)相乘,只需要32位的乘積,而不是64位,不過注意到TMS320C5416是16位的,所以在雙重格式中,32位整數(shù)分為高位字和低位字。高、低位字中都含有符號位,以進(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ù)值超過一定范圍時(shí)將會產(chǎn)生溢出。在G.729算法標(biāo)準(zhǔn)中, 累加器的值被限定在80000000~7FFFFFFF之內(nèi)——即負(fù)數(shù)和正數(shù)。不過在TMS320C5416中,如果將PMST寄存器中的OVM置位,則溢出會得到自動(dòng)處理。
2.3 內(nèi)聯(lián)指令的應(yīng)用和C程序中嵌入?yún)R編語句
由于語音編碼的特點(diǎn),編解碼函數(shù)都是由一些基本的加減乘除簡單函數(shù)組織而成,這些函數(shù)定義在BASIC OP.C和OPER_32B.C兩個(gè)文件中,如果能夠?qū)@些簡單函數(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編語句的方法比較簡單,只需在匯編語句的左右加上一個(gè)引號,然后用小括弧將匯編語句括住,并在括弧前加上ASM標(biāo)識符,例如ASM。采用這種方法一方面可以在C程序中實(shí)現(xiàn)用C語言無法實(shí)現(xiàn)的一些硬件控制功能,如修改中斷控制寄存器、中斷使能或屏蔽、讀取狀態(tài)寄存器和中斷標(biāo)志寄存器等;另一方面,也可以用這種方法在C程序中的關(guān)鍵部分用匯編語句代替C語言以優(yōu)化程序。而采用這種方法的缺點(diǎn)是比較容易破壞C環(huán)境,因?yàn)镃編譯器在編譯嵌入了匯編語句的C程序時(shí)并不檢查或分析所嵌入的匯編語句。采用這種方法需要注意以下幾點(diǎn):
?。?)不要破壞C環(huán)境,因?yàn)镃編譯器并不檢查和分析嵌入的匯編語句。
?。?)匯編語句不要改變C程序中變量的值,不要在匯編語句中加入?yún)R編器而改變匯編環(huán)境。
在簡化算法的基礎(chǔ)上,使用CCS提供的C優(yōu)化器進(jìn)行C語言優(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(以下簡稱C5416)是TI公司近推出的一款高性價(jià)比的通用l6位定點(diǎn)DSP芯片,它的內(nèi)核CPU基本組成與TMS320C54X系列一樣。C5416的單指令周期為6.25 RS,每秒執(zhí)行的指令數(shù)為160×106,指令系統(tǒng)豐富并具有很多多功能指令,使用了6級指令流水線結(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)存總線、1個(gè)程序內(nèi)存總線、3個(gè)MCBSP、6信道DMA控制器、1個(gè)8/l6位并行增強(qiáng)主機(jī)端口接口及2個(gè)l6bit計(jì)時(shí)器。
在TMS320C5416中通過PCM3002進(jìn)行語音信號的A/D和D/A轉(zhuǎn)換,PCM3002使用兩個(gè)串行通道,一個(gè)用于控制內(nèi)部寄存器,另外一個(gè)用于數(shù)據(jù)傳輸。在系統(tǒng)板TMS320C5416中默認(rèn)的語音信號的抽樣率是48kHz,通過修改PCM3002的內(nèi)部控制寄存器,設(shè)定PCM3002信號的抽樣率。為了充分利用DSP進(jìn)行信號處理,通過使用MCBSP和DMA把抽樣的數(shù)據(jù)送入DMA的緩沖區(qū)中,當(dāng)緩沖區(qū)滿時(shí)產(chǎn)生中斷,DSP把DMA的緩沖區(qū)中的數(shù)據(jù)讀入DSP中進(jìn)行處理,然后把處理過的數(shù)據(jù)送入DMA發(fā)送緩沖區(qū)。
3.2 G.729在TMS320C5416的實(shí)現(xiàn)
G.729的處理過程中采用塊處理技術(shù)如圖3所示。按照G.729標(biāo)準(zhǔn),每塊(幀)由80個(gè)樣本組成,初80個(gè)樣本被存起來,處理過程中有兩個(gè)操作是同時(shí)進(jìn)行的。在處理塊L中數(shù)據(jù)的同時(shí),存儲L+1塊的數(shù)據(jù)。

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


系統(tǒng)運(yùn)行主要分為四個(gè)過程:語音存儲,數(shù)據(jù)編碼壓縮,數(shù)據(jù)解壓縮,語音回放。將輸入的語音數(shù)據(jù)首先進(jìn)行抗疊濾波,然后進(jìn)行模數(shù)轉(zhuǎn)換,經(jīng)DSP采集并存入RAM存儲器中,即是語音存儲過程;接著運(yùn)行編碼程序,將前面存儲的信息進(jìn)行壓縮并存儲,這是編碼過程;然后進(jìn)行解碼,并將數(shù)據(jù)存回原來的位置;DSP執(zhí)行輸出指令,將解碼后的數(shù)據(jù)送到數(shù)模轉(zhuǎn)換器中,實(shí)現(xiàn)模擬輸出。
用C5416終實(shí)時(shí)實(shí)現(xiàn)了G.729聲碼器,用該聲碼器分別實(shí)時(shí)播放純語音文件、語音加背景音樂文件。對重建語音質(zhì)量的主觀測試結(jié)果表明,恢復(fù)語音保留了很好的說話人特征,合成語音的清晰度和自然度均較好。該聲碼器性能測試數(shù)據(jù)如下:編解碼一幀平均時(shí)鐘周期數(shù)為1 010 350,CPU時(shí)鐘頻率為160MHz,所以編解碼一幀需要7.31ms時(shí)間;。以上數(shù)據(jù)表明,G.729編解碼器在C5416上實(shí)時(shí)實(shí)現(xiàn)的技術(shù),可以很好地應(yīng)用在電話會議、多媒體通信以及采用寬帶語音編碼的通信系統(tǒng)中。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- ARM技術(shù)架構(gòu)與應(yīng)用開發(fā)實(shí)踐指南2026/1/6 10:40:19
- 嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)選型與移植技術(shù)指南2025/12/31 10:42:31
- 工業(yè)嵌入式系統(tǒng):通信接口技術(shù)選型與抗干擾設(shè)計(jì)實(shí)踐2025/12/15 14:36:53
- 深入解析嵌入式 OPENAMP 框架:開啟異核通信新時(shí)代2025/7/22 16:27:29
- 一文快速了解OPENWRT基礎(chǔ)知識2025/7/14 16:59:04
- 高速PCB信號完整性(SI)設(shè)計(jì)核心實(shí)操規(guī)范
- 鎖相環(huán)(PLL)中的環(huán)路濾波器:參數(shù)計(jì)算與穩(wěn)定性分析
- MOSFET反向恢復(fù)特性對系統(tǒng)的影響
- 電源IC在惡劣環(huán)境中的防護(hù)設(shè)計(jì)
- 連接器耐腐蝕性能測試方法
- PCB電磁兼容(EMC)設(shè)計(jì)與干擾抑制核心實(shí)操規(guī)范
- 用于相位噪聲測量的低通濾波器設(shè)計(jì)與本振凈化技術(shù)
- MOSFET在高頻開關(guān)中的EMI問題
- 電源IC在便攜式設(shè)備中的設(shè)計(jì)要點(diǎn)
- 連接器結(jié)構(gòu)設(shè)計(jì)常見問題分析









