基于多任務(wù)嵌入式應用的MP3實(shí)時(shí)解碼系統
1 引 言
MP3是目前世界上流行的音頻格式之一,采用MPEG-1標準的Audio LayerⅢ壓縮編碼格式,具有高壓縮率和保真度。MP3的解碼功能大多以專(zhuān)用解碼芯片的形式應用于多種消費類(lèi)電子產(chǎn)品中。采用軟解碼的方式實(shí)現MP3實(shí)時(shí)播放功能可以充分利用硬件資源,節省芯片面積,有利于降低設計成本,同時(shí)軟件方式可移植性好,解碼質(zhì)量可通過(guò)軟件參數設定,具有更大的靈活性,便于系統升級。隨著(zhù)主流嵌入式微處理器ARM的處理能力越來(lái)越強,這種實(shí)現方式也已經(jīng)成為眾多嵌入式設計公司研究的焦點(diǎn)。
與專(zhuān)用解碼芯片相比,采用軟件方式實(shí)現MP3實(shí)時(shí)解碼的瓶頸在于解碼效率。在多任務(wù)嵌入式系統中,單個(gè)任務(wù)的執行效率以及任務(wù)間的調度方式將直接影響整個(gè)系統在一定硬件資源條件下的實(shí)時(shí)響應速度。因此,在多任務(wù)嵌入式系統中采用軟解碼方式實(shí)現MP3實(shí)時(shí)播放,必須通過(guò)優(yōu)化算法提高解碼效率,在保證實(shí)時(shí)性的基礎上降低對硬件資源的要求。
2 設計思想
MP3解碼需要經(jīng)過(guò)大量的數據處理。首先對MP3數據流進(jìn)行幀同步并解出頭信息和邊信息供解碼主數據使用,之后對主數據依次進(jìn)行霍夫曼解碼、反量化、IMDCT以及子帶合成濾波,最終輸出PCM碼流。整個(gè)解碼過(guò)程如圖1所示。對定點(diǎn)化開(kāi)源解碼程序各模塊執行時(shí)間進(jìn)行測試,找出關(guān)鍵耗時(shí)模塊并對其采用改進(jìn)型快速算法;在保證一定音質(zhì)的前提下,根據解碼運算特征降低運算精度,從而在基于A(yíng)RM926EJ-S處理器開(kāi)發(fā)平臺上實(shí)現對MP3音樂(lè )(碼率為192 kb/s,采樣率為44.1 kHz,立體聲編碼模式)的解碼;在實(shí)時(shí)播放方面,提出雙Buffer輪換DMA傳送的設計方案,為高效任務(wù)調度的實(shí)現提供有利條件。
3 系統實(shí)現過(guò)程
3.1 硬件系統
本文采用的嵌入式系統是以ARM926EJ-S處理器為核心的SoC開(kāi)發(fā)平臺,最高運行主頻為190 MHz,支持ARMv5T指令集,存儲器包括SDRAM和NAND FLASHROM,外圍設備包括DMA控制器、中斷控制器、USB控制器、UART、控制器、I2S控制器以及定時(shí)/計數器。整個(gè)硬件系統的架構如圖2所示。
MP3文件和程序代碼通過(guò)USB線(xiàn)下載并分別存放入NAND FLASH ROM和SDRAM;解碼MP3文件得到的PCM碼流送入I2S控制器輸出;UART控制器可實(shí)現串口打印輸出調試信息,跟蹤程序運行狀態(tài);定時(shí)/計數器用于測試解碼時(shí)間,對解碼各個(gè)模塊進(jìn)行耗時(shí)分析。
3.2 代碼移植
搭建好硬件平臺后,對各硬件模塊進(jìn)行初始化,并加載文件系統,完成軟件平臺的搭建。將開(kāi)源的MP3解碼程序代碼移植到軟件平臺上,這一過(guò)程主要是針對平臺的文件系統,對文件讀寫(xiě)函數進(jìn)行替換,并將屏幕打印替換為串口打印操作。移植后的代碼實(shí)現對MP3文件進(jìn)行解碼,并輸出為PCM碼流文件。利用CoolEdit對輸出PCM碼流文件進(jìn)行測試播放,輸出音質(zhì)良好。
3.3 耗時(shí)分析
成功移植后,對代碼進(jìn)行耗時(shí)分析,找出耗時(shí)最大的功能模塊,確定重點(diǎn)優(yōu)化對象。該系統采用硬件定時(shí)/計數器作為測試工具,將計數器的計數頻率調配為1 MHz,可實(shí)現1μs的測試精度。在A(yíng)RM工作主頻為150 MHz的條件下,對100幀MP3數據的解碼過(guò)程進(jìn)行耗時(shí)測試,測試結果如表1所示。根據表1測試數據可知,子帶合成濾波占了整個(gè)解碼時(shí)間的60%以上,是決定解碼速度的最關(guān)鍵模塊;其次是長(cháng)塊IMDCT運算,占了整個(gè)解碼時(shí)間的10%以上。因此,子帶合成濾波與長(cháng)塊IMDCT成為優(yōu)化重點(diǎn)。
3.4 解碼算法分析與優(yōu)化
3.4.1 子帶合成濾波算法優(yōu)化
子帶合成濾波是MP3解碼過(guò)程中最耗時(shí)的關(guān)鍵流程,該解碼系統采用Konstantinos Konstantinides提出的改進(jìn)型算法對其進(jìn)行優(yōu)化。子帶合成濾波的標準算法涉及從32值變換到64值的矩陣運算,Konstantinos Konstantinides提出的改進(jìn)型算法將矩陣運算進(jìn)行一系列變化,最終歸結于32點(diǎn)DCT變換,而DCT變換有類(lèi)似于FFT的快速算法(FCT),從而加速了整個(gè)子帶合成濾波過(guò)程。由DCT變換到矩陣運算的轉換過(guò)程如圖3所示,其中S和V分別為矩陣運算的32點(diǎn)輸入序列和64點(diǎn)輸出序列,A,B均為16點(diǎn)矢量。
3.4.2 IMDCT算法優(yōu)化
IMDCT采用Szu-Wei Lee提出的快速算法進(jìn)行優(yōu)化,該算法充分利用余弦函數的對稱(chēng)性,將N點(diǎn)IMDCT運算經(jīng)過(guò)一系列變形,最終轉化為N/4點(diǎn)的SDCT-Ⅱ運算,其轉化流程如圖4所示。對短塊IMDCT使用該算法并沒(méi)有帶來(lái)較大的速度改善,故只對長(cháng)塊應用。相比于直接運算的648次乘法和612次加法,優(yōu)化后的長(cháng)塊。IM-DCT運算量下降為43次乘法和115次加法。
3.4.3 低精度乘法
在A(yíng)RM指令集中的乘法指令有2類(lèi):32 b×32 b→64 b長(cháng)乘法指令(MULL,MLAL)和32 b×32 b→32 b短乘法指令(MUL,MLA),前者的指令周期為3+m,而后者為2+m。由于解碼過(guò)程中,尤其是子帶合成濾波過(guò)程,乘法指令使用非常頻繁,如果能夠使用短乘法指令進(jìn)行乘法運算,將會(huì )大大提高系統性能。
該系統的定點(diǎn)運算過(guò)程采用Q28定點(diǎn)表示法,若采用長(cháng)乘法指令運算,得到的64位結果中有效位只有第28~59位,低28位和高4位都是無(wú)用的,需要通過(guò)移位去除。根據解碼過(guò)程中運算系數的定點(diǎn)表示特征,可以在乘法運算前預先對操作數進(jìn)行移位,以便使編譯器采用短乘法指令進(jìn)行運算。在子帶合成濾波過(guò)程中,定點(diǎn)化濾波系數的低12位均為0。根據這一特征,可將濾波系數預先右移14位再進(jìn)行乘法運算,這一過(guò)程僅損失2位精度。另外,在子帶濾波快速算法的DCT運算結果參加乘法運算前,預先右移12位,最后將子帶濾波的輸出結果右移2位。經(jīng)過(guò)3次右移操作后的輸出結果共降低16位精度,對于16位PCM輸出剛好滿(mǎn)足精度要求。
經(jīng)過(guò)以上一系列優(yōu)化處理后,主要解碼耗時(shí)模塊的改善情況如表2所示。
3.5 實(shí)時(shí)播放方案設計
該系統采用雙Buffer輪換DMA傳送的方案實(shí)現實(shí)時(shí)播放,整個(gè)播放流程如圖5所示。其中n為解碼當前幀的幀序號,第一幀序號為0;buffer0和buffer1分別用于存放當前播放幀的PCM數據和下一幀的PCM數據。DMA傳送采用LLI傳送方式,可實(shí)現將2個(gè)buffer存放的PCM數據輪換向I2S FIFO傳送,因此只需在解碼完第1幀后啟動(dòng)一次DMA傳送。
該方案的實(shí)現原理是在一幀MP3數據解碼時(shí)間遠小于1幀PCM數據播放時(shí)間(采樣率為44.1 kHz時(shí),一幀PCM播放時(shí)間為26.1 ms)這一前提條件下,播放當前幀PCM數據的同時(shí)開(kāi)始解碼下一幀MP3數據。因此在解碼完下一幀數據后,需要等待當前幀播放完畢,再繼續解碼。在圖5中,這一等待過(guò)程采用的是查詢(xún)DMA傳送結束標志的方式,這使得CPU一直處于忙狀態(tài),白白消耗了系統資源。然而在多任務(wù)嵌入式系統中,這段等待時(shí)間恰恰是非常有利用價(jià)值的。MP3實(shí)時(shí)解碼可以一個(gè)任務(wù)的形式存在于多任務(wù)系統中,將圖5中的查詢(xún)過(guò)程改為休眠M(jìn)P3解碼任務(wù),同時(shí)將DMA中斷打開(kāi),在中斷服務(wù)程序中喚醒解碼任務(wù),那么在解碼完畢下一幀后便可釋放CPU資源,將DMA中斷發(fā)生前的這段等待時(shí)間用于調度其他進(jìn)程,例如JPEG解碼任務(wù)和GUI任務(wù),從而實(shí)現播放音樂(lè )、播放圖片和用戶(hù)操作3者的高效協(xié)同工作。
4 結 語(yǔ)
本文給出的MP3實(shí)時(shí)解碼系統在基于A(yíng)RM926EJ-S核心的SoC硬件平臺上,對MP3解碼算法和實(shí)時(shí)播放方案進(jìn)行優(yōu)化設計。實(shí)驗結果證明,該系統可在處理器主頻僅為36 MHz的條件下流暢播放MP3音樂(lè )(碼率為192 kb/s),可嵌入數碼相框、MP4等產(chǎn)品中實(shí)現MP3實(shí)時(shí)播放功能
評論