基于定點(diǎn)DSP的MP3實(shí)時(shí)解碼器的設計與實(shí)現
關(guān)鍵詞:DSP MP3解碼器 嵌入式C語(yǔ)言 匯編語(yǔ)言
1 FD216 16位定點(diǎn)DSP特點(diǎn)簡(jiǎn)介
DSP(數字信號處理器)是一種特別適合于進(jìn)行數字信號處理的微處理器,主要用于實(shí)時(shí)快速地實(shí)現各種數字信號處理算法。FD216是一個(gè)高效能而且易于使用的16位定點(diǎn)DSP,包含DSP內核、芯片內建數據存儲器、程序內存、兩個(gè)串行接口、一個(gè)定時(shí)器、12組可編程I/O、內部直接內存存?。↖DMA)接口、外部?jì)却娼涌诤痛惺皆诰€(xiàn)仿真器(SICE)接口等,兼容ADSP-218X系列匯編代碼,最高運行速度可達到190MIPS。FD216的CM(Code Memory)、PM(Program Memory)和DM(Data Memory)是嚴格區分的,在程序設計時(shí)要將放在PM區和DM區的數據分別說(shuō)明。在移植ADSP2181匯編代碼時(shí),也要做相應修改。
2 MP3及其解碼原理
MPEG-1 Audio Layer 3(MP3)是一個(gè)在低比特率下提供高保真音頻的壓縮標準。特別是在解碼部分,它已經(jīng)成功地應用于多種消費類(lèi)電子產(chǎn)品中。
MP3解碼原理:首選將MP3數據幀解包,解出幀頭信息和邊帶信息;然后采用霍夫曼解碼解出比特分配信息;接著(zhù)在逆變換中利用頻譜系數,在綜合濾波器中將32位子帶合并成一個(gè)寬帶信號。18個(gè)頻譜值執行32位IMDCT(逆改進(jìn)型離散余弦變換),將生成的576個(gè)頻譜值變換成長(cháng)度為32的18個(gè)連續的頻譜。通過(guò)18次運算,多相位綜合濾波器將這些頻譜轉換到時(shí)域,完成波形重構,生成立體聲PCM音頻數據。MP3解碼流程圖如圖1所示。
3 開(kāi)發(fā)環(huán)境
目標系統為智原科技公司提供的FD216 DSP評估板,系統環(huán)境為WIN2K,軟件環(huán)境為FD2XX工具包(DSP C compiler,assembler,linker,debugger)。
圖2為FD216開(kāi)發(fā)系統結構框圖。
4.1 設計要求
設計要求包括以下內容:
(1) 功能要求:以智原科技公司提供的FD216 DSP評估板作為目標系統,進(jìn)行MP3解碼器設計,標系統能實(shí)時(shí)解碼采樣頻率為32kHz/44.1kHz/48kHz、數據碼率從32到320kbps的MP3比特流。
(2) 解碼精度要求:定點(diǎn)MP3解碼精度應符合ISO/IEC 11172-4所規定的限制精度。
4. 2 硬件設計
硬件設計包括以下內容:
(1) 在FD216評估板上進(jìn)行正確的硬件配置。
(2) 串口0配置。FD216評估板所采用的Audio Codec是Philips公司的UDA1345TS,它與FD216的串口0相連,輸出16位或8位PCM線(xiàn)性數據。
(3) 串行ICE(SICE)仿真調試接口。
圖2
4. 3 軟件設計
軟件設計包括以下內容:
(1) C運行時(shí)間庫。C語(yǔ)言運行時(shí)間庫(C Run Time Library)是整個(gè)C開(kāi)發(fā)工具的核心之一,提供了大量的可以直接調用的庫函數。
(2) 設置內存映射寄存器訪(fǎng)問(wèn)方式。
5 MP3解碼器程序設計
MP3解碼器程序設計包括以下內容:
(1) 定點(diǎn)算法設計。盡管定點(diǎn)DSP也支持浮點(diǎn)運算,但浮點(diǎn)運算會(huì )消耗大量的指令周期和內存,也會(huì )降低系統運行速度,不能應用于MP3實(shí)時(shí)解碼。在程序設計中,首先要將MP3浮點(diǎn)C解碼算法轉換為定點(diǎn)C解碼算法。浮點(diǎn)算法轉換成定點(diǎn)算法實(shí)現過(guò)程比較復雜,本文不再多述。
(2) 在程序的頭部建立正確的運行頭(RunTImeHeader)文件。
(3) 內存分頁(yè)/重疊。與ADSP-218X類(lèi)似,FD216也是通過(guò)設置重疊存儲器選擇寄存器(PMOVLAY/DMOVLAY)來(lái)實(shí)現PM(CM)/DM存儲器分頁(yè)/重疊的。
圖3
FD216的內存結構圖如圖3所示。
FD216系統說(shuō)明文件FD216.SYS說(shuō)明了FD216 DSP的內存分配方式,是支持DSP程序正確運行的系統文件。
數據、代碼分布/重疊應首先在HOST(PC)上對數據、代碼分別進(jìn)行內存分頁(yè),接著(zhù)使用FD2XX開(kāi)發(fā)工具包進(jìn)行編譯、匯編、鏈接,生成目標代碼,然后下載到目標板上運行。
(4)中斷服務(wù)子程序。FD216中斷控制器允許處理器響應十二個(gè)中斷之一。在MP3解碼應用中使用了如下三個(gè)中斷服務(wù)子程序:
①eset中斷服務(wù)子程序:程序運行時(shí),首先進(jìn)入reset中斷服務(wù)子程序,即從start程序開(kāi)始運行,其優(yōu)先級量高。
Jump start; rti;rti;rti; /*Reset */
②ir2_get_data外部中斷服務(wù)子程序:通過(guò)IDMA接口經(jīng)過(guò)PCI總線(xiàn)從HOST(PC)硬盤(pán)讀取數據的控制程序。
③intsp0中斷服務(wù)子程序:向串口0發(fā)送數據的子程序。為了實(shí)現MP3文件在系統中的實(shí)時(shí)播放,設計了雙Buffer通過(guò)串口0向Audio Codec傳送解碼后的聲音樣本數據。Intsp0中斷服務(wù)子程序流程圖如圖4所示。
(5)代碼移植:將MP3解碼算法C程序序植為可在FD216 DSP系統中運行的嵌入式C程序。在此需要注意以下幾點(diǎn):
①由于DSP系統中沒(méi)有文件I/O函數,應將C程序中的文件I/O函數方式改成嵌入式系統中的內存直接讀、寫(xiě)方式。
②應注意數據類(lèi)型的處理:將C程序中的int類(lèi)型改成short或long類(lèi)型,將unsigned int類(lèi)型改成unsigned short或unsigned long類(lèi)型,并且為了提高程序運行效率,應注意盡量少用(unsigned)long型,算法驗證無(wú)誤后再移植到DSP中。
③在保證程序正確性、穩定性的前提下,應通過(guò)修改C算法和數據結構,盡量縮減C程序中表數據的尺寸,使表在DSP內存中占據的空間盡量小。screen.width-500)this.style.width=screen.width-500;" border=0>
6 MP3解碼器實(shí)驗結論
6.1 算法復雜度(COmplexity)評測
通過(guò)仿真調試工具debugger對MP3解碼器在一定條件下進(jìn)行性能評估(Profile),并計算出系統所需要的MIPS(Million Instruction Per Second)。
MP3解碼算法復雜度為60.01MIPS,只占了系統最大運行能力(190MIPS)的31.58%。
6.2 實(shí)驗結果
實(shí)驗結論:系統功能、解碼速度、精度均符合設計要求,并且實(shí)現了實(shí)時(shí)解碼、回放。
本文簡(jiǎn)要介紹了MP3解碼原理,并詳細說(shuō)明了MP3在FD216定點(diǎn)DSP上實(shí)現實(shí)時(shí)解碼的設計、開(kāi)發(fā)流程。在此基礎上亦可開(kāi)發(fā)、實(shí)現其它格式的壓縮編碼數字音頻解碼器,如Dolby AC-3[5]、MPEG-1 Advanced Audio Coding(AAC)、Microsoft (r ) Windows Media(tm) tudio(WMA)等。利用DSP可編程特性??梢蚤_(kāi)發(fā)出多格式音頻解碼器,而不需要增加其它硬件。
評論