機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
G.729在DSP應(yīng)用中代碼優(yōu)化研究
G.729在DSP應(yīng)用中代碼優(yōu)化研究
 更新時(shí)間:2009-6-5 9:12:43  點(diǎn)擊數(shù):2
【字體: 字體顏色
摘 要:對G.729編解碼算法和TMS320C54x的原理進(jìn)行了介紹,并介紹了如何實(shí)現(xiàn)該算法和優(yōu)化代碼。
  關(guān)鍵詞:G.729;編碼器;解碼器;優(yōu)化;TMS320C54x
 1G.729編解碼算法簡介
  G.729是ITU組織于1995年正式批準(zhǔn)的,命名為G.729建議。該建議采用共軛結(jié)構(gòu)[CD2]代數(shù)碼激勵(lì)線性預(yù)測(CSACELP)算法,其帶寬約4 kHz,工作速率為8 kb/s,MO S在4.0左右,語音質(zhì)量同32 kb/s的ADPCM相當(dāng)。因此,G.729被廣泛應(yīng)用于DSVD、數(shù)字衛(wèi)星系統(tǒng)、電視會(huì)議、可視電話、IP電話及各種多媒體通信系統(tǒng)中。
1.1編碼器
  編碼器是基于碼激勵(lì)線性預(yù)測(CELP)編碼模型的,采樣率為8 kHz,每10 ms對應(yīng)80個(gè)采樣點(diǎn)為1幀。編碼器原理如圖1所示。
  語音信號(hào)先進(jìn)入預(yù)處理模塊,信號(hào)經(jīng)過高通濾波和信號(hào)幅度衰減后,再作為后續(xù)模塊分析的信號(hào)。每10 ms幀將進(jìn)行一次LP分析以計(jì)算出LP濾波器參數(shù),這些參數(shù)被轉(zhuǎn)換為LSP參數(shù),并利用預(yù)測式兩級矢量量化將其量化為18 b。激勵(lì)信號(hào)應(yīng)用分析合成(ABS)搜索算法進(jìn)行選擇。在該算法中,依據(jù)感覺加權(quán)失真測度使原始與重建語音信號(hào)間的誤差最小。這是通過用感覺加權(quán)濾波器對誤差信號(hào)濾波來完成的,濾波器系數(shù)由未量化LP濾波器推得。感覺加權(quán)的數(shù)目通過自適應(yīng)以提高效果,使輸入信號(hào)具有平坦的頻響。
  激勵(lì)參數(shù)(固定和自適應(yīng)碼書參數(shù))每5 ms(40樣點(diǎn))子幀確定一次。量化和未量化的LP濾波器系數(shù)應(yīng)用到第二子幀,采用了插值LP濾波器系數(shù)(量化和未量化的)。一個(gè)開環(huán)基音延遲每10 ms幀基于感覺加權(quán)語音信號(hào)估算一次,然后以下操作每子幀重復(fù)一次。使LP殘差通過加權(quán)合成濾波器W(z)/A(z)濾波算得目標(biāo)信號(hào)X(n)。這些濾波器的初始狀態(tài),是通過對L P殘差與激勵(lì)間的誤差進(jìn)行濾波來更新的。這與通常的方法即從加權(quán)語音信號(hào)中減去加權(quán)合成濾波器的零輸入響應(yīng)是等價(jià)的。算得加權(quán)合成濾波器的沖擊響應(yīng)h (n),然后進(jìn)行閉環(huán)基音分析(以尋找自適應(yīng)碼書和增益),利用目標(biāo)信號(hào)X(n)和沖擊響應(yīng)h(n),在開環(huán)基音延遲值附近搜索,采用1/3精度的分?jǐn)?shù)基音延遲,基音延遲再第一子幀編碼為8 b,而在第二子幀采用5 b編碼。自適應(yīng)碼書貢獻(xiàn)(經(jīng)濾波)減去后,目標(biāo)信號(hào)X(n)變?yōu)閄′(n),這個(gè)新的目標(biāo)信號(hào)X′(n)用在固定碼書搜索中以搜索最優(yōu)激勵(lì)。一個(gè)17 b的代數(shù)碼書用作固定碼書激勵(lì)。自適應(yīng)和固定碼書的增益用7 b進(jìn)行矢量量化(MA預(yù)測應(yīng)用到固定碼書增益中)。最后,濾波器的記憶值由已確定的激勵(lì)信號(hào)來更新。
1.2解碼器
  譯碼器原理如圖2所示。
  首先,參數(shù)標(biāo)號(hào)從接收到的比特流中提取。這些標(biāo)號(hào)被譯碼,以獲得對應(yīng)一個(gè)10 ms語音幀的編碼參數(shù)。這些參數(shù)是LSP系數(shù),2個(gè)分?jǐn)?shù)基音延遲,2個(gè)固定碼書矢量,2組自適應(yīng)碼書和固定碼書增益。LSP系數(shù)在每一子幀中進(jìn)行插值并轉(zhuǎn)化為LP濾波器系數(shù),然后對每5 ms子幀進(jìn)行如下步驟操作:
  ①自適應(yīng)碼書和固定碼書乘以各自增益后相加獲得激勵(lì)。
 、谟肔P合成濾波器對激勵(lì)進(jìn)行濾波,獲得重建語音。
 、壑亟ㄕZ音信號(hào)再通過一個(gè)后處理級,該后處理級包括一個(gè)基于長時(shí)和短時(shí)合成濾波器的自適應(yīng)后濾波器和一個(gè)能實(shí)現(xiàn)高通和比例縮放的濾波器。
2TMS320C54x性能簡介
  
TMS320C54x 是TI公司推出的高性能16 b定點(diǎn)DSP。因高性能與低功耗使其成為無線和有線通信系統(tǒng)的理想器件。C54x系列DSP采用改進(jìn)哈佛結(jié)構(gòu),具有1個(gè)程序存儲(chǔ)器總線和3個(gè)數(shù)據(jù)存儲(chǔ)器總線,17×17 b乘法器,1個(gè)供非流水的MAC(乘法/累加)使用的專用加法器,1個(gè)比較、選擇、存儲(chǔ)單元。為C54x配備了雙操作碼指令集,他是該系列DSP操作靈活和高速度的基礎(chǔ)。他的執(zhí)行速率最高可以達(dá)到120 MIPS。3代碼編寫及其優(yōu)化
  
由于G.729算法非常復(fù)雜,而TMS320C54x的性能又非常有限,因此,實(shí)現(xiàn)語音信息的實(shí)時(shí)處理必然要求盡可能優(yōu)化代碼和充分利用DSP的性能。通常編寫代碼的方式有3種:用純匯編語言編程、用純C語言編程、混合編程。
3.1用純匯編語言編程
  TI公司提供了針對開發(fā)DSP的匯編語言,用戶可以用他進(jìn)行軟件開發(fā)。此種方式可以充分利用DSP芯片的硬件資源,其代碼效率高,程序執(zhí)行速度快。但是用DSP芯片的匯編語言編寫程序比較繁雜,而且軟件的修改和升級較困難。
3.2用純C語言編程
  C語言的可讀性、可修改性、可移植性和可重用性非常好。在用C語言進(jìn)行DSP軟件開發(fā)時(shí),一般先在PC機(jī)上或工作站上對算法進(jìn)行仿真,仿真通過后再將程序移植到DSP平臺(tái)中。然而,由于G.729算法非常復(fù)雜,直接編寫的C程序通常無法實(shí)現(xiàn)對語音實(shí)時(shí)的處理。例如:實(shí)際測試表明,用C語言編程和手寫匯編語言編程之間的效率相差幾倍甚至幾十倍。因此,有必要對程序進(jìn)行優(yōu)化。優(yōu)化的方法通常有如下幾種:
3.2.1快速算法
  與直接算法相比,快速算法通常放棄了概念上的清晰度,轉(zhuǎn)而追求程序上的高效率,典型的例子如DCT與FFT。DCT(離散余弦變換)是另一種常用的正交變換,以一個(gè)直接的32×32的DCT變換為例,共需做1 024次乘法和992次加法。而采用了Lee提出的快速DCT變換方法后,對于同樣的輸入條件,只需做384次乘法和432次加法。適當(dāng)采用快速算法,可極大的提 高代碼運(yùn)行效率。
3.2.2計(jì)算表格化
  為了提高算法的運(yùn)行效率,減少運(yùn)行時(shí)計(jì)算的時(shí)間開銷,應(yīng)盡可能把一些運(yùn)行時(shí)計(jì)算 的參數(shù)做成查找表或常數(shù)數(shù)值,從而將運(yùn)行時(shí)的計(jì)算轉(zhuǎn)化為編譯時(shí)的計(jì)算。這不僅適用于一 些比較規(guī)整的參數(shù)表,對于一些比較耗時(shí)的計(jì)算(如浮點(diǎn)除)也同樣適用。
3.2.3數(shù)組指針化
  在C語言程序中,對數(shù)組的尋址是非常耗時(shí)的,特別是對****數(shù)組。因此,在設(shè)計(jì)中 首先降低數(shù)組的維數(shù),再進(jìn)一步使之指針化。
3.2.4減少判斷轉(zhuǎn)移
  DSP多采用流水線法,如TMS320C54x就采用了6級流水線結(jié)構(gòu),頻繁的轉(zhuǎn)移指令將使流水線難以發(fā)揮作用。另外,DSP的大多數(shù)指令為周期指令,但轉(zhuǎn)移指令通常要耗費(fèi)較多的機(jī)器周期。因此,應(yīng)該盡可能減少程序中的轉(zhuǎn)移分支。事實(shí)上,通過對程序流的分析,許多判斷轉(zhuǎn)移可以用簡單的條件組合來實(shí)現(xiàn)。例如將程序if (sum>32 767)sum=32 767優(yōu)化成sum= min(sum,32 767)。
3.3混合編程
  混合編程就是將C語言和匯編語言結(jié)合起來,充分發(fā)揮兩者的優(yōu)點(diǎn)和DSP性能的一種編程方法;旌暇幊讨饕腥缦3種方法:
3.3.1獨(dú)立編寫C和匯編程序
  這種方法在實(shí)際工程應(yīng)用較多,首先分別獨(dú)立編寫C和匯編程序,然后將他們加入到同一個(gè)工程文件中,再利用集成開發(fā)環(huán)境對他們進(jìn)行編譯鏈接,最后生成可執(zhí)行代碼。通常FFT,F(xiàn)IR,IIR等的程序一般采用匯編語言編寫,而主程序則可采用C語言,這樣只需在C程序中定義這些程序?yàn)橥獠空{(diào)用即可。采用這種方法必須遵循有關(guān)的調(diào)用規(guī)則,有了這些規(guī)則,C和匯編函數(shù)之間的接口就變得很方便:C程序既可以調(diào)用匯編程序,也可以訪問匯編程序中定義的變量;匯編程序也可以調(diào)用C函數(shù)或訪問C程序中定義的變量。但用戶必須維護(hù)各匯編模塊入口和出口代碼,計(jì)算傳遞的參數(shù)在堆棧中的偏移量,工作量稍大,但能做到對程序的絕對控制。
3.3.2直接在C程序中嵌入?yún)R編語句
  在C程序中嵌入?yún)R編語句的方法比較簡單,只需在匯編語句的左右加上一個(gè)引號(hào),然后用小括弧將匯編語句括住,并在括弧前加上asm標(biāo)識(shí)符即可,即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)椋镁幾g器在編譯嵌入了匯編語句的C程序時(shí)并不檢查或分析所嵌入的匯編語句。
  采用這種方法需要注意:
 、俨灰茐腃環(huán)境,因?yàn)镃編譯器并不檢查和分析嵌入的匯編語句。
 、诓迦胩D(zhuǎn)語句和標(biāo)號(hào)會(huì)產(chǎn)生不可預(yù)測的結(jié)果。
 、蹍R編語句不要改變C程序中變量的值。
 、懿灰趨R編語句中加入?yún)R編器選項(xiàng)而改變匯編環(huán)境。
3.3.3手工優(yōu)化和修改C程序編譯生成的匯編程序
  采用這種方法通常需要對C編譯器非常了解,而且在修改匯編程序時(shí)要避免與程序的其他部分發(fā)生沖突。通常采用如下方法進(jìn)行修改:在集成開發(fā)環(huán)境中選擇 View菜單下的MixedSource/ASM選項(xiàng),可看到交*列表的匯編程序;在所生成的語句中,每個(gè)C語句的下面就是C編譯器對該C語句編譯所生成的匯編語句,通過查看交*列表的匯編程序,可以對某些編譯不是很優(yōu)但卻是比較關(guān)鍵的匯編語句進(jìn)行修改。注意,修改匯編語句時(shí)切勿破壞C環(huán)境。
4結(jié)語
  
由于G.729算法的復(fù)雜性,而TMS320C54x有限的性能,因此,通常采用純C語言編程是無法實(shí)現(xiàn)對語音的實(shí)時(shí)處理的。而采用純匯編語言編程,雖然能夠達(dá)到實(shí)時(shí)的要求,但是其開發(fā)周期過長。在實(shí)際情況下,主要是采用混合編程,主函數(shù)通常采用C程序編寫,因?yàn)檫@樣編譯器會(huì)幫助初始化一些狀態(tài)值,既準(zhǔn)確又耗時(shí)少,一些用來存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)體用C語言定義,因?yàn)橛脜R編定義時(shí)會(huì)非常麻煩,對于那些耗時(shí)多、運(yùn)算密集的模塊則要用匯編編寫,這樣既能保證程序的結(jié)構(gòu)化和可讀性,又能保證代碼的高效。參考文獻(xiàn)[1]TMS320C54x Application GuideTexas Instruments,1996
[2]TMS320C54x Code Composer Studio Tutorial . Texas Instrument , 2000
[3]戴明楨,周建江.TMS320C54x DSP結(jié)構(gòu)、原理及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2001
[4]Deitel H M,Deitel P J. C How to Program Second Edition[M].Prentice Hall,1994
[5] ITUT Recommendation G.729. Coding of Speech at8 kb/s.Using ConjugateStructure AlgebraicCodeexcited Linearprediction (CSACELP), 1996
<!--插入廣告JS代碼-->
  • 上一篇: AR模型功率譜估計(jì)在抗干擾中的DSP實(shí)現(xiàn)
  • 下一篇: 基于DSP的靜止同步補(bǔ)償器脈沖發(fā)生器及控制器的設(shè)計(jì)
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1