用DSP實(shí)現(xiàn)MPEG音頻層III壓縮的加速方法
層III編碼中的Huffman編碼是一個(gè)窮舉、查表的過程。在參考文獻(xiàn)[1]表B.7中列出了用于層III編碼的32個(gè)Huffman碼表。它們的最大值域范圍,碼表適用的信號(hào)統(tǒng)計(jì)特性都不相同。在編碼過程中,首先找到能夠?qū)⑺幋a區(qū)域樣值的最大值,并依次查詢各個(gè)Huffman碼表,直到該碼表能夠?qū)@一最大值進(jìn)行編碼為止,然后計(jì)算用該表進(jìn)行編碼所需的比特?cái)?shù)。再嘗試相同編碼值域范圍的另一些碼表,找到最小比特?cái)?shù)需求的碼表進(jìn)行最后的編碼。
由于標(biāo)準(zhǔn)中所提供的32個(gè)表中,并非所有的表都能用,而且有大量的碼表只是linbits不同。因此如何存儲(chǔ)這些碼表,并能夠很方便地進(jìn)行查詢、編碼,是編碼過程中很關(guān)鍵的問題之一。但提出的“多級(jí)索引”方法可以很好地的解決這一問題。過程如圖2所示。對(duì)可能的表有不同的處理方式:

圖2 Huffman編碼的多重地址索引
正常表 如表15,即每一級(jí)索引都是對(duì)應(yīng)于表15的各項(xiàng)信息。
無(wú)效表 如表14,其最終的指向是碼表零,即相當(dāng)于無(wú)效表。
雷同表 如表16和17實(shí)際上只是在第II級(jí)索引的linbits不同,其最后的Huffman數(shù)據(jù)是相同的。通過這樣的多級(jí)碼表地址索引可以很好的解決程序的模塊化實(shí)現(xiàn)。
在迭代循環(huán)編碼部分,對(duì)于使用標(biāo)準(zhǔn)中所建議的初始量化常數(shù)進(jìn)行量化和編碼時(shí),初始比特?cái)?shù)要求要遠(yuǎn)遠(yuǎn)大于所允許的上限值。這時(shí),如果只是將步長(zhǎng)加一進(jìn)行再次量化編碼,將會(huì)使得系統(tǒng)效率大大地降低。
經(jīng)過實(shí)際的實(shí)驗(yàn)結(jié)果,一般初始可獲得比特?cái)?shù)大約為700 bits/Granule,而初始的量化編碼結(jié)果一般在5 000 bits以上。如果再次量化步長(zhǎng)加上20,可以迅速地逼近所要求的比特?cái)?shù)。表1列出了一種我們使用的可能加速逼近方法。

在AD(Analog Device)公司的定點(diǎn)DSP芯片ADSP2181上實(shí)際的運(yùn)算結(jié)果表明,這種加速方法能夠?qū)⒃惴ǖ闹噶钸\(yùn)算周期減少2/3左右。
4 結(jié)束語(yǔ)
MPEG音頻層III壓縮標(biāo)準(zhǔn)是一種高效、高保真的壓縮編碼算法,但由于其復(fù)雜度和運(yùn)算量較高,很難用一般的DSP實(shí)時(shí)實(shí)現(xiàn)。在對(duì)該算法進(jìn)行全面分析的基礎(chǔ)上,提出了在用DSP實(shí)現(xiàn)時(shí),降低復(fù)雜度、提高DSP運(yùn)算效率的關(guān)鍵是優(yōu)化循環(huán)迭代量化編碼。提出“Huffman編碼的多重地址索引”,對(duì)非規(guī)則性的大量數(shù)組尋址操作提供了簡(jiǎn)明清晰的線條,節(jié)省了尋址指令,提高了DSP的利用率。進(jìn)一步還提出了“迭代循環(huán)的加速”方案,通過ADSP2181定點(diǎn)芯片的運(yùn)算,表明該方案能減少2/3的指令周期。
評(píng)論