《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于TMS320C6416的DRM音頻解碼實現及優化
基于TMS320C6416的DRM音頻解碼實現及優化
來源:電子技術應用2011年第5期
崔 穎,趙 宇,馬永濤,劉開華
天津大學 電子信息工程學院,天津300072
摘要: 給出了數字廣播調幅系統DRM的AAC音頻解碼器在定點DSP芯片TMS320C6416上的實現方案,從多方面對AAC音頻解碼器的關鍵技術進行優化。實驗結果表明,算法的運行速度提高了10倍,存儲器占用情況有較大改善,為DRM廣播信號解碼系統執行音頻解碼之前的解調和信道解碼程序節省了很大的周期資源和處理空間。
中圖分類號: TN914
文獻標識碼: A
文章編號: 0258-7998(2011)05-0031-04
Realization and optimization of audio decoder in DRM system based on TMS320C6416
Cui Ying, Zhao Yu,Ma Yongtao,Liu Kaihua
Electronic Information Engineering Academy of Tianjin University, Tianjin 300072,China
Abstract: This paper presents the solution of AAC audio decoder in digital radio mondiale on TMS320C6416. Various of its key technologies are optimized. Experiment results show that the algorithm runs ten times faster and the memory used has been improved considerably, saving a lot of processing space and resource for the decoding system of DRM broadcast signal to implement demodulation and channel decoding before audio decoding.
Key words : DRM;AAC;audio decoder;TMS320C6416


    數字廣播調幅系統DRM(Digital Radio Mondiale)采用先進音頻編碼AAC(Advanced Audio Coding)作為其主要的信源編碼方式[1],在與模擬調幅廣播同樣的帶寬(9 kHz或10 kHz)下實現了調頻的音質。DRM不僅解決了模擬調幅廣播抗干擾能力差等缺點,而且在音頻業務的基礎上又增加了文本、圖像、數據等附加業務,豐富了調幅廣播的內容,大大提高了調幅廣播的市場競爭力,成為調幅廣播發展的必然趨勢。
    信源編碼是DRM系統的關鍵技術,其壓縮節目音頻源信號,只需較少的傳輸帶寬就可保證接收端的重建音頻信號有較好的音質。DRM音頻解碼器的實現和優化決定了系統能否正確實現音頻解碼,并完成音頻的實時播放,使用戶得到良好音質。本文中AAC音頻解碼程序在DSP硬件平臺上運行,由于硬件平臺性能有限,要求音解碼器不僅要能確保音頻質量,還要不能占用DSP系統太多的資源。因此研究DRM音頻解碼器在高性能DSP平臺上的實現及其優化具有非常重要的現實意義。
1 DRM音頻解碼流程
    通用MPEG-4 AAC音頻編解碼器的原理和實現技術已經很成熟,不再詳述。DRM系統的信源編碼方案中所采用的頻帶恢復技術(SBR)提供了類似于MPEG-4 AAC中感知噪聲整形(PNS)模塊的功能,故DRM系統采用的音頻編碼方案不包括PNS模塊,同時也去除了長期預測(LTP)、采樣率可分級(SSR)等復雜的模塊,降低了算法復雜度,對處理器的處理能力要求也相對較低,適合應用于嵌入式開發平臺上。AAC的采樣率有12 kHz和24 kHz兩種,5個(12 kHz采樣頻率)或10個(24 kHz采樣頻率)音頻幀組成一個持續時間固定為400 ms的音頻超級幀。本文優化之前首先在PC機的VC++6.0環境下實現了DRM廣播信號的正確解碼和實時播放,測試信號為單聲道、48 kHz采樣,采用AAC音頻編碼的wav格式的DRM廣播信號源,其中AAC的采樣率為24 kHz,即一個音頻超幀包含10個子幀。在VC++6.0環境下運行整個工程,經同步、解調和信道解碼后獲得DRM信號源中的AAC音頻編碼數據,在每次AAC子幀解碼前將每子幀數據輸出到一個文件。在DSP上測試音頻解碼程序時,可以直接提取AAC數據進行解碼,解碼流程如圖 1所示。解碼過程如下:

    (1)對傳來的AAC子幀數據進行比特流分解,根據DRM系統中音頻子幀結構獲取語法單元、霍夫曼碼字等各部分的數據。
    (2)進行霍夫曼解碼,這部分用到了一系列的霍夫曼碼書進行查詢解碼。頻域數據和比例因子的獲得都在這一步。該過程需要在將順序打亂的碼字重新組合在一起的同時,進行霍夫曼解碼,并將解碼之后的數據放置到正確的位置上,準備進行下一步的反量化。
    (3)對解碼后的頻域數據進行反量化。
    (4)將反量化的結果乘以(2)中生成的比例因子。
    (5)濾波器組部分。這部分在解碼時采用了逆改進離散余弦變換(IMDCT)[2],還包括一個加窗的過程和疊加的過程。功能模塊的輸出為信號的時域值。
2 TMS320C6416的DSP開發平臺
    TMS320C6416(簡稱C6416)[3]是一種高性能的32 bit定點DSP芯片。本文使用的C6416的工作頻率達到600 MHz。其特點包括:具有8個功能單元的高級超長指令體系結構的CPU;所有指令有條件執行;支持8/16/32 bit可變長度數據訪問;支持常用算術運算的飽和與歸一化操作;兩級高速緩存(Cache)存儲器結構及豐富的片內外設,如增強型直接存儲器訪問EDMA控制器、多通道緩沖串口McBSP等。C6416開發板上除C6416 DSP芯片外,還帶有外擴的512 K×8 bit的FLASH。
    開發環境采用DSP集成開發環境CCS(Code Composer Studio),它集成了代碼編輯、編譯、工程管理、代碼生成與調試、代碼性能剖析、數據查看、繪制數據圖像、DSP/BIOS參數設置,以及提供各種優化建議等工具模塊。
3 音頻解碼程序的優化
    本文優化之前先在PC機VC++6.0環境下實現了DRM廣播信號的正確解碼和實時播放,但移植到DSP平臺之后不能實時播放。本文單獨將音頻解碼部分的程序移植到DSP開發平臺CCS3.1開發環境中,測試數據為前文中存儲的AAC解碼前每子幀的數據。優化前,不帶有SBR解碼的情況下,音頻解碼程序中一個音頻超幀里每個子幀解碼所花費的周期數,即運行效率如下:
    子幀1:1 901 300        子幀2:3 667 994
    子幀3:3 469 783        子幀4:3 397 752
    子幀5:1 745 753        子幀6:3 416 357
    子幀7:3 439 464        子幀8:3 331 484
    子幀9:1 721 339        子幀10:1 764 605
    (共計27 855 831周期)
    在DSP上單獨測試音頻解碼的效率,計算所花費的時鐘周期數的語句如下:
    st=clock( ); aac_frame_decode(, , , ); end=clock(); printf("clock cost %d\n",end - st);
其中aac_frame_decode( )是信道解碼與音頻解碼的接口函數,該函數調用AAC解碼程序,在此,其參數與返回值已省略。在CCS環境下,運行程序前點擊Profile剖析菜單下Clock選項中的Enable,就打開了CCS的程序運行周期計數功能。兩次clock函數調用返回值之差就是解碼函數花費的周期數。表1是利用CCS3.1中Profile工具分別計算的程序優化前后一個超幀解碼過程中每個函數所花費的周期數。
      優化的本質是提高程序的運行效率,同時保持程序原有功能準確無誤。本文針對本課題中的具體問題,提出以下對應的優化措施:
      (1)去除原程序中用不到的函數。最初的音頻解碼程序是針對所有MPEG-4 AAC標準使用的,其中包含了很多功能模塊,如MP4解碼、PNS解碼、LTP解碼等。這些功能在DRM系統的音頻編碼標準AAC中是用不到的,所以應當將它們去除,否則其生成的代碼不僅無用,而且會占用大量存儲空間。在CCS3.1中點擊Profile菜單下的Analysis Toolkit選項中的Code coverage and Exclusive Profiler,按照提示運行程序,可以得到一個Excel文件。該文件將代碼覆蓋程度、每個函數調用次數以及執行函數CPU所花費的周期數等展示出來,從而可以方便地找到每個文件中一直沒有運行的函數,去除這些函數可節省大量存儲空間且保證程序功能無誤。
    (2)循環體優化。原始的音頻解碼程序已經采用了一些常用的算法級別的優化,如IMDCT的快速算法[4]、霍夫曼解碼的查表快速算法等,但仍沒有達到最理想的速度。主要原因是for循環和定點化的問題。在AAC解碼器中,循環體幾乎占用了60%的資源,因此它的優化非常重要。要想充分發揮C6416 DSP處理器的8個功能單元并行執行指令的功能,需要讓編譯器盡可能多地生成由2條以上指令組成的超長指令。C/C++編譯器可以對代碼進行不同級別的優化。高級優化由專門的優化器完成,與目標DSP有關的低級優化由代碼生成器完成。圖2是編譯器、優化器和代碼生成器的執行圖。

 

 

    最簡單的執行優化的方法是用cl6x編譯程序[5],在命令行設置-On選項即可。n是優化的級別(n為0、1、2或3),它控制優化的類型和程度。-O3級別下,編譯器可對循環代碼實現軟件流水[6],優化器將會充分利用處理器的8個功能單元,盡可能多地生成并行指令,使最后的可執行代碼運行速度達到最高,以達到優化代碼的目的。
    軟件流水是用來安排循環指令并使這個循環多次迭代并行執行的一種技術。簡單循環情況下,軟件流水能夠正常的發揮作用,但在多層嵌套循環情況下,軟件流水往往會失敗。簡化循環是充分發揮軟件流水的通用而有效的辦法。如本文中一個函數reordered_spectral_data( )中存在多達5層嵌套的for循環,有的循環中還有條件分支函數,在-O3優化情況下,解一個超幀10次調用這個函數之后,共花費7 613 426個周期,與其他函數開銷相比如圖3(a)所示。這是因為優化器只能對最內層的循環進行軟件流水操作,而外層的循環只能按照原語句執行,于是大量語句只能以最慢的方式執行。
    經過對這個函數中的循環語句進行分析和調試,同時參照AAC標準,在保證功能正確實現的基礎上對該函數做如下改進:這個函數的功能是將打亂順序的霍夫曼碼字重新排序,并進行霍夫曼解碼。在碼字重新排序的過程中有碼書查找的步驟,編碼時碼書的選擇是有優先級別的,解碼時需要從最高級到最低級依次判斷是否存在以這個碼書編碼的碼字,如果有就進行解碼,沒有就判斷下一個碼書,每判斷一個碼書就是一次大循環。事實上,碼書級別都很低,先前大部分循環中判斷的碼書都是錯誤的,所以可以另外用一個小的循環檢查出級別最高的碼書,這樣就會在真正解碼的嵌套循環中省去許多無用的循環。另外在嵌套的for循環中,有一層是針對窗組進行的循環,即有幾個窗組需要解碼,就循環幾次。事實上,窗組往往只有一個,多窗組的情況極為少見,所以這層for循環在大部分情況下可以去除。但多窗組的情況畢竟存在,可以事先用一個if條件判斷窗組個數,再根據結果條件執行相應的程序。這就使程序在大多數情況下能夠節省大量的運行時間,因為它會執行軟件流水生成的代碼,而在極少情況下會執行效率最慢的未經優化的代碼。
    按照上述的分析進行優化之后,結果如圖3(b)所示。reordered_spectral_data()函數優化之后的開銷為:10次調用這個函數共花費1 029 512周期,與優化前的7 613 426周期相比,運行速度提高了7倍多。

    (3)消除存儲器相關性。如果C6416編譯器可以確定兩條指令是不相關的,則安排它們并行執行,否則安排指令串行執行。有幾個方法可以幫助編譯器確定哪些指令不相關:使用restrict關鍵字聲明指針;一起使用-pm選項和-O3選項確定程序優先級,在程序優先級中,所有源文件都被編譯成一個模塊,從而使編譯器更有效地消除相關性;使用-mt選項向編譯器說明代碼不存在存儲器相關性,即允許編譯器在無存儲器相關性的假設下進行優化。
 (4)使用內聯函數。C6416編譯器提供的內聯函數是直接映射為內聯指令的特殊函數,內聯函數的代碼高效、長度短。可以使用內聯函數并行優化C代碼。
    (5)在循環前加上#pragma MUST_ITERATE(, ,),向編譯器傳遞循環次數信息,編譯器會生成更好的循環代碼,或消除因不知道循環次數而產生的冗余循環以便減小整個代碼量。
4 DRM音頻解碼器的測試結果
    通過實施上述各種優化方法,從算法程序上的等效替代到充分利用編譯的優化功能,音頻解碼程序運行效率有了明顯的提高。下面是同一個超幀解碼中每個子幀花費的周期數,總計數周期為2 641 488,與優化前程序花費的27 855 831個周期相比,運行時間不到原來的1/10。
    子幀1:396 470        子幀2:250 626    
    子幀3:247 983        子幀4:226 120
    子幀5:254 623        子幀6:224 668
    子幀7:231 056        子幀8:254 901
    子幀9:277 520        子幀10:279 424
    (共計2 641 488周期)
    從表1可以看出,優化后一些函數的訪問次數為0,這是由于優化采用了內聯函數的功能,它們的代碼被內聯在一些較大的函數中,如faad_getbits( )函數;另一種情況:如對于pns_decode( )函數,由于DRM系統的音頻編碼標準中的SBR技術提供了相當于PNS的功能,所以AAC中的PNS模塊沒有使用,優化中被刪除。對比表1中優化前后數據可知,很多函數花費的周期大大減少,如decode_scale_factors函數等。

    本文給出了DRM音頻解碼器在TMS320C6416上的實現方案,并結合TMS320C6416的特性,從去除無用函數、內聯函數替換、循環體優化等多方面對音頻解碼程序進行了優化。在充分利用EDMA硬件資源的音頻驅動程序的配合下,優化后的音頻解碼程序能夠完成音樂的實時播放。DRM中一個AAC超幀的時間為400 ms,優化后解碼一個音頻超幀耗費的周期數從2 800萬降至300萬,即每秒音頻解碼需750萬周期,遠小于C6416每秒所能執行的周期數(600 M),不但能保證音頻解碼和播放的實時性,還為DRM廣播信號解碼系統執行音頻解碼之前的解調和信道解碼程序節省了很大的周期資源和處理空間。
參考文獻
[1] ETSI ES 201 980 V3.1.1[S].Digital Radio Mondiale(DRM):System Specification,2009.
[2] CHO Yang Ki,SONG Tae Hoon,Kim Hi Seok.An optimized algorithm for computing the modified discrete cosine transform and its inverse transform[J],IEEE,2004:626-628.
[3] Texas Instruments.TMS320C6414,TMS320C6415,TMS320C6416 fixed-point digital signal processors.SPRS 146N. 2005.
[4] 竇維蓓,劉若珩,王建昕,等,基于DSP的IMDCT快速算法[J].清華大學學報,2000,40(3):99-103.
[5] Texas Instruments Incorporated.TMS320C6000系列DSP編程工具與指南[M].北京:清華大學出版社,2006.
[6] 馬君國,王遠模,常華俊,等.在DSP處理器上并行實現ATR算法[EB/OL].http://www.eeworld.com.cn/designarticles/dsp/200703/11490.html.

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
日韩小视频在线观看| 欧美亚洲免费在线| 乱码第一页成人| 新狼窝色av性久久久久久| 日韩视频免费在线| 最近中文字幕日韩精品| 一本色道久久加勒比88综合| 亚洲国产精品成人精品| 欧美日精品一区视频| 欧美国产日韩一区| 欧美二区视频| 亚洲欧美日韩人成在线播放| 一本高清dvd不卡在线观看| 亚洲看片一区| 亚洲男人的天堂在线观看| 一区二区视频免费完整版观看| 国产亚洲成精品久久| 国产私拍一区| 欧美女同在线视频| 欧美国产日本在线| 欧美精品日日鲁夜夜添| 欧美精品一线| 久久激情婷婷| 久久精品日韩| 亚洲永久视频| 亚洲精品一品区二品区三品区| 亚洲电影免费观看高清完整版在线| 亚洲精品中文字| 国产在线精品成人一区二区三区| 国产日韩精品一区观看| 欧美日韩三级视频| 欧美天堂在线观看| 国产精品一区二区三区免费观看| 欧美精品福利在线| 久久国产日韩欧美| 久久久久久久久久久久久久一区| 一区二区三区日韩在线观看| 久久精品国产清高在天天线| 亚洲视频免费在线观看| 亚洲小视频在线观看| 性欧美激情精品| 日韩一级片网址| 亚洲视频在线视频| 91久久精品久久国产性色也91| 亚洲国产经典视频| 亚洲老司机av| 亚洲激情小视频| aaa亚洲精品一二三区| 亚洲国产婷婷香蕉久久久久久| 狠狠综合久久| 国产色产综合色产在线视频| 欧美偷拍一区二区| 国产欧美亚洲视频| 欧美天天综合网| 欧美日韩你懂的| 欧美成人免费在线视频| 久久亚洲风情| 欧美绝品在线观看成人午夜影视| 欧美丝袜一区二区| 国产精品成人免费视频| 欧美日韩精品在线视频| 国产精品亚洲精品| 亚洲电影免费观看高清完整版在线观看| 国产一区二区三区黄视频| 国产麻豆91精品| 国产精品色网| 亚洲电影免费观看高清完整版| 99亚洲视频| 一区二区av| 99re6热在线精品视频播放速度| 亚洲欧美中日韩| 午夜欧美大尺度福利影院在线看| 亚洲第一久久影院| 亚洲直播在线一区| 牛夜精品久久久久久久99黑人| 麻豆国产精品va在线观看不卡| 欧美三区在线视频| 国产精品久久久久毛片大屁完整版| 欧美日韩一二三四五区| 欧美日韩亚洲一区三区| 欧美色大人视频| 欧美日韩不卡| 国产视频亚洲| 狠狠久久亚洲欧美专区| 99ri日韩精品视频| 亚洲欧洲精品一区二区三区| 亚洲日本精品国产第一区| 亚洲综合好骚| 欧美激情精品久久久久久变态| 国产日韩1区| 在线亚洲欧美| 亚洲最新在线视频| 欧美www在线| 欧美精品一区在线| 欧美日韩在线播放一区| 伊人春色精品| 欧美一级片久久久久久久| 亚洲一二三区精品| 欧美另类一区二区三区| 欧美日韩一区二区在线视频| 一区二区视频免费在线观看| 午夜精品久久久久久久蜜桃app | 亚洲欧美文学| 欧美日韩情趣电影| 国产精品视频免费在线观看| 亚洲伦理在线免费看| 亚洲图片在区色| 亚洲永久免费av| 亚洲女同同性videoxma| 久久国产日本精品| 最新精品在线| 亚洲一区二区三区免费观看| 欧美激情女人20p| 国产精品www网站| 亚洲精品看片| 午夜在线播放视频欧美| 亚洲精品在线一区二区| 久久天堂精品| 精品91在线| 亚洲国产精品999| 噜噜噜躁狠狠躁狠狠精品视频| 欧美日韩另类在线| 国产日韩欧美一二三区| 亚洲人成网站精品片在线观看| 亚洲精品欧美日韩| 久久综合五月| 狠狠久久亚洲欧美| 亚洲韩国青草视频| 欧美精品一区二区三区在线播放 | 欧美一区三区二区在线观看| 久久综合九色欧美综合狠狠| 欧美日韩精品欧美日韩精品一| 91久久久国产精品| 亚洲精品系列| 欧美日韩另类丝袜其他| 国内视频精品| 亚洲国产福利在线| 欧美激情视频网站| 亚洲毛片一区| 久久精品人人做人人爽电影蜜月| 久久久精彩视频| 亚洲国产91| 一区二区三区黄色| 欧美视频在线不卡| 午夜精品福利一区二区蜜股av| 亚洲精品在线观看视频| 欧美精品在线极品| 一区二区福利| 欧美一区1区三区3区公司| 国产综合在线看| 亚洲一区国产| 一区二区三区四区国产精品| 欧美视频在线观看免费网址| 在线观看不卡| 99热在这里有精品免费| 久久琪琪电影院| 国产精品高潮呻吟| 欧美一级大片在线观看| 久久躁日日躁aaaaxxxx| 亚洲人成久久| 性欧美暴力猛交另类hd| 好看的亚洲午夜视频在线| 日韩视频免费观看高清完整版| 国产精品高清网站| 一本久道久久久| 欧美中文字幕在线播放| 国产精品久久国产精麻豆99网站| 亚洲欧美激情四射在线日| 久久久美女艺术照精彩视频福利播放| 国产精品视频导航| 亚洲视频axxx| 裸体一区二区三区| 国语自产偷拍精品视频偷| 亚洲欧美国产精品桃花| 亚洲色图在线视频| 国产伦精品一区二区三区| 亚洲欧美999| 午夜日韩福利| 国产精品一级久久久| 亚洲在线观看免费| 欧美一区二区精美| 在线日本欧美| 99re在线精品| 国产小视频国产精品| 一本大道久久a久久综合婷婷 | 日韩一级片网址| 国产一区二区三区视频在线观看 | 欧美一级在线播放| 欧美特黄一级大片| 欧美一级大片在线观看| 欧美精品日本| 9l国产精品久久久久麻豆| 亚洲性图久久| 在线观看日韩av先锋影音电影院| 亚洲无线视频| 亚洲国产精品电影在线观看| 欧美中文字幕久久| 一区二区三区欧美亚洲| 欧美高清视频在线播放| 亚洲久久一区|