男女午夜激情_www.天堂av.com_亚洲综合小说区_亚洲欧美自拍视频_成年精品_久久www免费人成—看片_激情综合五月天_久久高潮视频_最新国产成人ab网站_国产精品卡一

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

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

    主辦:杭州市高新區(濱江)機電一體化學會
    中國行業電子商務100強網站

    網站經營許可證:浙B2-20080178-1
    主站蜘蛛池模板: 大化| 平潭县| 介休市| 达日县| 紫阳县| 安龙县| 江川县| 曲沃县| 遂川县| 施甸县| 鄂伦春自治旗| 长兴县| 新丰县| 甘德县| 邻水| 晋城| 军事| 响水县| 兴业县| 镇康县| 晴隆县| 丹阳市| 剑阁县| 霍山县| 夏河县| 紫金县| 休宁县| 博兴县| 嘉黎县| 东城区| 昌邑市| 青神县| 太白县| 陆良县| 云梦县| 吴川市| 肥西县| 新田县| 彭泽县| 盈江县| 文山县|