摘 要: 介紹了MP3解碼器的工作原理,分析了各個解碼環節的計算量和消耗時間。將MP3解碼過程中耗時最多的子帶綜合濾波環節使用矩陣乘法器單元做了優化和改進,提出一種可大幅度提高MP3實時解碼效率的軟硬件協同設計方法,并在SoC仿真平臺上得到實時驗證,達到了較好的優化效果。由于SoC的設計方法比較靈活,可以根據實際需要設計硬件模塊,所以該設計具有方便、靈活和可靠性高等特點,是工程實用價值較高的解碼器。關鍵詞:MP3; 解碼器; 子帶綜合濾波; 矩陣乘法器; SoC
中圖分類號:TN47-34文獻標識碼:A
文章編號:1004-373X(2010)22-0009-03
Optimization of MP3 Decoder Based on Matrix Multiplier
LI Shi-zhuan1, 2, LI Wei-tao1, FU Tian1, MENG Xian-jun2
(1. Hainan Software Professional Institute, Qionghai 571400, China;
2. Beijing Tianyi Integration Technology Co. Ltd., Beijing 100089, China)
Abstract:The working principle of MP3 decoder is introduced. The computed quantity and time-consumption of each decoding link is analyzed. The sub-band synthesis filtering which would take the most time-consumption in the decoding process of MP3 was optimized and modified by using Matrix multiplier. A hardware and software co-design method which can substantially improve real-time decoding efficiency of MP3 is proposed and verified on SoC simulation platform. It achieved a better optimization effect. As SoC design method is flexible, convenient and reliable, hardware modules can be designed according to actual demand. Keywords: MP3; decoder; sub-band synthesis filtering; matrix multipier; SoC
0 引 言
MP3(MPEG Audio Layer 3)是一種以高保真為前提實現的高效壓縮技術。MP3音頻編碼器復雜,壓縮率很高,但其音色和音質還可以保持基本完整,因此該音頻格式文件在計算機、網絡和各種電子設備上都得到了廣泛運用[1-5]。
由于MP3音頻解碼相對比較復雜,為了達到在控制成本的范圍內實現快速解碼的要求,提出了在SoC上通過增加矩陣乘法器運行快速的兩個16點DCT算法,進一步提高MP3解碼速度的可行性方案。
1 MP3解碼流程分析
MP3解碼的流程如圖1所示,解碼的主要過程包括同步處理、解幀頭、解邊帶信息、解比例因子、Huffman解碼、逆量化、頻率線重排序、立體聲處理、混疊重建、改進離散余弦逆變換(IMDCT)、頻率倒置處理、子代綜合濾波,最后輸出原始的PCM數據[1,6]。
圖1 MP3解碼的流程
在這些過程中由于IMDCT和子帶綜合濾波的算法比較復雜,占用硬件資源較多,處理時間長,因此功耗所占比例相應較高。表1是在DSP 平臺上成功移植后,對代碼進行耗時分析的結果[1,3,6]。
根據表1可知,子帶綜合濾波占了整個解碼時間的60%以上,是決定解碼速度的最關鍵模塊[1-2,6-7];其次是長塊IMDCT運算,占了整個解碼時間的10%以上。若采用MPEG-1建議的算法流程,數值計算主要集中在子帶綜合濾波上。以兩聲道48 kHz 采樣率為例,乘法運算量為(48 000/32) ×(64 ×32 + 512) ×2=7 680 000 次/s。因此,子帶綜合濾波是MP3解碼器的優化重點,減少子帶綜合濾波的計算量和計算時間是MP3解碼器實現的核心。
表1 MP3解碼個模塊耗時統計
關鍵模塊平均耗時 /μs時間比例
霍夫曼解碼1 1748.03%
反混疊9276.34%
長塊IMDCT2 23115.27%
短塊IMDCT840.58%
重疊運算3503.39%
子帶綜合濾波9 02861.79%
其他1 1677.99%
2 子帶綜合濾波分析
子帶綜合濾波是MP3解碼的最后一部分,也是解碼過程中最為耗時的關鍵步驟。它負責從IMDCT的輸出值中把PCM值還原出來,可以分成5個步驟。首先是Matrixing(矩陣)運算,即Vi=∑31k=0Nk×Sk,i=1,2,…,63。由公式可知,它從32個子帶Sk的每個子帶中取出一個值組成32個值送入一個矩陣中進行運算,然后把輸出Vi的64個結果放入一個1 024的先入先出(FIFO)緩存中,再從1 024值中取出一半,組成一個512矢量Ui,并對這512矢量進行加窗運算,即Wi=UiDi,i=1,2,…,511,加窗系數Di由MP3官方協議AnnexB Table3-B.3提供。最后將加窗結果Wi進行疊加生成32個時域PCM輸出[1,6]。
1次矩陣運算乘法和加法運算過程分別為1 024次和992 次,完成1個聲道的解碼需要18次矩陣運算。矩陣運算是子帶綜合濾波的關鍵步驟。 實際上,Konstantinos Konstantinides提出的方法,只需要做一些變化就可以通過32點DCT變換成矩陣運算[6]。
2.1 32點快速DCT算法分析
快速DCT變換算法主要基于系數矩陣分裂方法,增加輸入的預處理,使得乘法和加法計算量減半。32點的DCT變換到矩陣運算如圖2所示[1,6]。其中V(1×64)表示矩陣的輸出,A,B都是長度為1×16的矢量,(A,B)表示32點DCT的輸出。
由于32點的DCT可以分解成2個16點的DCT變換,依次類推可以分解成8點的DCT變換[6],考慮到定點數字信號處理中的有限字長效應,實際只需分解1次,將32 點DCT 化成2個16 點的DCT。簡化子帶濾波流程以及使用快速DCT 變換后,子帶綜合濾波部分的運算量可以減少約60%[6]。
由32點DCT分解為2個16點DCT過程推導如下[6]:
X[2n]=∑15k=0S1k#8226;cos[(2k+1)#8226;n#8226;Pi/32] ,
n=0,1,2,…,15(1)
X[2n+1]+X[2n-1]=∑15k=0S2k#8226;cos[(2k+1)#8226;
n#8226;Pi/32],n = 0,1,2,…,16(2)
式中:初始條件為:
X[-1]=X[1],S1k= Sk + S31-k,S2k=
2cos[(2k+1)#8226;Pi/64]#8226;(Sk-S31-k)
圖2 32點的DCT變換到矩陣運算
2.2 基于矩陣乘法器的快速DCT算法優化
3×3矩陣乘法器由觸發器和乘累加器組成,是高性能DSP處理器的重要部件,也是實時處理的核心,其速度直接影響DSP處理器的速度[6-7 ]。矩陣乘法器的實現有很多種,基本上都基于并行計算原則。由于每列結果與其他列不相關,因此可以通過增加乘法器多列同時計算,經過n次乘累加就可以得到最后結果。圖3給出矩陣乘法器的結構。
圖3 3×3的矩陣乘法器結構
顯然,這種結構的計算速度很快,但是使用乘法器會因矩陣維數n的增加而快速增加,使用的觸發器也很多。在很多場合下,只要滿足處理速度的要求,完全沒有必要浪費這么多硬件資源,而是只要1個乘累加單元流水作業,分步計算每1列結果既可。在做乘累加計算1個元素時候,準備下一組參與運算的數據,如此循環,同樣可以獲得較高的處理速度。
在該設計中,由于B矩陣是1×n的一維向量輸入數據,A矩陣為DCT系數矩陣,A矩陣中的元素為n個系數的線性組合,因此整個矩陣乘法器需要2組n個觸發器分別存放輸入數據和n個系數,1個乘累加單元。輸入數據X[0:n],從X[0]到X[n]循環n次進入乘法器,使用選擇信號Assign[0:n]選擇系數C[0:n],另外系數符號由Sign信號軟件控制,基本結構如圖4所示。
圖4 一維矩陣乘法器結構
由于DCT計算本質上就是n×n矩陣乘法運算,而n×n矩陣乘法器是在通用乘法器的基礎上增加2組分別存放系數矩陣的系數C(n)和輸入X(n)的n個寄存器,使之實現長度為n的乘累加功能,同時還需保存上次乘法結果。其中,DCT中的系數是一組n維基的n種線性組合。只需1次輸入n個系數,使用軟件進行選擇和符號控制就可實現這些不同系數組合,無需反復往寄存器中置數,大大提高了取數/置數的效率,節省了整個DCT的運算時間。
因此在計算32點的DCT,可將32點DCT分解為2個16點的DCT計算,計算量也減少1倍。可以使用2組16×16的矩陣乘法器并行計算,使得計算時間大幅減少。表2是通過增加矩陣乘法器優化處理后,子帶綜合濾波使用不同實現方式所需要的時間。
表2 子帶綜合濾波部分使用不同算法所需要的時間對比
實現方式耗時/時鐘周期減少/%
原算法(軟件實現)14 870
快速32點DCT算法(軟件實現)6 08059.1
并行兩個16點DCT算法(軟硬件協同實現)1 28091.4
結果表明,第2.1節中使用快速32點DCT算法改進子帶綜合濾波計算是有效的,直接減少59%的計算時間。在采用并行2個16×16 矩陣乘法器加速快速32點DCT的計算,可以取得明顯的效果:使得計算時間比原算法減少了約91.4%,而且硬件上只增加1個乘法器和30個數據鎖存器,以及部分控制電路。使用軟硬件協同操作就可以獲得子帶綜合濾波計算速度上的大幅度上升[9-10]。
3 結 語
該設計面向SoC實現了利用增加矩陣乘法器就可加快基于32點快速DCT算法的MP3解碼中子帶綜合濾波的處理速度,大大緩解了系統的頸瓶,使得采用系統主頻比較低(fs≤100 MHz)的SoC平臺進行MP3的解碼成為可能。
參考文獻
[1]王俊,姚若河.基于多任務嵌入式應用的MP3實時解碼系統設計[J].現代電子技術,2008,31(4):29-31.
[2]華錫鋒,蔣忠平,羅明清.基于ARM7TDMI的SoC中MP3子系統的設計[J].電子工程師,2004,30(12):1-4.
[3]唐欽,張家棟,霍凱.基于FPGA的MP3播放器設計[J].現代電子技術,2007,30(6):50-52.
[4]胡瑞明,耿相銘.基于ARM946E處理器的MP3解碼優化設計[J].現代電子技術,2009,32(6):172-174.
[5]丁巖松,闞振舉,徐學航.基于SoC的嵌入式系統軟硬件協同設計[J].控制工程,2009(Z3):43-45.
[6]張瑾,徐元欣,張季,等.高清電視音頻解碼的定點DSP實現[J].江南大學學報:自然科學版,2005(3):231-234.
[7]熊開盛,董兆鑫.基于DSP技術的MP3播放器的硬件設計[J].現代電子技術,2007,30(12):164-166.
[8]鐘文榮,陳建發.二維DCT 算法的高速芯片設計[J].廈門大學學報:自然科學版,2005,44(2):198-201.
[9]張軒磊,竇維蓓,董明.面向SoC的數字音頻解碼系統設計方法[J].電聲技術,2008,32(8):72-76.
[10]李陽,劉政林,湯加躍,等.一種新型多媒體SoC驗證平臺原理及其實現[J].微電子學,2007,37(3):189-193.