摘要:該文研究了基于TMS320DM320芯片的MPEG-4高級音頻編碼技術(shù)(AAC)的實時解碼方法。討論了芯片中ARM與DSP的通信機制,并實現(xiàn)了MPEG-4 AAC的音頻解碼過程,結(jié)果表明該方法的解碼速度完全滿足音頻播放實時性的要求。
關(guān)鍵詞:MPEG-4高級音頻編碼;音頻解碼;ARM;DSP
中圖分類號:TP311 文獻標(biāo)識碼:A文章編號:1009-3044(2009)33-9494-02
Design and Implementation of MPEG-4 AAC Real-time Decoder Based on TMS320DM320
LIU Shao-kai
(Information Center of Chongqing SongZao Coal Electric Limited Liability Company, Chongqing 401445, China)
Abstract: This paper focuses on the implementation of MPEG-4 advanced coding (AAC) real-time software decoder on TMS320DM320; discusses the issue of communication between ARM and DSP to implement decoding and playing. The result demonstrates the decoding speed can meet the needs of real-time in audio playing.
Key words: MPEG-4 AAC; audio decoding; ARM; DSP
隨著人們對高品質(zhì)音樂的追求不斷提高,用于音頻編解碼的技術(shù)也在不斷的進步,高級音頻編碼MPEG-4 AAC(Advanced Audio Coding)標(biāo)準(zhǔn)是當(dāng)今最先進的音頻編碼技術(shù),它具有壓縮比高,重建音質(zhì)好,聲道配置靈活,不同層次的應(yīng)用具有不同的算法復(fù)雜度等特點。因此,MPEG-4 AAC 在數(shù)字音頻廣播、數(shù)字聲音的存儲、家庭影院、網(wǎng)絡(luò)傳輸?shù)阮I(lǐng)域得到越來越廣泛的應(yīng)用。本文在TMS320DM320芯片上實現(xiàn)了MPEG-4 AAC的音頻解碼過程,通過優(yōu)化程序代碼和研究ARM與DSP的通信機制,實現(xiàn)了音頻的實時解碼。
1 MPEG-4 AAC
MPEG-4 AAC是由MPEG(Moving Picture Exports Group)提出的音頻編碼標(biāo)準(zhǔn),以感知音頻編碼技術(shù)作為其主要架構(gòu),AAC提供多達(dá)48個聲道,抽樣頻率從8KHZ到96KHZ。1998年,AAC正式被指定為MPEG-4音頻編碼標(biāo)準(zhǔn),AAC舍棄了與MPEG-1/2編碼標(biāo)準(zhǔn)的相容性,這使得編碼的效率與品質(zhì)得到提高[1-2]。
AAC引進了其他的功能如:長期預(yù)測(Long term prediction)、時域噪聲抑制(Temporal Noise Shaping)等,進一步提升了壓縮效率與品質(zhì)。MPEG-4 AAC中定義了四種不同的編碼配置,分別為主配置(Main Profile)、長期預(yù)測編碼配置(Long Term Prediction Profile, LTP)、低復(fù)雜度編碼配置(Low Complexity Profile, LC)以及可變抽樣編碼配置(Scalable Sampling Rate Profile, SSR)。主配置使用了全部標(biāo)準(zhǔn)中所定義的壓縮工具,可以將原始的音頻信號以最好的品質(zhì)進行編碼,不過相對也是所有編碼配置中復(fù)雜度最高,且使用內(nèi)存最多的類型[4]。
2 硬件平臺介紹
TMS320DM320(以下簡稱DM320)是美國德州儀器公司針對數(shù)碼相機系統(tǒng)所提出的系統(tǒng)芯片組。具有完整的I/O接口,可以與外界裝置有高度的溝通能力。雖然DM320的硬件架構(gòu)主要針對于數(shù)碼相機系統(tǒng)設(shè)計的,但是由于其具有強大的計算能力,因此也可以用于多媒體系統(tǒng)。所以我們采用此平臺作為本設(shè)計的硬件環(huán)境。DM320的系統(tǒng)結(jié)構(gòu)圖如圖1所示,DM320大致可以分為兩個硬件部分:第一部分是ARM926EJ精簡指令集(RISC)處理器,是一個具有32-bit指令運算能力的微處理器;第二部分是TMS320C5409(100MHZ)的數(shù)字信號處理器(DSP)[3]。
3 ARM與DSP的通信機制
由于ARM9不適合處理浮點運算,加上音頻數(shù)據(jù)大多為浮點數(shù),因此必須對程序中浮點運算部分進行整型化。整型化主要是針對運算時所需要用到的弦波與指數(shù),將其乘上一個常數(shù),并建立表格存儲,需要時通過查表取出所要的整型數(shù)。
解碼完的音頻數(shù)據(jù)暫時存放在輸出緩存中,接著利用直接存儲器存取(DMA)將音頻數(shù)據(jù)傳送到多通道緩存串口(MCBSP),最后經(jīng)MCBSP接口傳送到AIC23芯片(ADC)。AIC32將數(shù)字信號轉(zhuǎn)換成模擬信號,并進行信號的增益放大,最后將信號傳送到揚聲器輸出。
其中DMA和MCBSP在音頻輸出流程中扮演重要角色。在聲音輸出時,使用DMA的自動緩存模式來傳送內(nèi)存空間中的音頻數(shù)據(jù),這種模式在傳完一個指定大小的空間后,會自動從該空間的起始位置再次傳送數(shù)據(jù),將壓縮完的音頻數(shù)據(jù)存放在這塊區(qū)域中,并將MCBSP設(shè)為目標(biāo)端,這樣就能將音頻數(shù)據(jù)傳輸?shù)組CBSP上等候輸出。利用這個特性可以重復(fù)利用一個較小的內(nèi)存空間來播放相當(dāng)長度的音頻。在內(nèi)存的使用上,必須遵循表1中的緩沖區(qū)起始位置規(guī)則。
表1表示,若使用一個大小為8的緩沖區(qū)空間,下一個比大小為16的緩沖起始位置必須對其16字的邊界,也就是起始位置必須在000H、0010H、0020H。我們實現(xiàn)的AAC解碼器一次輸入的數(shù)據(jù)大小為0x1000H,所以我們選擇的位置是DSP內(nèi)存中的0x8000至0x9000。由于解碼速度比音頻數(shù)據(jù)轉(zhuǎn)移的速度要快,所以控制兩者之間的關(guān)系相當(dāng)重要。首先在DSP端設(shè)定一個大小為每次解碼所得音頻大小兩倍的內(nèi)存空間,然后使用乒乓緩存的方法。
在解碼第一次寫入數(shù)據(jù)時,解碼器會先將兩塊緩沖區(qū)都填滿,然后告訴DMA開始搬移數(shù)據(jù)。此時解碼功能暫停以等待聲音的輸出,而DMA會從緩沖區(qū)的起始位置開始傳送數(shù)據(jù),當(dāng)DMA傳送完第一塊緩沖區(qū)時,會產(chǎn)生一個中斷指令并發(fā)送一個信號給解碼器,當(dāng)解碼器接收到這個信號后,會再次啟動解碼并將解碼后的音頻數(shù)據(jù)再次寫入第一塊緩沖區(qū),此時DMA并沒有停止,而是繼續(xù)傳送第二塊緩沖區(qū)內(nèi)的數(shù)據(jù)。同理,當(dāng)解碼器把第一塊緩沖區(qū)填滿的時候就會暫停來等待DMA發(fā)來的信號,這個機制會一直持續(xù)到解碼結(jié)束。
圖2描述了DMA與解碼器之間相互使用緩沖區(qū)的相互關(guān)系,當(dāng)數(shù)據(jù)解碼完時,必須及時將DSP停住,否則DMA會不斷重復(fù)傳送整段音頻數(shù)據(jù)的最后兩個音框而產(chǎn)生令人不適的聲音。此外,在音頻緩沖區(qū)中的數(shù)據(jù)排列是左右聲道數(shù)據(jù)交錯排列,因為取樣頻率足夠高,聽起來會讓人產(chǎn)生左右聲道同時有聲音的感覺。
在傳輸中,DMA將數(shù)據(jù)傳送到MCBSP的數(shù)據(jù)傳輸寄存器(DXR),當(dāng)傳輸移位寄存器(XSR)都已經(jīng)傳送出去時,傳輸移位寄存器會將數(shù)據(jù)傳輸寄存器中的數(shù)據(jù)復(fù)制過來;傳輸移位寄存器會將數(shù)據(jù)發(fā)送到AIC32數(shù)字轉(zhuǎn)換器。
4 實現(xiàn)流程
在DM320上實現(xiàn)AAC的流程如圖3所示。
1) 首先在PC機上實現(xiàn)AAC解碼,并驗證解碼是否正確。
2) 將PC上的程序移植到DM320平臺上,改寫一些僅在PC上支持的函數(shù),并進行優(yōu)化。
3) 將輸出音頻存在SDRAM中,并使用CCS把音頻數(shù)據(jù)存在計算機上,或者存在CF卡上,測試ARM9的解碼速度。
4) 驗證完解碼數(shù)據(jù)正確后,需要對性能進行優(yōu)化,以滿足解碼器的實時性要求。
5) 對MCBSP與DMA的設(shè)置進行測試。建立準(zhǔn)確的ARM9與DSP的通信機制,是ARM9能夠掌握DMA傳輸數(shù)據(jù)的情況,這樣才能決定開始解碼與暫停等待的時間。
我們將解碼器程序從PC機移植到芯片上后,第一次測量所得到的速度是實時要求速度的2倍。經(jīng)過對程序代碼優(yōu)化,例如將radix-4的傅里葉變換前端輸入按位取反部分代碼做了改良,最后得到的在ARM9上的解碼速度是實時速度要求的0.7倍。當(dāng)確定解碼速度滿足實時要求后,再建立DMA于MCBSP的數(shù)據(jù)傳送環(huán)境,最后指定一塊內(nèi)存空間,作為ARM9與DSP溝通的標(biāo)志區(qū)域,以實現(xiàn)ARM9與DSP的溝通問題。
5 結(jié)論
該文介紹了MPEG-4的高級音頻編碼技術(shù)(AAC)的解碼流程,實現(xiàn)了一個能在ARM9上實時解碼,并能與DSP共同組成實時解碼播放的音頻解碼器。為AAC技術(shù)更好的應(yīng)用打下了基礎(chǔ)。
參考文獻:
[1] TSUNG-HAN T,CHUH-CHU Y.A high qualityRe-quantization/quantization method for MP3 andMPEG-4 AAC audio coding[C].Circuits and Sys-tems,ISCAS.2002,III,III: 852-854.
[2] Alexandre E,Pena A.Low-complexity bit-allocation algorithm for MPEG AAC audio coders.Signal Processing Letters,2005,12(12):824-826.
[3] 陳健.AAC:21世紀(jì)音頻編碼的主流[J].電聲技術(shù),2002(09):19-23.
[4] 譚建國,關(guān)紅濤.MPEG-4AAC音頻編碼綜述[J].計算機工程,2005(10):4-6.
[5] 岳玲,陳健,徐盛.MPEG-4 AAC解碼器在TMS320C6416上的實現(xiàn)[J].電聲技術(shù),2003(11).