朱彩霞
(淮安信息職業(yè)技術(shù)學(xué)院 電子工程學(xué)院,江蘇 淮安 223003)
隨著人們對(duì)于便攜播放的需求越來(lái)越高和集成電路生產(chǎn)工藝的越來(lái)越精密,采用軟硬件協(xié)調(diào)的方法實(shí)現(xiàn)超低功耗音頻解碼已成為一種趨勢(shì)。目前,大部分的MP3解碼和WMA解碼都是使用DSP實(shí)現(xiàn),該方法的缺點(diǎn)是軟件開(kāi)發(fā)難度大、功耗也比較大。采用純硬件實(shí)現(xiàn)的缺點(diǎn)在于格式擴(kuò)展不方便、設(shè)計(jì)周期長(zhǎng)和文件兼容性不夠。ARM7TDMI具有成本低、功耗低、代碼密度高和容易開(kāi)發(fā)等特點(diǎn)。硬件設(shè)計(jì)具有低功耗、低成本等優(yōu)點(diǎn),其缺點(diǎn)是一旦生產(chǎn)就不可更改,所以一般設(shè)計(jì)都是把沒(méi)有兼容性需求、計(jì)算量大的部分采用硬件設(shè)計(jì),而有兼容性需求的部分采用軟件設(shè)計(jì)[1]。
WMA是微軟公司提出的一種音頻標(biāo)準(zhǔn),是Microsoft Windows Media技術(shù)中的一部分,它包含了對(duì)音頻格式的一個(gè)完整定義,包括音頻編碼和加密。相比于MP3,它具有更好的高頻音質(zhì)和更低的壓縮率,相比于AAC,它具有更高的接受度[2],又因?yàn)閃MA具有DRM版權(quán)保護(hù),所以具有更好的市場(chǎng)價(jià)值。
圖1給出了WMA的解碼過(guò)程,通過(guò)游程解碼(Run-Level Decoder)和控制信息解碼得到殘差系數(shù),反量化(Inverse Quantizer)后得到頻域系數(shù),噪聲產(chǎn)生模塊用于生成舒適噪聲以改善頻域過(guò)于集中時(shí)候的音質(zhì),多聲道變換得到立體聲的雙聲道單獨(dú)系數(shù),最后通過(guò)反重疊變換(Inverse MLT)得到時(shí)域音頻信號(hào)[3]。
圖1 WMA的解碼過(guò)程
在圖1中,Run-Level Decoder和Inverse MLT部分采用硬件實(shí)現(xiàn),其它部分采用軟件實(shí)現(xiàn)。Run-Level Decoder的運(yùn)算單位都是BIT,ARM7的指令運(yùn)算單位都是字節(jié),用軟件的方式會(huì)浪費(fèi)功耗。Inverse MLT 類(lèi)似FFT運(yùn)算,該步驟在整個(gè)WMA解碼中占大約40%的MIPS,采用硬件會(huì)大大減少功耗[4]。
WMA解碼的設(shè)計(jì)過(guò)程如圖2所示。
圖2 WMA解碼的設(shè)計(jì)圖
ARM7上運(yùn)行的系統(tǒng)軟件采用UCOS-II + UCFS,采用FAT32文件系統(tǒng),WMA存儲(chǔ)在SD卡中,解碼器首先讀出WMA文件,進(jìn)行ASF頭解析,判斷其是否為正確的WMA文件,如果是,則繼續(xù)解析ASF頭、Packet、Frame和SubFrame等。
游程解碼的讀碼流文件的過(guò)程如表1所示。
讀比特的過(guò)程和游程解碼VLC采用硬件設(shè)計(jì),RLD解碼器具有兩種功能:一種是ShowBits和GetBits,ShowBits是查看nLength長(zhǎng)度比特的數(shù)值,不移動(dòng)硬件bitstream的指針,GetBits是讀取nLength長(zhǎng)度比特的數(shù)值并且移動(dòng)硬件bitstream的指針;另一種功能是自動(dòng)解碼VLC的系數(shù),解碼系數(shù)自動(dòng)寫(xiě)到SRAM。
在解碼WMA文件時(shí),首先讀出SD卡中的WMA文件,因?yàn)閃MA文件是ASF格式封裝的,而MP3/FLAC/APE等文件都不是ASF文件,所以通過(guò)文件前四個(gè)字節(jié)可以檢測(cè)文件是否確實(shí)是WMA格式的文件,防止錯(cuò)誤文件解碼。正確文件解碼開(kāi)始首先通過(guò)AHB填寫(xiě)256個(gè)字節(jié)到RLD的內(nèi)部RAM,稱(chēng)為初始化過(guò)程。
讀比特的過(guò)程如下:
uint_32 bs_read( sint_32 i_count )
{
DEC_BSI_UVLC_CTL_REG = (4<<6) | (i_count<<1) | 1 ;
do{
status = DEC_BSI_UVLC_STA_REG ;
}while( (status&1)==0) ;
return (status>>8) ;
}
uint_32 bs_show( sint_32 i_count )
{
DEC_BSI_UVLC_CTL_REG = (5<<6) | (i_count<<1) | 1 ;
do{
status = DEC_BSI_UVLC_STA_REG ;
}while( (status&1)==0) ;
return (status>>8) ;
}
表1 游程解碼語(yǔ)法描述
Run-Level Decoder解碼的流程如圖3所示。
圖3 Run-Level Decoder解碼
首先CPU通過(guò)AHB接口填寫(xiě)256個(gè)字節(jié)數(shù)據(jù)到RLD的內(nèi)部RAM,ShowBits和GetBits時(shí),只需要配置一個(gè)寄存器,然后讀取狀態(tài)寄存器,內(nèi)部運(yùn)算完成后,讀取數(shù)據(jù)寄存器的內(nèi)容,每次最多讀取24Bit;
在殘差系數(shù)VLD解碼時(shí),解碼過(guò)程不需要CPU干涉,由CPU配置num_coded_coeff參數(shù)到寄存器,然后啟動(dòng)VLD解碼器,軟件處于等待狀態(tài),如果256個(gè)字節(jié)數(shù)據(jù)用完,內(nèi)部硬件設(shè)置標(biāo)志位并暫停解碼,CPU根據(jù)狀態(tài)寄存器標(biāo)志位重新填寫(xiě)256個(gè)字節(jié),直到硬件解碼完畢。VLD硬件解碼首先初始化RAM輸出,全部寫(xiě)0,然后將解碼數(shù)據(jù)寫(xiě)到RAM中,由CPU來(lái)讀取。
LMIT解碼功能示意圖見(jiàn)圖4。
圖4 IMLT解碼功能示意圖
IMLT解碼包含兩個(gè)部分,DCT-IV和加窗計(jì)算。其中DCT-IV的計(jì)算是主要部分,使用了兩個(gè)模塊,IMLT根據(jù)CPU配置輸入和輸出的RAM地址,到系統(tǒng)RAM中讀取輸入,把DCT-IV計(jì)算后的結(jié)果寫(xiě)到輸入RAM中,加窗計(jì)算從輸出RAM的讀取數(shù)據(jù),計(jì)算完成后寫(xiě)回輸出RAM。
DCT-IV的數(shù)學(xué)表達(dá)如下:
for0≤N<2n
在計(jì)算的時(shí)候采用快速算法,首先進(jìn)行preTwiddle,該模塊是把輸入數(shù)據(jù)進(jìn)行FFT轉(zhuǎn)換,計(jì)算復(fù)數(shù)輸入,然后繼續(xù)FFT運(yùn)算,最后調(diào)用postTwiddle把FFT運(yùn)算的結(jié)果轉(zhuǎn)換為DCT-IV的輸出,這些運(yùn)算的中間結(jié)果都存儲(chǔ)輸出RAM中。
圖5為IMLT硬件解碼圖,其中DCT_IV_CTRL是總體控制模塊,負(fù)責(zé)和CPU交互,模塊內(nèi)部包含解碼控制狀態(tài)機(jī),用于啟動(dòng)和停止四個(gè)流程的模塊,在四個(gè)模塊的工作全部完成后,產(chǎn)生中斷通知CPU。四個(gè)模塊都是采用狀態(tài)機(jī)設(shè)計(jì),每個(gè)模塊之間沒(méi)有關(guān)系,數(shù)據(jù)的存取都是來(lái)自RAM,這樣可以最大限度的實(shí)現(xiàn)模塊化設(shè)計(jì)。
圖5 IMLT硬件解碼圖
實(shí)驗(yàn)過(guò)程中測(cè)試了大約10個(gè)文件,每個(gè)文件大約在4分鐘,以對(duì)ARM7的時(shí)鐘需求為分析標(biāo)準(zhǔn),實(shí)驗(yàn)分析的結(jié)果如表2所示。芯片功耗在同等面積下與芯片工作頻率的成正比,降低芯片工作頻率是優(yōu)化功耗最快的方法,該項(xiàng)設(shè)計(jì)達(dá)到了降低系統(tǒng)功耗的目的。
表2 硬件優(yōu)化比較
本文采用ARM7為CPU,結(jié)合游程解碼和DCT-IV硬件計(jì)算單元,降低WMA解碼的功耗,為實(shí)現(xiàn)便攜式音頻解碼SOC提供了一種開(kāi)發(fā)速度快、可擴(kuò)展性強(qiáng)的方法。另外,在后續(xù)的研究中,音頻格式MP3/FLAC/APE等解碼將全部共享RAM,因此在多格式音頻解碼時(shí),該方法能夠更好地降低系統(tǒng)成本。
參考文獻(xiàn):
[1] Charles D,Murphy,K.Anandakumar.Real-Time MPEG-1 Audio Coding and Decoding on a DSP Chip[J].Trans.on Consumer Electronics,1997,43(1):347-353.
[2] 周錦峰,倪光南.低功耗MP3解碼器設(shè)計(jì)及其可測(cè)性報(bào)告[D].北京:中國(guó)科學(xué)院計(jì)算技術(shù)研究所,2003.
[3] 張海濱,李揮.基于S3C2410的WMA開(kāi)源解碼程序優(yōu)化[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(1):13-15.
[4] Pramod,Kumar,Meher.LUT optimization for memory-based computation[J].IEEE Transaction on Circuits and System,2010,57(4):285-289.