視頻會議頻道精裝上線,新視角,新視界!
鐵三角
2012標牌展
快速搜索:

DRM AAC音頻解碼器的操作流程及優化

2011年07月22日 16:35   來源:中國數字視聽網   字體【

AAC音頻解碼器定點在DSP芯片TMS320C6416上,從多方面對AAC音頻解碼器的技術進行優化,實驗結果表明,算法的運行速度提高了10倍,存儲器占用情況有較大改善,為DRM廣播信號解碼系統執行音頻解碼之前的解調和信道解碼程序節省了很大的周期資源和處理空間。

【中國數字視聽網訊】 數字廣播調幅系統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)對傳來的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有關的低級優化由代碼生成器完成。
 

[雅馬哈]MG124C
[雅馬哈]MG124C
價格:2300元
[EAW]DX1208
[EAW]DX1208
價格:面議
[雅馬哈]MG166CX
[雅馬哈]MG166CX
價格:面議
[雅馬哈]MG12-4
[雅馬哈]MG12-4
價格:4800元
[湖山]ME602P
[湖山]ME602P
價格:3500元
返回首頁      發給朋友
aopen
NEC 2012巡展
產品關注排行
a天堂中文在线88