《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于TMS320C6416的DRM音頻解碼實(shí)現(xiàn)及優(yōu)化
基于TMS320C6416的DRM音頻解碼實(shí)現(xiàn)及優(yōu)化
來(lái)源:電子技術(shù)應(yīng)用2011年第5期
崔 穎,趙 宇,馬永濤,劉開(kāi)華
天津大學(xué) 電子信息工程學(xué)院,天津300072
摘要: 給出了數(shù)字廣播調(diào)幅系統(tǒng)DRM的AAC音頻解碼器在定點(diǎn)DSP芯片TMS320C6416上的實(shí)現(xiàn)方案,從多方面對(duì)AAC音頻解碼器的關(guān)鍵技術(shù)進(jìn)行優(yōu)化。實(shí)驗(yàn)結(jié)果表明,算法的運(yùn)行速度提高了10倍,存儲(chǔ)器占用情況有較大改善,為DRM廣播信號(hào)解碼系統(tǒng)執(zhí)行音頻解碼之前的解調(diào)和信道解碼程序節(jié)省了很大的周期資源和處理空間。
關(guān)鍵詞: DRM AAC 音頻解碼 TMS320C6416
中圖分類(lèi)號(hào): TN914
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 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


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

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

 

 

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

    (3)消除存儲(chǔ)器相關(guān)性。如果C6416編譯器可以確定兩條指令是不相關(guān)的,則安排它們并行執(zhí)行,否則安排指令串行執(zhí)行。有幾個(gè)方法可以幫助編譯器確定哪些指令不相關(guān):使用restrict關(guān)鍵字聲明指針;一起使用-pm選項(xiàng)和-O3選項(xiàng)確定程序優(yōu)先級(jí),在程序優(yōu)先級(jí)中,所有源文件都被編譯成一個(gè)模塊,從而使編譯器更有效地消除相關(guān)性;使用-mt選項(xiàng)向編譯器說(shuō)明代碼不存在存儲(chǔ)器相關(guān)性,即允許編譯器在無(wú)存儲(chǔ)器相關(guān)性的假設(shè)下進(jìn)行優(yōu)化。
 (4)使用內(nèi)聯(lián)函數(shù)。C6416編譯器提供的內(nèi)聯(lián)函數(shù)是直接映射為內(nèi)聯(lián)指令的特殊函數(shù),內(nèi)聯(lián)函數(shù)的代碼高效、長(zhǎng)度短。可以使用內(nèi)聯(lián)函數(shù)并行優(yōu)化C代碼。
    (5)在循環(huán)前加上#pragma MUST_ITERATE(, ,),向編譯器傳遞循環(huán)次數(shù)信息,編譯器會(huì)生成更好的循環(huán)代碼,或消除因不知道循環(huán)次數(shù)而產(chǎn)生的冗余循環(huán)以便減小整個(gè)代碼量。
4 DRM音頻解碼器的測(cè)試結(jié)果
    通過(guò)實(shí)施上述各種優(yōu)化方法,從算法程序上的等效替代到充分利用編譯的優(yōu)化功能,音頻解碼程序運(yùn)行效率有了明顯的提高。下面是同一個(gè)超幀解碼中每個(gè)子幀花費(fèi)的周期數(shù),總計(jì)數(shù)周期為2 641 488,與優(yōu)化前程序花費(fèi)的27 855 831個(gè)周期相比,運(yùn)行時(shí)間不到原來(lái)的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
    (共計(jì)2 641 488周期)
    從表1可以看出,優(yōu)化后一些函數(shù)的訪(fǎng)問(wèn)次數(shù)為0,這是由于優(yōu)化采用了內(nèi)聯(lián)函數(shù)的功能,它們的代碼被內(nèi)聯(lián)在一些較大的函數(shù)中,如faad_getbits( )函數(shù);另一種情況:如對(duì)于pns_decode( )函數(shù),由于DRM系統(tǒng)的音頻編碼標(biāo)準(zhǔn)中的SBR技術(shù)提供了相當(dāng)于PNS的功能,所以AAC中的PNS模塊沒(méi)有使用,優(yōu)化中被刪除。對(duì)比表1中優(yōu)化前后數(shù)據(jù)可知,很多函數(shù)花費(fèi)的周期大大減少,如decode_scale_factors函數(shù)等。

    本文給出了DRM音頻解碼器在TMS320C6416上的實(shí)現(xiàn)方案,并結(jié)合TMS320C6416的特性,從去除無(wú)用函數(shù)、內(nèi)聯(lián)函數(shù)替換、循環(huán)體優(yōu)化等多方面對(duì)音頻解碼程序進(jìn)行了優(yōu)化。在充分利用EDMA硬件資源的音頻驅(qū)動(dòng)程序的配合下,優(yōu)化后的音頻解碼程序能夠完成音樂(lè)的實(shí)時(shí)播放。DRM中一個(gè)AAC超幀的時(shí)間為400 ms,優(yōu)化后解碼一個(gè)音頻超幀耗費(fèi)的周期數(shù)從2 800萬(wàn)降至300萬(wàn),即每秒音頻解碼需750萬(wàn)周期,遠(yuǎn)小于C6416每秒所能執(zhí)行的周期數(shù)(600 M),不但能保證音頻解碼和播放的實(shí)時(shí)性,還為DRM廣播信號(hào)解碼系統(tǒng)執(zhí)行音頻解碼之前的解調(diào)和信道解碼程序節(jié)省了很大的周期資源和處理空間。
參考文獻(xiàn)
[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].清華大學(xué)學(xué)報(bào),2000,40(3):99-103.
[5] Texas Instruments Incorporated.TMS320C6000系列DSP編程工具與指南[M].北京:清華大學(xué)出版社,2006.
[6] 馬君國(guó),王遠(yuǎn)模,常華俊,等.在DSP處理器上并行實(shí)現(xiàn)ATR算法[EB/OL].http://www.eeworld.com.cn/designarticles/dsp/200703/11490.html.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。