《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 用DSP優化G.723.1算法
用DSP優化G.723.1算法
摘要: 將G.723.1移植到TMS320C64xx后,就可借助TI集成開發工具CCS(Code Composer Studio)的Profile功能來評估其各個子程序或函數的執行運算量,從而把程序的優化集中在對程序性能影響最大的代碼上去。
Abstract:
Key words :

 

       1 引言
  G.723.1是刪組織于1996年推出的一種低碼率的語音編碼算法標準,也是目前該組織頒布的語音壓縮標準中碼率最低的一種標準。G.723.1主要用于對語音及其它多媒體聲音信號的壓縮,目前在一些數字音視頻傳輸、高質量語音壓縮等系統中都得到廣泛應用。
 
  2 G.723.1算法的復雜度分析
 
  將G.723.1移植到TMS320C64xx后,就可借助TI集成開發工具CCS(Code Composer Studio)的Profile功能來評估其各個子程序或函數的執行運算量,從而把程序的優化集中在對程序性能影響最大的代碼上去。
 
  通過分析可以看出,在G.723.1的編解碼算法中,碼本搜索所花費的運算量是比較大的,如Find_Best(),Find_Fcbk(),Find_Acbk():另外,在LPC分析和LSP參數的計算上也有運算量比較大的,如Comp_Lpc(),Lsp_Qnt(),Lsp_Svq()。
 
  3 代碼的優化
 
  代碼優化的工作有兩大目的:一是執行速度提高,實現實時;二是盡量不擴大程序體積(Code Size),使之在內存允許的范圍內。顯然,兩者存在一定的矛盾,當今超大規模集成電路的發展使RAM資源不再是系統的瓶頸,因此該部分工作的主要任務是怎樣提高執行速度。代碼的優化工作主要在CCS環境中進行。優化的原則是要充分考慮C64xx處理器超長指令字、多個運算單元和深度流水線的結構特點,以及避免過多的讀寫內存指令和程序轉移指令,充分發揮其強大的運算能力。具體方法包括(次序有先后):
 
  3.1基本運算集的優化
 
  G.723.1算法程序是用定點運算完成浮點運算,為了防止定點運算時可能溢出,許多運算需要進行飽和判斷,為此程序專門定義了基本運算集,實現諸如飽和加法、飽和乘法、除法和移位等操作。在程序中這些操作調用相當頻繁,經CCS的profile工具測試,基本運算函數集的調用占用了95%以上的CPU時間。因此,我們要從基本運算集的優化開始。在熟悉掌握C64xx指令集的前提下,分析基本運算集中各個函數完成的悉掌握C64xx指令集的前提下,分析基本運算集中各個函數完成的功能和對全局變量產生的影響,用C64xx指令取而代之或加以改編。其中包括對跳轉和流水線的優化討論、對乘積的飽和調整和全局變量OveRFlow的相關操作。
 
  由于基本運算集以函數形式存在,兩次跳轉f函數的調用與返回1必不可少,將引起流水線的兩次打斷,表現為12個指令周期的占用。將這嶁基本運算函數集改成宏的形式,即將基本運算內嵌(inline)至lJ調用程序中,由此町以消除跳轉和流水線打斷帶來的指令周期占用,提高執行速度。雖然這樣做增加了代碼長度,多占用了一些內存,但由于基本運算函數體積均較小,再經過一定的代碼優化,在程序體積上的犧牲幾乎町以忽略。
 
  基本運算的函數定義在BASIC.C文件里面,如果能夠對這些簡單甬數進行內聯指令(intrinsic)的優化,就能達到事半功倍的效果。內聯指令是匯編指令的直接映射,具有很高的效率。與此同時帶來的一個問題是溢出保護位Overflow的判斷,這是基本函數里用來標識溢出的全局變量,它的作用等同于CSR(Control Status Register)寄存器的SAT(Saturation)位,當數據溢出時,SAT位被系統自動設置為1,所以編解碼函數里對Overflow的判斷可以轉化成對SAT位的判斷。引用CSR寄存器時需要在最開始的時候聲明extem cregister volatile ansigned int CSR。
 
  C64xx指令提供了飽和乘法指令SMPY,實現16"16位的乘法與飽和結果調整,其執行操作如下:
 
  if(cond){
 
  if((src 1*src2<<1)!=0x80000000)
 
  dst=((src 1*src2)<<1);
 
  else
 
  dst=0x7ffffff;
 
  }
 
  else
 
  nop; 
 
  將原指令中的乘法指令改為SMPY.就可以完成乘法和飽和調整兩種計算,這樣可以省去飽和調整3條指令。與此類似,其它的飽和運算,C64xx都提供了相應的指令實現,將普通運算指令替換為飽和運算指令,飽和結果調整部分的運算均可以省去。
     3.2主程序的優化
  主程序的優化手段主要采用了以下幾種方法:
 
  (1)使用內聯函數(intrinsics)
 
  內聯函數是可直接映射為C64xx指令的特殊函數,它在指令前加上"_”表示。例如:
 
  #define L_add(L_var1,L_var2)  _sadd(L_var1,L_var2)
 
  #define L_mult(var1,vat2)  _smpy(var1,var2)
 
  等,基本函數的內聯優化需要對原函數的定義和內聯指令都比較熟悉。
 
  使用內聯函數代替相應的C語句是一種非常簡便高效的優化方法。如上面提到的飽和乘法,在C語句中。我們通常要使用兩個嵌套的條件判斷語句來檢查結果是否溢出,而指令int_smpy(int a.int b) 則在完成乘b的運算后,再做一次飽和處理,這樣一條DSP指令就可完成C語言中多條語句才能完成的計算,可以節省很多時鐘周期。
 
  (2)循環展開(loop—unrolling)
 
  程序中的有很多的雙重循環和多暈循環(比如代數碼本搜索計算),由于C64xx優化器在優化時只在最內層循環中形成一個指令流水(最多可以達到8級流水),這樣循環語句就不能充分利用軟件流水線,而且對于內部循環次數較少的情況,消耗在prolog和eplog上的時鐘周期也不可忽視。針對這種情況,一個有效的辦法就是將雙重或多重循環展開,降低循環次數。這樣雖然代碼長度增加了,但有更多的運算能夠參加到pipeline中。由于減少了流水線排空和提高了功能單元的利用率,程序執行速度會大大提高。
 
  (3)減少分支和調用指令,減少判斷指令
 
  程序中的分支、調用以及判斷指令會引起程序的跳轉,而每個跳轉指令都有5個延遲間隙。因此延長了程序執行時間;另外,循環內跳轉也會使軟件流水受到阻塞,降低了代碼執行效率。優化中,可以使用內嵌、合并判斷語句來減少判斷次數或用邏輯指令替代判斷的方法盡可能的消除中斷流水線指令帶來的影響。
 
  (4)使用字或雙字存取和計算
 
  C64xx系列DSP是32位CPU,當16位數據在內存中連續存放時,可利用uint_amem4(void*ptr)或double & _amemd8 (void*ptr)指令進行字或雙字數據的讀取或存貯。這樣每次可同時存取2個或4個16位數據,由于從內存執行取數操作需要4個delay,所以減少存取次數可以節省大量的時鐘同期;同時,可利用C64xx指令集中特有的打包指令_pack2(unsigned a,unsigned b),_packh2(unsigned a,unsigned b)等將兩個16位數打包成一個32位數,在進行乘、加計算時則利用_add 2(int a,int b)、_mpy2(int a,int b)同時完成兩組16位數的加法和乘法,效率比單純16位數的加法和乘法提高一倍。
 
  3.3匯編編程的優化
 
  線性匯編是TI提供的一種匯編語言,其指令系統和匯編語言的指令系統完全相同,但在編寫時不需要指定寄存器和操作單元,也不需要考慮延時的問題,因此編寫線性匯編相對要容易一些。
  經過以上的優化后,音頻編碼程序在DM642上的運行狀況有了很大改善,但是經測試仍然沒有到達可以接收的程度,而高級語言的效率幾乎發揮到了極致,所以在具體分析耗時大的模塊特點后,采用線性匯編語言重新編寫C代碼的低效率段程序,迸一步提高程序的執行效率。
 
  編寫線性匯編優化代碼的過程中,為了提高代碼執行效率,我們需要遵循以下原則:
  (1)寫并行代碼:通過使用匯編指令并行執行的方法減少循環內的執行周期數,優化線性匯編代碼。這里的關鍵問題是弄清指令相關性,只有不相關的指令才能并行執行。辨別指令是否相關.可以使用相關圖。
  (2)處理跳轉指令和轉移指令:匯編程序的一大特點就是頻繁地跳轉,當滿足不同的條件時,要求程序進行不同的操作,或跳到相應的位置。對于“大于”、“大于等于”、“小于”、“小于等于”等較為接近的邏輯判斷和處理,應慎重對待,否則將產生邏輯性錯誤,并且很難調試。當發生溢出需進行相應處理時,這種現象尤為突出。
  (3)盡量減少循環體內的指令數[7]:G.72.1的算法實現,有許多是在循環內部完成的,有些地方如同定碼本搜索過程中,為了確定四個非0脈沖的位置和幅度,還用到了多重循環。在循環內部,特別是在嵌套較深的循環內部,減少一條指令可以大大降低程序的操作次數。例如。對于一個每重循環8次的四重嵌套循環,在最內層循環每減少一條指令,整個程序可以少執行84=4096語句。因此在設計程序時,能夠放在循環體外執行的語句.盡量放在循環體外執行。
  (4)展開程序體:盡在一定條件下,盡量展開程序,以減少子程序的調用和返回次數,犧牲空問換取時間。
  經匯編優化器優化后,代碼效率比C語言直接編譯有明顯提高。
  4 優化工作的創新點
 
  在對G.723.1的優化中.本文在前人研究成果的基礎上,針對DSP C64xx系列芯片提}n了一些有價值的新方法。這些創新點在不同程度上提高了代碼的優化速度和執行效率,在語音編解碼的DSP實時實現中起到了關鍵性作用。下面,本文將以舉例的方式闡明一些經典的方法。 
 
 
  (1)編寫連接命令文件.cmd
 
  明確了系統的程序和數據映射地址后,編寫連接器命令文件將部分調用次數較多的函數、堆棧段、數據段放入內存:cmd文件內容如下:
 
  一L\evmdm642_echocfg.cmd //連接CCS提供的連接命令文件
 
  SECTIONS
 
  {
 
 ?。畉ahles>SDRAM
 
 ?。甤init>ISRAM   //將變量初值表放入內存
 
  . far >SDRAM
 
  .const>ISRAM //將常數段放入內存
 
 ?。畃init>SDRAM
 
  . tin >SDRAM
 
 ?。畉ext>SDRAM
 
 ?。畉est >ISRAM
 
  }
 
  一levmdm642bsl.lib     //連接庫文件
 
  一levmdm642_edma_aic23.164    //連接驅動程序的庫文件
 
  一lc6xlx_edma_mcasp.J64   //連接串口McASP的庫文件
 
  其中.test是筆者在C程序內用#pragma CODE_SECTION或DATA_SECTION自定義的段。
 
  (2)高速緩沖寄存器Cache的使用
 
  Cache即高速緩存,是位于CPU和片內存儲器之間的規模小速度快的存儲器。Cache的工作原理是保存CPU中最常用的數據。當Cache中保存著CPU要讀寫的數據時,CPU直接訪問Cache。由于Cache的速度與CPU相當,CPU能在零等待狀態下迅速地實現數據存取。只有在Cache中不舍有CPU所需的數據時CPU才去訪問片內存儲器。因此Cache的有效利用對整個程序速度的提高有著舉足輕重的作用。在主函數中加入以下代碼,使Cache使能:
 
  CACHE_clean  (CACHE_L2ALL,0,0};  //清除Cache內原有內容
 
  CACHE_setL2Mode  (CACHE_64KCACHE);  //設置Cache的大小為64K
 
  CACHE_enableCaching  (CACHE_EMIFA_CE00);  //Cache使能
 
  添加以上代瑪后,測試速度由原來的20幀/s提高到了400幀/s。提高了將近20倍。
 
  5 結束語
 
  本文詳緇分紹了G.723.1標準的DSP代碼優化工作,重點描述了代碼優化的方法和本課題的創新點.對于算法中的一些函數提出了獨創性改寫方法。基于線性匯編的優化以及Cache的有效利用使本課題的工作取得了顯著成果,在沒有降低音質的情況下,實現了DSP的語音實時編解碼。
  本文作者創新點:在對G.723.1的優化中,針對TMS320DM 642 DSP系列芯片提出了一些有價值的新方法。例如:編寫連接命令文件.cmd和高速緩沖寄存器Cache的使用。這些創新點在不同程度上提高了代碼的優化速度和執行效率,在語音編解碼的DSP實時實現中起到了關鍵性作用。
 
此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          亚洲人成免费| 亚洲男女自偷自拍| 一色屋精品视频在线观看网站| 国产精品欧美日韩一区二区| 久久久久久久综合狠狠综合| 亚洲一区二区三区免费在线观看| 男男成人高潮片免费网站| 亚洲一区二区三区中文字幕| 久久亚洲精选| 国内精品视频666| 欧美日韩午夜剧场| 欧美天堂在线观看| 久久爱www久久做| 日韩视频一区二区三区在线播放| 宅男噜噜噜66国产日韩在线观看| 欧美jizz19hd性欧美| 国产视频久久网| 国产一区亚洲| 亚洲精品乱码久久久久久按摩观| 韩国美女久久| 麻豆精品国产91久久久久久| 国语自产精品视频在线看8查询8| 久久www免费人成看片高清| 国产午夜亚洲精品理论片色戒| 久久九九久精品国产免费直播| 国产精品男人爽免费视频1| 欧美一级二区| 欧美一区二区成人6969| 亚洲一区影音先锋| 午夜伦欧美伦电影理论片| 欧美视频1区| 欧美91福利在线观看| 亚洲在线成人精品| 欧美成人三级在线| 国产精品盗摄久久久| 国产精品极品美女粉嫩高清在线| 国内精品视频在线播放| 精品99视频| 欧美黄色视屏| 国产一区二区三区黄视频| 欧美日韩视频一区二区| 美女尤物久久精品| 一区二区国产日产| 国产永久精品大片wwwapp| 樱桃成人精品视频在线播放| 精品999在线观看| av不卡在线| 国产精品成人在线| 亚洲一区欧美二区| 免费一级欧美片在线观看| 久久国产精品久久久久久电车| 欧美精品激情blacked18| 午夜欧美大片免费观看| 国产三级欧美三级日产三级99| 在线不卡免费欧美| 亚洲第一区中文99精品| 国产精品永久免费在线| 国产精品乱码一区二区三区| 在线看片第一页欧美| 日韩小视频在线观看| 在线成人性视频| 亚洲女性裸体视频| 国产精品男gay被猛男狂揉视频| 亚洲电影下载| 久久蜜桃香蕉精品一区二区三区| 国产精品av一区二区| 亚洲精品五月天| 含羞草久久爱69一区| 国产一区二区剧情av在线| 国产乱肥老妇国产一区二| 欧美精品午夜| 欧美丝袜一区二区三区| 欧美日韩免费网站| 欧美激情区在线播放| 一本久久综合亚洲鲁鲁| 国产亚洲精品激情久久| 亚洲第一区中文99精品| 一区精品在线播放| 久久久久久久一区二区三区| 国产精品自在欧美一区| 中文日韩电影网站| 激情久久久久久久| 国产精品免费看片| 午夜精品偷拍| 亚洲精选一区二区| 老鸭窝亚洲一区二区三区| 亚洲久久视频| 欧美三级黄美女| 亚洲高清视频一区二区| 久久精品免费播放| 亚洲黄色尤物视频| 欧美一级黄色录像| 免费亚洲网站| 亚洲一区区二区| 99国产麻豆精品| 国产网站欧美日韩免费精品在线观看| 亚洲神马久久| 夜夜嗨av一区二区三区中文字幕| 亚洲欧美视频在线观看| 国产视频一区二区在线观看| 国产一区二区三区黄视频| 亚洲国产日韩欧美一区二区三区| 欧美日韩专区在线| 亚洲欧美国内爽妇网| 国产精品久久久久三级| 欧美精品尤物在线| 欧美激情bt| 一本色道久久综合亚洲二区三区| 久久免费偷拍视频| 久久综合九色九九| 久久久久综合一区二区三区| 国产精品伦理| 国产欧美大片| 亚洲缚视频在线观看| 亚洲精品一区二区网址| 亚洲视频免费观看| 国产精品啊v在线| 国产精品sm| 亚洲国产精品嫩草影院| 亚洲激情视频网站| 国产精品激情电影| 欧美激情片在线观看| 亚洲精品久久久久久久久| 好吊一区二区三区| 中国日韩欧美久久久久久久久| 亚洲老司机av| 国产乱码精品1区2区3区| 亚洲精品欧美专区| 男女精品视频| 欧美日韩亚洲一区在线观看| 久久久久久伊人| 日韩亚洲在线观看| 亚洲婷婷综合久久一本伊一区| 亚洲精品一区在线观看香蕉| 在线播放亚洲| 美女视频黄a大片欧美| 国产精品看片资源| 欧美日韩视频在线观看一区二区三区| 亚洲午夜一区二区三区| 依依成人综合视频| 国产精品国产三级国产aⅴ入口| 国产精品午夜在线| 国产午夜久久久久| 亚洲福利视频一区| 免费成人性网站| 一区二区高清| 久久精品综合网| 日韩亚洲精品视频| 亚洲国产99精品国自产| 亚洲人成欧美中文字幕| 在线观看日韩一区| 亚洲激情视频在线观看| 久久久久久久999精品视频| 久久精品国产亚洲5555| 久久精品国内一区二区三区| aa亚洲婷婷| 国产裸体写真av一区二区| 宅男噜噜噜66国产日韩在线观看| 欧美日韩精品一区二区三区| 亚洲人体大胆视频| 亚洲欧美成人| 国产精品久久国产精品99gif| 日韩特黄影片| 欧美一二三区精品| 国产精品一二三四| 欧美国产亚洲精品久久久8v| 国内精品嫩模av私拍在线观看| 激情综合激情| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产精品久久久久久久久果冻传媒| 欧美精品在线一区二区| 国产欧美精品一区二区色综合| 美国成人直播| 国产香蕉久久精品综合网| 欧美亚洲一区在线| 国产精品蜜臀在线观看| 免费不卡中文字幕视频| 欧美凹凸一区二区三区视频| 欧美性淫爽ww久久久久无| 午夜欧美不卡精品aaaaa| 国产精品久久久久久久久久久久久久| 欧美色欧美亚洲另类二区| 久久综合伊人77777蜜臀| 国产乱子伦一区二区三区国色天香| 亚洲丰满少妇videoshd| 欧美理论视频| 久久久精品视频成人| 国产综合色产在线精品| 一区二区三区欧美在线观看| 国产一区二区激情| 国产日产高清欧美一区二区三区| 久久国产精品一区二区| 国产三区二区一区久久| 亚洲成人在线视频网站| 在线视频欧美日韩| 久久一区二区三区四区五区| 亚洲欧美中文字幕| 国产欧美日韩三区| 欧美成人在线免费观看| 美日韩精品视频免费看| 国产精品亚洲综合久久| 亚洲欧洲视频在线| 亚洲国产欧美在线人成| 欧美日韩午夜| 亚洲精品视频在线观看免费| 影音先锋日韩资源| 久久激情综合| 国产精品一区二区在线| 欧美黄色视屏| 久久激情综合| 欧美福利一区| 国内自拍亚洲| 国产日韩欧美在线| 欧美色图天堂网| 国产精品户外野外| 激情综合在线| 亚洲人成网站999久久久综合| 久久狠狠亚洲综合| 亚洲一区成人| 欧美日本在线一区| 欧美日韩国产小视频| 欧美激情片在线观看| 国产精品色婷婷久久58| 欧美激情一区二区三区高清视频| 欧美亚洲免费电影| 欧美日韩视频在线第一区| 亚洲精品乱码| 国产精品美女久久久久av超清| 在线播放日韩专区| 久久精品欧美日韩精品| 嫩模写真一区二区三区三州| 亚洲黄色三级| 亚洲男人第一网站| 美女视频黄a大片欧美| 99av国产精品欲麻豆| 久久亚洲国产成人| 麻豆成人91精品二区三区| 欧美一区日本一区韩国一区| 一区二区欧美激情| 亚洲香蕉网站| 久久精品国产91精品亚洲| 欧美日韩国产一中文字不卡| 亚洲欧美区自拍先锋| 久久久久这里只有精品| 国产精品久久久久久久久久三级| 国产精品第一区| 日韩视频中午一区| 欧美日韩国产成人在线观看| 一本久道久久久| 欧美精品videossex性护士| 欧美另类极品videosbest最新版本| 欧美久久影院| 久久综合999| 国内精品国语自产拍在线观看| 先锋亚洲精品| 久久日韩粉嫩一区二区三区| 亚洲欧美日韩精品久久奇米色影视| 亚洲影音一区| 欧美日韩日日夜夜| 欧美激情视频给我| 国产欧美日韩综合一区在线播放| 欧美高清视频一二三区| 亚洲国产成人午夜在线一区| 国产精品久久久久久久久久ktv| 亚洲久久成人| 久久精品亚洲精品国产欧美kt∨| 亚洲最新视频在线播放| 国产精品多人| 久久久精品欧美丰满| 久久夜色精品亚洲噜噜国产mv| 亚洲看片免费| 欧美日韩免费观看一区三区| 美女黄色成人网| 性色av一区二区三区红粉影视| 欧美色精品在线视频| 欧美日本在线视频| 亚洲电影中文字幕| 亚洲欧美中文另类| 久久精品欧美日韩| 亚洲一区国产| 国产午夜精品久久久| 91久久国产自产拍夜夜嗨| 中文有码久久| 99精品免费视频| 欧美午夜视频网站| 在线看成人片| 久久精品国产久精国产一老狼| 国产乱码精品一区二区三区五月婷| 最新高清无码专区| 欧美a级一区二区| 亚洲黄色免费| 亚洲精品久久久久久久久久久久| 亚洲主播在线观看| 影音先锋中文字幕一区| 国内精品嫩模av私拍在线观看| 国产在线精品成人一区二区三区| 香港成人在线视频| 久久国产一二区| 国产精品入口日韩视频大尺度| 一区二区高清在线观看| 久久激情五月丁香伊人| 韩日精品中文字幕| 老司机午夜精品视频在线观看| 亚洲国产影院| 国产午夜精品全部视频播放| 亚洲二区在线| 一区二区日本视频| 亚洲一区在线看| 亚洲——在线| 国产欧美短视频| 国产精品人成在线观看免费| 国产中文一区二区三区| 亚洲电影自拍| 国产精品日韩欧美一区| 久久野战av| 欧美一区二区三区视频在线观看| 一本一本久久a久久精品牛牛影视| 欧美日韩精品在线观看| 国内揄拍国内精品久久| 在线观看福利一区| 亚洲国产你懂的| 一区二区三区在线视频免费观看| 99国产麻豆精品| 99精品国产福利在线观看免费| 久久亚洲欧美国产精品乐播| 亚洲国产日韩精品| 久久精品国产免费观看| 亚洲一区美女视频在线观看免费|