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

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

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