田學(xué)民,張曉境
(河北工業(yè)大學(xué) 信息工程學(xué)院,天津 300401)
在MP3播放器的設(shè)計時,提高音質(zhì)的一個關(guān)鍵因素還在與MP3解碼技術(shù),因為播放器必須先通過解碼模塊進(jìn)行MP3解碼,所以解碼技術(shù)的研究是MP3研究的一個關(guān)鍵環(huán)節(jié)。目前國內(nèi)的基于FPGA的MP3硬件解碼的研究還不是很多,而且基本都是只針對解碼系統(tǒng)中的幾個關(guān)鍵環(huán)節(jié)進(jìn)行硬件加速的SOC設(shè)計,而對于整個MP3解碼系統(tǒng)的硬件實現(xiàn)就更少了。因此,本文的重點就是研究MP3解碼算法。
在進(jìn)行MP3解碼時,輸入的經(jīng)過壓縮的比特流首先要進(jìn)行碼流解碼。檢測數(shù)據(jù)流中的同步字來確定一幀數(shù)據(jù)的開始,提取幀頭信息,從而得到相應(yīng)的解碼參數(shù),同時分離邊信息和主數(shù)據(jù),通過對邊信息數(shù)據(jù)解碼可得到哈夫曼解碼信息和反量化信息,主數(shù)據(jù)就可以根據(jù)哈夫曼解碼信息解碼出量化之后的頻率線數(shù)據(jù)[1]。提取出的頻率線信息經(jīng)過反量化、重排序、聯(lián)合立體聲處理、混疊重建、反離散余弦變換(IMDCT)、頻率反轉(zhuǎn)、合成多相濾波器組處理后就可以得到原始的PCM音頻信號。
編碼后的MP3數(shù)據(jù)以幀為單位,每一幀又分為兩個粒度。這兩個粒度在解碼時相對獨立,從每一粒度中可以解碼出576個PCM數(shù)據(jù),2個粒度一共可以解出1 152個PCM數(shù)據(jù)[2]。MP3音頻幀的主數(shù)據(jù)包括比例因子和Huffman碼字。由邊帶信息參量可計算出單個聲道內(nèi)比例因子的總長度(part2_length),用參量 part2_3_length減去此值便可得到Huffman碼字的總長度。Huffman解碼還原出的576條頻率線從低頻到高頻分為3個區(qū)域:大值區(qū)、小值區(qū)和零值區(qū),如圖1所示。
圖1 Huffman碼字結(jié)構(gòu)圖Fig.1 Chart of Huffman code
只有大值區(qū)和小值區(qū)的頻率線會出現(xiàn)在MP3碼流中,零值區(qū)的頻率線的值全為0,因此不用編碼也不必出現(xiàn)在碼流中,解碼時只需對零值區(qū)的頻率線補(bǔ)0,直至得到576個解碼值。Huffman解碼得到的頻域值按比例因子頻帶從低到高排列[3]。
反量化過程是基于Huffman解碼得到的頻率線進(jìn)行的。記Huffman解碼結(jié)果為is,反量化計算結(jié)果為xr,其計算公式如下所示[4]。
長窗中的數(shù)據(jù)用下面的公式進(jìn)行反量化:
短窗中的數(shù)據(jù)的反量化公式為:
在反量化公式中,頻譜值is,首先提高到原來的4/3次冪,補(bǔ)償編碼時的幅度衰減。之后再乘以符號位sign(is)。global_gain變量是每聲道中的全局量化步長?!?10”是一個系統(tǒng)常數(shù),保證合適的量化步長,同時也保證編碼過程中不會出現(xiàn)全“1”而擾亂同步字。在編碼器中比例因子采用對數(shù)量化的形式,步長為2或,用 scalefac_scale表示,若 scalefac_scale=O 則 scalefac_multiplier=0.5,否則 scalefae_multiplier=1。preflg和pretab只在長窗中有效。preflag是高頻預(yù)加重標(biāo)志,“1”表示采用高頻頇加重,pretab[sfb]的作用是查表得出每個頻率子帶的預(yù)加重值。scalefacse_l和scalefac_s對應(yīng)縮放因子解碼中所得出的長短窗的縮放因子。當(dāng)運(yùn)用短窗時,subblock_gain變量對應(yīng)子帶中更細(xì)的量化。變量win_switch_flag和block type確定是否重排序。
在MP3編碼算法的MDCT步驟中,長塊類型的頻域值按頻率由低到高排列;短塊類型的頻域值是按比例因子頻帶、頻率、窗的順序排列的。但是為了提高Huffman編碼效率,短塊類型的數(shù)據(jù)會重新排列,順序是比例因子頻帶、窗、頻率[5]。重排序不會改變頻率線的頻帶歸屬,即該頻帶內(nèi)的頻域值重排后仍屬于原來的比例因子頻帶。而且,該頻帶的第一條頻率線在重排后仍是第一條頻率線,最后一條頻率線在重排后仍是該頻帶的最后一條頻率線。
采用MS立體聲模式時,碼流中傳送的是中間/旁邊(middle/side)聲道值M/S,而不是左/右聲道L/R。當(dāng)左右聲道值L/R很接近時,如編碼公式(3)所示,計算得到的M值相當(dāng)于均值,而S值幾乎為0。因此當(dāng)2個聲道高度相關(guān)時,采用這種立體聲編碼模式可以減少編碼后的比特數(shù)[6]。
編碼公式如下所示,
解碼時,原始的左右聲道值UR的重建公式為:
在MS立體聲處理算法進(jìn)行硬件實現(xiàn)時,把式(4)進(jìn)行如下變換:
當(dāng)立體聲處理進(jìn)行到左右聲道的零值區(qū)重疊處時,此后的左右聲道頻率線值全部為0,可以無需繼續(xù)計算直接得到結(jié)果0,以減少數(shù)據(jù)計算量。
純長塊類型數(shù)據(jù)和混合塊類型的長塊部分需要進(jìn)行混疊重建。對于混合塊類型,前兩個子帶屬于長塊,因此只需做一組蝶形運(yùn)算。
對于純長塊類型的32個子帶,有31個子帶間隔,需要進(jìn)行三十一組運(yùn)算,即上個子帶的后8個頻域值和下個子帶的前8個頻域值進(jìn)行獨立的8次蝶形運(yùn)算。每次蝶形計算的輸入記為 xu、xd,輸出記為 xu′、xd′,計算公式如式(6)所示,其中的cs和ca參數(shù)由MP3音頻標(biāo)準(zhǔn)給出[7]。
屬于零值區(qū)的子帶無需進(jìn)行蝶形計算即可直接給出0值結(jié)果,因此混疊重建算法在硬件實現(xiàn)時,仍可以利用頻率線的零值區(qū)特性來減少數(shù)據(jù)運(yùn)算量。
IMDCT的變換公式為:
IMDCT是MDCT的反變換,是MP3解碼過程中的一個非常重要和運(yùn)算量極大的過程,它們在實際的硬件中的運(yùn)算量都非常的大,所以要對公式來進(jìn)行變形,以尋求一些快速算法。
在硬件實現(xiàn)中,我們選擇遞歸算法作為硬件實現(xiàn)IMDCT的方法。雖然遞歸算法簡單易實現(xiàn),但它的運(yùn)算量還是比較大,所以可以采用改進(jìn)的遞推算法以減少運(yùn)算量[8]。
優(yōu)化算法的推導(dǎo):
由三角函數(shù)的對稱性可知:y(n)=-y(N-1-N),n=0,1,…,M-1
因此,只需計算M點的 y(n),便可求出 x(n)。 這樣便減少了一半的運(yùn)算量。采用正弦遞歸的方法來計算u(n):
文中分析研究了整個MP3編解碼系統(tǒng)流程,然后對IMDCT選擇了宜于硬件實現(xiàn)的遞歸算法,并給出了基于遞歸算法的優(yōu)化算法,在減少硬件資源的同時保持了運(yùn)算速度。通過MATLAB仿真工具驗證,優(yōu)化算法完全正確。
[1]汪勇,熊前興.MP3文件格式解析[J].計算機(jī)應(yīng)用與軟件,2004(12):126-128.
WANG Yong,XIONG Qian-xing.MP3 file format analysis[J].Computer Application and Software,2004(12):126-128.
[2]劉宇.基于FPGA的MP3播放器的設(shè)計與實現(xiàn)[D].沈陽:東北大學(xué),2009.
[3]毛利萍.MP3音頻編解碼運(yùn)算中IMDCT算法研究及其FPGA實現(xiàn)[D].上海:華東師范大學(xué),2007.
[4]葉曉舟,鄧峰,曾學(xué)文,等.基于定點DSP的MP3解碼算法優(yōu)化與實現(xiàn)[J].計算機(jī)工程與應(yīng)用,2007,43(23):94-96.YE Xiao-zhou,DENG Feng,ZENG Xue-wen,et al.MP3 decoding optimization algorithm and implementation based on the fixed point DSP[J].Computer Engineering and Application,2007,43(23):94-96.
[5]張多利,杜伏慧,杜高明,等.MP3音頻解碼器的硬件設(shè)計與FPGA實現(xiàn)[J].中國科技論文在線精品論文,2009,2(18):1879-1883.
ZHANG Duo-li,DU Fu-hui,DU Gao-ming,et al.A case study on hardware architecture and FPGA prototype implementation of MP3 audio decoder[J].Highlights of Sciencepaper Online,2009,2(18):1879-1883.
[6]蘇祖輝.IMDCT在MPEG/Audio-1 LayerⅢ中的遞歸實現(xiàn)[D].合肥:合肥工業(yè)大學(xué),2005.
[7]蔣學(xué)鑫.MP3實時編解碼系統(tǒng)的研究與開發(fā)[D].成都:電子科技大學(xué),2007.
[8]鄧寧,周源華,郭凱.運(yùn)用遞歸算法實現(xiàn)共同的MDCT和IMDCT結(jié)構(gòu)[J].電聲技術(shù),2009,(2):5-7.
DENG Ning,ZHOU Yuan-hua,GUO Kai.Implementation of common MDCT and IMDCT structure with the recursive algorithm[J].Electroacoustic Technology,2009(2):5-7.