基于矩陣乘法器的MP3音頻解碼系統的優(yōu)化設計
0 引言
MP3(MPEG Audio Layer 3)是一種以高保真為前提實(shí)現的高效壓縮技術(shù)。MP3音頻編碼器復雜,壓縮率很高,但其音色和音質(zhì)還可以保持基本完整,因此該音頻格式文件在計算機、網(wǎng)絡(luò )和各種電子設備上都得到了廣泛運用。
由于MP3音頻解碼相對比較復雜,為了達到在控制成本的范圍內實(shí)現快速解碼的要求,提出了在SoC上通過(guò)增加矩陣乘法器運行快速的兩個(gè)16點(diǎn)DCT算法,進(jìn)一步提高M(jìn)P3解碼速度的可行性方案。
1 MP3解碼流程分析
MP3解碼的流程如圖1所示,解碼的主要過(guò)程包括同步處理、解幀頭、解邊帶信息、解比例因子、Huffman解碼、逆量化、頻率線(xiàn)重排序、立體聲處理、混疊重建、改進(jìn)離散余弦逆變換(IMDCT)、頻率倒置處理、子代綜合濾波,最后輸出原始的PCM數據。
在這些過(guò)程中由于IMDCT和子帶綜合濾波的算法比較復雜,占用硬件資源較多,處理時(shí)間長(cháng),因此功耗所占比例相應較高。表1是在DSP平臺上成功移植后,對代碼進(jìn)行耗時(shí)分析的結果。
根據表1可知,子帶綜合濾波占了整個(gè)解碼時(shí)間的60 %以上,是決定解碼速度的最關(guān)鍵模塊;其次是長(cháng)塊IMDCT運算,占了整個(gè)解碼時(shí)間的10%以上。若采用MPEG-1建議的算法流程,數值計算主要集中在子帶綜合濾波上。以?xún)陕暤?8 kHz采樣率為例,乘法運算量為(48 000/32)×(64×32+512)×2=7 680 000次/s。因此,子帶綜合濾波是MP3解碼器的優(yōu)化重點(diǎn),減少子帶綜合濾波的計算量和計算時(shí)間是MP3解碼器實(shí)現的核心。
2 子帶綜合濾波分析
子帶綜合濾波是MP3解碼的最后一部分,也是解碼過(guò)程中最為耗時(shí)的關(guān)鍵步驟。它負責從IMDCT的輸出值中把PCM值還原出來(lái),可以分成5個(gè)步驟。首先是Matrixing(矩陣)運算,即,2,…,63。由公式可知,它從32個(gè)子帶Sk的每個(gè)子帶中取出一個(gè)值組成32個(gè)值送入一個(gè)矩陣中進(jìn)行運算,然后把輸出Vi的64個(gè)結果放入一個(gè)1 024的先入先出(FIFO)緩存中,再從1 024值中取出一半,組成一個(gè)512矢量Ui,并對這512矢量進(jìn)行加窗運算,即Wi=UiDi,i=1,2,…,511,加窗系數Di由MP3官方協(xié)議 AnnexB Table3-B.3提供。最后將加窗結果Wi進(jìn)行疊加生成32個(gè)時(shí)域PCM輸出。
1次矩陣運算乘法和加法運算過(guò)程分別為1 024次和992次,完成1個(gè)聲道的解碼需要18次矩陣運算。矩陣運算是子帶綜合濾波的關(guān)鍵步驟。實(shí)際上,Konstantinos Konstantinides提出的方法,只需要做一些變化就可以通過(guò)32點(diǎn)DCT變換成矩陣運算。
2.1 32點(diǎn)快速DCT算法分析
快速DCT變換算法主要基于系數矩陣分裂方法,增加輸入的預處理,使得乘法和加法計算量減半。32點(diǎn)的DCT變換到矩陣運算如圖2所示。其中V(1×64)表示矩陣的輸出,A,B都是長(cháng)度為1×16的矢量,(A,B)表示32點(diǎn)DCT的輸出。
由于32點(diǎn)的DCT可以分解成2個(gè)16點(diǎn)的DCT變換,依次類(lèi)推可以分解成8點(diǎn)的DCT變換,考慮到定點(diǎn)數字信號處理中的有限字長(cháng)效應,實(shí)際只需分解1 次,將32點(diǎn)DCT化成2個(gè)16點(diǎn)的DCT。簡(jiǎn)化子帶濾波流程以及使用快速DCT變換后,子帶綜合濾波部分的運算量可以減少約60 %。
由32點(diǎn)DCT分解為2個(gè)16點(diǎn)DCT過(guò)程推導如下:
2.2 基于矩陣乘法器的快速DCT算法優(yōu)化
3×3矩陣乘法器由觸發(fā)器和乘累加器組成,是高性能DSP處理器的重要部件,也是實(shí)時(shí)處理的核心,其速度直接影響DSP處理器的速度。矩陣乘法器的實(shí)現有很多種,基本上都基于并行計算原則。由于每列結果與其他列不相關(guān),因此可以通過(guò)增加乘法器多列同時(shí)計算,經(jīng)過(guò)n次乘累加就可以得到最后結果。圖3給出矩陣乘法器的結構。
顯然,這種結構的計算速度很快,但是使用乘法器會(huì )因矩陣維數n的增加而快速增加,使用的觸發(fā)器也很多。在很多場(chǎng)合下,只要滿(mǎn)足處理速度的要求,完全沒(méi)有必要浪費這么多硬件資源,而是只要1個(gè)乘累加單元流水作業(yè),分步計算每1列結果既可。在做乘累加計算1個(gè)元素時(shí)候,準備下一組參與運算的數據,如此循環(huán),同樣可以獲得較高的處理速度。
在該設計中,由于B矩陣是1×n的一維向量輸入數據,A矩陣為DCT系數矩陣,A矩陣中的元素為n個(gè)系數的線(xiàn)性組合,因此整個(gè)矩陣乘法器需要2組n個(gè)觸發(fā)器分別存放輸入數據和n個(gè)系數,1個(gè)乘累加單元。輸入數據X[0:n],從X[O]到X[n]循環(huán)n次進(jìn)入乘法器,使用選擇信號Assi-gn[0:n] 選擇系數C[0:n],另外系數符號由Sign信號軟件控制,基本結構如圖4所示。
由于DCT計算本質(zhì)上就是n×n矩陣乘法運算,而n×n矩陣乘法器是在通用乘法器的基礎上增加2組分別存放系數矩陣的系數C(n)和輸入X(n)的n個(gè)寄存器,使之實(shí)現長(cháng)度為n的乘累加功能,同時(shí)還需保存上次乘法結果。其中,DCT中的系數是一組n維基的n種線(xiàn)性組合。只需1次輸入n個(gè)系數,使用軟件進(jìn)行選擇和符號控制就可實(shí)現這些不同系數組合,無(wú)需反復往寄存器中置數,大大提高了取數/置數的效率,節省了整個(gè)DCT的運算時(shí)間。
因此在計算32點(diǎn)的DCT,可將32點(diǎn)DCT分解為2個(gè)16點(diǎn)的DCT計算,計算量也減少1倍??梢允褂?組16×16的矩陣乘法器并行計算,使得計算時(shí)間大幅減少。表2是通過(guò)增加矩陣乘法器優(yōu)化處理后,子帶綜合濾波使用不同實(shí)現方式所需要的時(shí)間。
結果表明,第2.1節中使用快速32點(diǎn)DCT算法改進(jìn)子帶綜合濾波計算是有效的,直接減少59%的計算時(shí)間。在采用并行2個(gè)16×16矩陣乘法器加速快速 32點(diǎn)DCT的計算,可以取得明顯的效果:使得計算時(shí)間比原算法減少了約91.4%,而且硬件上只增加1個(gè)乘法器和30個(gè)數據鎖存器,以及部分控制電路。使用軟硬件協(xié)同操作就可以獲得子帶綜合濾波計算速度上的大幅度上升。
3 結語(yǔ)
該設計面向SoC實(shí)現了利用增加矩陣乘法器就可加快基于32點(diǎn)快速DCT算法的MP3解碼中子帶綜合濾波的處理速度,大大緩解了系統的頸瓶,使得采用系統主頻比較低(fs≤100 MHz)的SoC平臺進(jìn)行MP3的解碼成為可能。
評論