摘要:MPEG音頻層III壓縮算法,是由ISO11172-3標(biāo)準(zhǔn)規(guī)定的一種高效,、高保真的壓縮編碼算法,。由于層III壓縮算法的復(fù)雜度高,運(yùn)算量大,,為此提出了在實(shí)時(shí)應(yīng)用中,,基于數(shù)字信號(hào)處理器(Digital Signal Processor,以下簡(jiǎn)稱(chēng)DSP)實(shí)現(xiàn)層III壓縮算法的關(guān)鍵運(yùn)算的加速措施,。
1 概述
數(shù)字音頻壓縮技術(shù)給人們提供了一種更為有效的音頻存儲(chǔ),、傳輸方法。音頻壓縮的技術(shù)有很多種,,它們的復(fù)雜度,、音頻壓縮質(zhì)量、以及壓縮比都有很大的差別,。如:μ-law音頻壓縮算法,,其特點(diǎn)是簡(jiǎn)單,但壓縮比很低,,但音質(zhì)一般,。根據(jù)CCITTG.711建議,采用自然對(duì)數(shù)的量化過(guò)程,,在輸入幅度比較小的時(shí)候能夠提供比較大精度的量化,,而對(duì)于出現(xiàn)概率比較小的大幅度信號(hào),,量化噪聲相對(duì)而言則較大。這種量化方式使得8bit的數(shù)字量化信號(hào)在量化噪聲效果上等同于14bit的線性量化,。而ADPCM壓縮編碼則充分利用了相鄰的抽樣值幅度變化比較小的特點(diǎn),,編碼輸出結(jié)果是當(dāng)前抽樣值與預(yù)測(cè)值的差值。雖然ADPCM編碼的保真度較高,,但其壓縮比卻比較小,,只能夠達(dá)到4/1的壓縮比。改進(jìn)的ADPCM編碼方法有IMA (Interactive Multimedia Association)提出的改進(jìn)算法,,CCITT的G.721,,G.723建議等[1]。
MPEG(Motion Picture Expert Group)音頻壓縮標(biāo)準(zhǔn)提供了一種高保真度,,高壓縮比的壓縮算法,。在ISO11172-3標(biāo)準(zhǔn)中,描述了具有不同復(fù)雜度和性能的子帶音頻編碼方案,,以適應(yīng)各種高音質(zhì)數(shù)字音頻的應(yīng)用,。根據(jù)編碼計(jì)算復(fù)雜度及編碼效率的不同,分為層I,,層II和層III三種標(biāo)準(zhǔn),。
MPEG音頻標(biāo)準(zhǔn)最初來(lái)源于被分為四種類(lèi)型的算法草案,它們是音頻頻域感覺(jué)熵編碼ASPEC(Audio Spectral Perceptual Entropy Coding),,掩蔽模式通用子帶集成編碼與多路復(fù)用MUSICAM(Masking-pattern Universal Sub-band Integrated Coding and Multiplexing),,子帶ADPCM SB/ADPCM(Sub-Band Adaptive Difference PCM)。經(jīng)過(guò)一系列的客觀和主觀音質(zhì)測(cè)試,,考慮到不同比特率下的音質(zhì),,對(duì)傳輸比特錯(cuò)誤的敏感性,編碼/解碼復(fù)雜度,,以及編解碼延時(shí)等因素,,在大約100kbit/s低碼率下,ASPEC和MUSICAM表現(xiàn)出最好的音質(zhì)效果,。在低碼率(64kbit/s)時(shí),,ASPEC表現(xiàn)出更為出色的音質(zhì),而MUSICAM則在編碼解碼的復(fù)雜度和延時(shí)上略勝一籌,。根據(jù)ASPEC的若干算法,,對(duì) MUSICAM進(jìn)行改進(jìn),加大了計(jì)算復(fù)雜度,,但獲得了更好的壓縮比及音質(zhì),這就是ISO11172-3音頻層III的標(biāo)準(zhǔn),。
層I是最簡(jiǎn)單的一種算法,。如Philips公司的數(shù)字盒式錄音機(jī)DCC(DIGItal Compact Cassette)便是利用層I的壓縮算法,,其應(yīng)用的比特率為192kbit/s每通道。
層II具有中等的編碼復(fù)雜度,,適用比特率大約為128kbit/s每通道,。廣泛應(yīng)用于數(shù)字音頻廣播DAB(Digital Audio Broadcasting)的音頻編碼及視頻CD中。
層III是最復(fù)雜的編碼算法,,但是在相同的比特率下,,它所提供的音質(zhì)也是最好的。典型的比特率為64kbit/s,,最適合于ISDN上的音頻傳輸,。
1998年4月22日,APT(Audio Processing Technique)公司利用Apt-X100系統(tǒng),,通過(guò)ISDN線路,,成功地轉(zhuǎn)播了北京—東京—上海的“國(guó)際地球日”大型廣播音樂(lè)會(huì)。但是,,這次轉(zhuǎn)播占用了3條(即6個(gè)B)的ISDN線路,,以保證22kHz頻響的立體聲傳送,這是由于Apt-X100系統(tǒng)采用的是SB/ADPCM音頻壓縮方法[2],。然而,,如果使用MPEG層III音頻壓縮方法,只需要一條ISDN線路,,就可以實(shí)現(xiàn)22kHz頻響的立體聲傳送,。由于MPEG層III音頻壓縮編碼復(fù)雜度太高,運(yùn)算量太大,,難以用一般的DSP(Digital Signal Processor)單片實(shí)現(xiàn),,所以在目前的音響設(shè)備中很少使用這一算法。為了能用較低的成本實(shí)現(xiàn)MPEG層III這一高效音頻壓縮算法,,我們對(duì)這一算法進(jìn)行了全面分析,,提出了適用于DSP實(shí)現(xiàn)的編碼加速方案。
2 MPEG音頻層III壓縮編碼流程及特點(diǎn)
MPEG音頻層III壓縮編碼流程如圖1所示,,相對(duì)于層Ⅰ和層Ⅱ而言,,其特點(diǎn)在于:
圖1 MPEG音頻層Ⅲ編碼流程圖(單聲道模型)
(1)利用獨(dú)立于信號(hào)頻率及聲壓級(jí)的耳蝸擴(kuò)散函數(shù)(Cochlea spreading function)—Modified Rounded類(lèi)擴(kuò)散函數(shù),計(jì)算人耳聽(tīng)覺(jué)的掩蔽門(mén)限,。
(2)增加了MDCT模塊,,以提高頻率分辨率。
(3)通過(guò)控制環(huán),,對(duì)非均勻量化率進(jìn)行迭代分配,,以保持相對(duì)恒定的信噪比。并且,采用不定長(zhǎng)熵編碼—Huffman編碼,,對(duì)量化后的各子帶信號(hào)可以獲得更好的數(shù)據(jù)壓縮比,。
將層III編碼算法流程分成:(1)時(shí)頻映射,(2)心理聲學(xué)模型,,(3)量化編碼等三大功能塊,。時(shí)頻映射中,是多相混合濾波器組(Polyphase/MDCT Hybrid Filter Bank)的計(jì)算,,這是較規(guī)范的計(jì)算,,其運(yùn)算量是可計(jì)算的。而且有各種快速算法,,以降低運(yùn)算復(fù)雜度,。心理聲學(xué)模型的計(jì)算,主要運(yùn)算量集中在1024點(diǎn)和256點(diǎn)的FFT,。不過(guò),,這是比較標(biāo)準(zhǔn)的計(jì)算過(guò)程,無(wú)論用哪種FFT都可以精確估計(jì)其運(yùn)算復(fù)雜度,。而量化編碼是通過(guò)迭代循環(huán)來(lái)完成,,其循環(huán)控制變量是不確定的,再加上Huffman碼表的查找表過(guò)程,,使其運(yùn)算量和復(fù)雜度難以預(yù)測(cè)和估計(jì),。因此,我們認(rèn)為:量化編碼部分的規(guī)范化是優(yōu)化MPEG音頻層III編碼的突破點(diǎn),。
層III編碼器迭代循環(huán)與量化編碼部分完成的功能是:將子帶濾波和MDCT變換后的樣值進(jìn)行量化并根據(jù)心理聲學(xué)模型的計(jì)算結(jié)果進(jìn)行量化噪聲的控制,,使得在一定比特率要求的情況下完成頻域信號(hào)的Huffman編碼。層III量化編碼部分的迭代循環(huán)分為內(nèi)循環(huán)和外循環(huán),,參考文獻(xiàn)[1]中FigureC.9.a,,C.9.b,C.9.c給出了量化編碼的迭代循環(huán)流圖,。
3 用DSP實(shí)現(xiàn)音頻層III壓縮的主要問(wèn)題及解決方案
DSP編程并不提供像C語(yǔ)言一樣的靈活指針,、數(shù)組尋址操作。在用DSP實(shí)現(xiàn)音頻層III壓縮中的迭代循環(huán)量化編碼時(shí),,由于涉及到非規(guī)則性的大量數(shù)組尋址操作,,而消耗大量指令,降低了DSP的利用率,,抑制了編碼的實(shí)時(shí)實(shí)現(xiàn),。因此,不規(guī)則的類(lèi)似表查詢(xún)指令,,需要經(jīng)過(guò)很好的組織才能夠使程序結(jié)構(gòu)清楚,,簡(jiǎn)潔,,高效。
3.1 Huffman編碼的多重地址索引
層III編碼中的Huffman編碼是一個(gè)窮舉,、查表的過(guò)程,。在參考文獻(xiàn)[1]表B.7中列出了用于層III編碼的32個(gè)Huffman碼表。它們的最大值域范圍,,碼表適用的信號(hào)統(tǒng)計(jì)特性都不相同。在編碼過(guò)程中,,首先找到能夠?qū)⑺幋a區(qū)域樣值的最大值,,并依次查詢(xún)各個(gè)Huffman碼表,直到該碼表能夠?qū)@一最大值進(jìn)行編碼為止,,然后計(jì)算用該表進(jìn)行編碼所需的比特?cái)?shù),。再?lài)L試相同編碼值域范圍的另一些碼表,找到最小比特?cái)?shù)需求的碼表進(jìn)行最后的編碼,。
由于標(biāo)準(zhǔn)中所提供的32個(gè)表中,,并非所有的表都能用,而且有大量的碼表只是linbits不同,。因此如何存儲(chǔ)這些碼表,,并能夠很方便地進(jìn)行查詢(xún)、編碼,,是編碼過(guò)程中很關(guān)鍵的問(wèn)題之一,。但提出的“多級(jí)索引”方法可以很好地的解決這一問(wèn)題。過(guò)程如圖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ù)是相同的,。通過(guò)這樣的多級(jí)碼表地址索引可以很好的解決程序的模塊化實(shí)現(xiàn)。
3.2 層III編碼迭代循環(huá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)過(guò)實(shí)際的實(shí)驗(yàn)結(jié)果,,一般初始可獲得比特?cái)?shù)大約為700bits/Granule,,而初始的量化編碼結(jié)果一般在5000bits以上,。如果再次量化步長(zhǎng)加上20,可以迅速地逼近所要求的比特?cái)?shù),。表1列出了一種我們使用的可能加速逼近方法,。
表1 一種可能的迭代循環(huán)加速方法
在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)的加速”方案,,通過(guò)ADSP2181定點(diǎn)芯片的運(yùn)算,表明該方案能減少2/3的指令周期,。