近年來(lái),電子技術(shù)的迅猛發(fā)展,使得嵌入式系統(tǒng)在越來(lái)越廣泛的領(lǐng)域得到應(yīng)用。嵌入式系統(tǒng)平臺(tái)的功能也越來(lái)越強(qiáng)大,復(fù)雜度也越來(lái)越高,同時(shí)對(duì)其開(kāi)發(fā)的難度和要求也越來(lái)越高。在開(kāi)發(fā)過(guò)程中需要將應(yīng)用軟件和系統(tǒng)軟件作為一個(gè)整體考慮,而且軟件和硬件的聯(lián)系也更加密切。所以,嵌入式系統(tǒng)的開(kāi)發(fā)是一個(gè)復(fù)雜的過(guò)程。隨著嵌入式系統(tǒng)性能的大幅度提高,老式的GPS導(dǎo)航儀已開(kāi)始向嵌入式方向發(fā)展。嵌入式GPs導(dǎo)航儀已越來(lái)越便攜,功能越來(lái)越強(qiáng)大,語(yǔ)音導(dǎo)航和媒體功能已成為嵌入式GPS導(dǎo)航儀的一大突出的亮點(diǎn)。所以,MP3音頻解碼與播放技術(shù)現(xiàn)已成為嵌入式GPS導(dǎo)航系統(tǒng)中的一項(xiàng)基本技術(shù)。MP3的全稱(chēng)是MPEG Audio Layer 3,是目前流行的一種音頻編碼方案。它是1992年制定的MPEG-1標(biāo)準(zhǔn)的一部分,MPEG標(biāo)準(zhǔn)由系統(tǒng)、視頻和伴音三部分組成。其中伴音標(biāo)準(zhǔn)共分三層,MP3作為其中的第三層,是運(yùn)算復(fù)雜度最高而壓縮效果最好的一層。比起傳統(tǒng)的CD格式來(lái),其音效已相差無(wú)幾,但數(shù)據(jù)量卻不及CD的十分之一。同時(shí),MP3播放器的便攜性和續(xù)航能力都比CD有大幅度的提高。MP3最初應(yīng)用于數(shù)字音頻廣播以及數(shù)字電視伴音等;之后,隨著其流行程度的提高,在其他場(chǎng)合,尤其是互聯(lián)網(wǎng)音樂(lè)和便攜式娛樂(lè)設(shè)備上也開(kāi)始大量使用MP3格式;現(xiàn)在,幾乎所有便攜式語(yǔ)音導(dǎo)航設(shè)備都采用MP3作為其音頻媒體格式。本文主要介紹了基于ARM核心的嵌入式GPS導(dǎo)航系統(tǒng)平臺(tái)下MP3音頻文件的解碼技術(shù)。以便利用自行設(shè)計(jì)的方案在Windows CE.NET系統(tǒng)下運(yùn)用三星公司S3C2410平臺(tái),從而實(shí)現(xiàn)MP3的解碼播放功能。 1 MP3解碼原理 1.1 MP3的文件格式 MP3文件由數(shù)量不等且相互獨(dú)立的幀(frame)組成,每個(gè)幀包含1152個(gè)采樣信息,一個(gè)MP3每幀包含幀頭、錯(cuò)誤校驗(yàn)、音頻數(shù)據(jù)和輔助數(shù)據(jù)四部分。圖1所示是MP3的幀結(jié)構(gòu)示意圖。MP3文件的最后128字節(jié)通常包含有ID3v1標(biāo)簽,并附加有用戶定制的文件附加內(nèi)容,如歌曲名稱(chēng)、演唱者、風(fēng)格說(shuō)明等。 1.2 MP3解碼流程 原始PCM(脈沖編碼調(diào)制)音頻數(shù)據(jù)在經(jīng)過(guò)壓縮編碼之后將得到MP3碼流,MP3解碼就是把MP3碼流恢復(fù)成原始的PCM數(shù)據(jù)。MP3數(shù)據(jù)以幀為單位,解碼應(yīng)首先根據(jù)同步信息及錯(cuò)誤校驗(yàn)CRC模塊找出MP3幀在碼流中的位置,并由此確定幀頭、CRC校驗(yàn)、音頻數(shù)據(jù)及輔助數(shù)據(jù)的所在位置。 圖2所示是MP3的解碼流程,它主要包括哈夫曼解碼、反量化、反重排序、立體聲解碼、混疊消除、IMDCT、頻率反轉(zhuǎn)補(bǔ)償、子帶合成濾波等。圖2中的預(yù)處理的作用是讀取頭部數(shù)據(jù)并將需要的信息按結(jié)構(gòu)存放起來(lái),以便后續(xù)解碼。 哈夫曼解碼時(shí),MP3的音頻數(shù)據(jù)將分為兩節(jié)(gxanule),這兩節(jié)在過(guò)程編解碼時(shí)相對(duì)獨(dú)立,每一節(jié)中可以解碼出576個(gè)PCM采樣數(shù)據(jù),兩節(jié)可解出1152個(gè)采樣數(shù)據(jù)。從二進(jìn)制101……碼流中得到我們所需要的信息的第一步就是解哈夫曼碼。解哈夫曼碼是一個(gè)查表過(guò)程,這576個(gè)值代表576個(gè)頻率線上的值,其在不同的塊中(如)有不同的含義,可根據(jù)不同的比例因子和頻帶查找相應(yīng)的碼表并解出576個(gè)值。 反量化過(guò)程就是根據(jù)反量化公式和幀邊信息來(lái)對(duì)于長(zhǎng)塊、短塊和混合塊采用不同的反量化公式,以恢復(fù)576條頻率線的真實(shí)值。反重排序的作用是為了讓MP3編碼器使霍夫曼編碼更加有效率,而對(duì)某些塊進(jìn)行重排序。立體聲解碼部分的功能是在兩個(gè)音頻通道非獨(dú)立編碼時(shí),進(jìn)行立體聲解碼。 混疊消除是為了避免兩個(gè)相鄰子頻帶之間的混疊,而在解碼過(guò)程中進(jìn)行的混疊消除。IMDCT的作用首先是對(duì)長(zhǎng)塊進(jìn)行18點(diǎn)到36點(diǎn)的IMDCT變換,并對(duì)短塊進(jìn)行3個(gè)G點(diǎn)到12點(diǎn)的IMDCT變換;其次是根據(jù)塊類(lèi)型的不同,分別使用不同的窗類(lèi)型進(jìn)行加窗。同時(shí)把這36個(gè)值的前半部分與上一幀的后半部分相疊加。而把當(dāng)前塊的后半部分存儲(chǔ)起來(lái)用于和下一塊疊加。頻率反轉(zhuǎn)補(bǔ)償是在進(jìn)入下一步之前對(duì)多項(xiàng)濾波器組進(jìn)行的頻率反轉(zhuǎn)補(bǔ)償,即對(duì)奇數(shù)子帶的奇數(shù)時(shí)間樣點(diǎn)取反。 子帶合成濾波是將32個(gè)等頻帶寬內(nèi)的頻域信號(hào)反變換成時(shí)域信號(hào),然后再經(jīng)過(guò)加窗運(yùn)算,以得到32個(gè)PCM值。 2 硬件設(shè)計(jì) 2.1 系統(tǒng)硬件設(shè)計(jì) 在處理器的選擇上,本系統(tǒng)選用SAMSUNG公司的S3C2410。它是基于ARM920T內(nèi)核的16/32位精簡(jiǎn)指令集微控制器,是為手持設(shè)備和通用設(shè)備提供的一款低成本、高效率的微控制器。整個(gè)系統(tǒng)硬件的設(shè)計(jì)過(guò)程中主要應(yīng)用S3C2410 ARM芯片,存儲(chǔ)設(shè)備外擴(kuò)SD或MMC存儲(chǔ)卡模塊,并外接320x240象素的真彩TFT LCD屏進(jìn)行顯示,操控采用四線電阻觸摸屏并輔以GPIO外擴(kuò)的鍵盤(pán)。 2.2 音頻硬件設(shè)計(jì) IIS(Inter-IC Sound)總線是Philips公司提出的串行數(shù)字音頻總線協(xié)議。它是一種面向多媒體應(yīng)用的音頻總線,專(zhuān)用于音頻設(shè)備之間的數(shù)據(jù)傳輸,即把PCM音頻數(shù)據(jù)傳至標(biāo)準(zhǔn)編解碼器(CODEC)。IIS總線只處理聲音數(shù)據(jù),其他信號(hào)(如控制信號(hào))必須單獨(dú)傳輸。為了使電路的引出引腳盡可能少,IIS只使用了3條串行總線,即提供分時(shí)復(fù)用功能的數(shù)據(jù)線、左右聲道選擇線和時(shí)鐘信號(hào)線。 CODEC芯片主要負(fù)責(zé)模擬信號(hào)和數(shù)字信號(hào)的相互轉(zhuǎn)換。對(duì)于本系統(tǒng)來(lái)說(shuō),更加關(guān)心的是將數(shù)字PCM信號(hào)換為模擬信號(hào),主要是將要播放的文件的音頻數(shù)字信號(hào)通過(guò)SC2410的IIS送給CODEC芯片,然后將其轉(zhuǎn)換為模擬信號(hào),進(jìn)而通過(guò)音箱或者耳機(jī)等設(shè)備輸出。 根據(jù)采樣定理,采樣頻率至少要是信號(hào)頻率的2倍以上,再就是要支持IIS接口標(biāo)準(zhǔn),因?yàn)楸鞠到y(tǒng)是通過(guò)IIS總線向CODEC芯片傳輸數(shù)據(jù)的。在本系統(tǒng)的CODEC選用Philips公司的U-DA1341,該芯片采用3.0 V電壓供電,并對(duì)ADC和DAC分別供電,系統(tǒng)的時(shí)鐘頻率可選256fs、348fs和512fs,采樣頻率從16 kHz到48 kHz,由于是采用數(shù)字音質(zhì)控制,因此具有重低音效果,并支持IIS總線,可確保高保真的立體聲輸出。圖3所示是UDA1341的工作原理框圖。 整個(gè)音頻系統(tǒng)的硬件設(shè)計(jì)主要是S3C2410的IIS總線接口和CODEC的連接與實(shí)現(xiàn)。其具體電路如圖4所示。本系統(tǒng)采用Philips基于IIS音頻總線的UDA1341型音頻CODEC芯片。該CODEC支持ⅡS總線數(shù)據(jù)格式,并采用位元流轉(zhuǎn)換技術(shù)進(jìn)行信號(hào)處理,具有可編程增益放大器(PGA)和數(shù)字自動(dòng)增益控制器(AGC)。 S3C2410內(nèi)置IIS總線接口,可直接外接8/16比特的立體聲CODEC,還可以給FIFO通道提供DMA傳輸模式而非中斷模式,從而使數(shù)據(jù)發(fā)送和接收同時(shí)進(jìn)行。該IIS接口有3種工作方式,可以通過(guò)設(shè)置IIS的CON寄存器來(lái)選擇。本文介紹的硬件框架主要基于傳輸和接收模式。在這種模式下,IIS數(shù)據(jù)線將通過(guò)雙通道DMA同時(shí)接收和發(fā)送音頻數(shù)據(jù),其DMA服務(wù)請(qǐng)求可由FIFO只讀寄存器自動(dòng)完成。 圖4中,S3C2410的IIS總線信號(hào)與UDA1341的IIS信號(hào)直接相連,L3接口引腳L3MODE、L3CLOCK和L3DATA分別連接到S3-C2410的GP-B1、GPB2和GPB3三個(gè)通用數(shù)據(jù)輸出引腳。U-DA1341對(duì)外可提供兩組音頻信號(hào)輸入接口,每組包括左右2個(gè)聲道。 3 軟件設(shè)計(jì) 3.1 系統(tǒng)平臺(tái)的選擇 目前主流的嵌入式平臺(tái)主要有嵌入式Linux和Windows CE兩大系列。 Linux是一個(gè)類(lèi)似于Unix的操作系統(tǒng)。它起源于芬蘭一個(gè)名為L(zhǎng)inus Torvalds的業(yè)余愛(ài)好者,但是現(xiàn)在已經(jīng)是最為流行的一款開(kāi)放源代碼的免費(fèi)操作系統(tǒng)。Linux從1991年問(wèn)世到現(xiàn)在,已發(fā)展成為一個(gè)功能強(qiáng)大、設(shè)計(jì)完善的操作系統(tǒng)。伴隨著網(wǎng)絡(luò)技術(shù)進(jìn)步而發(fā)展起來(lái)的Linux OS已成為Mi-crosoft公司W(wǎng)indows系統(tǒng)的強(qiáng)勁對(duì)手。Linux系統(tǒng)不僅能夠運(yùn)行于PC平臺(tái),還可在嵌入式系統(tǒng)方面大放光芒,很多嵌入式平臺(tái)都用Linux作為其操作系統(tǒng)。 Windows CE是微軟開(kāi)發(fā)的一個(gè)開(kāi)放的、可升級(jí)的32位嵌入式實(shí)時(shí)操作系統(tǒng)。其中CE中的C代表袖珍(Compact)、消費(fèi)(Consumer)、通信能力(Connectivity)和伴侶(Companion);E則代表電子產(chǎn)品(Electronics)。不同于面向桌面的Windows,微軟重寫(xiě)了Windows CE的內(nèi)核,這使得WindowsCE擁有優(yōu)越的實(shí)時(shí)性能。Windows CE中的API是一個(gè)縮減的WIN32 API,它是桌面Windows系統(tǒng)的一個(gè)子集。這使得許多基于微軟桌面Windows開(kāi)發(fā)的應(yīng)用程序可以經(jīng)過(guò)少許的改動(dòng)就能用于Windows CE中。同時(shí),在Windows CE系統(tǒng)平臺(tái)上,也可以使用桌面Windows上的編程工具語(yǔ)言(如VB、VC++等),并使用同樣的函數(shù)和同樣的界面風(fēng)格.因此,其開(kāi)發(fā)工作比較容易上手?紤]到大部分用戶多年來(lái)使用Windows系列操作系統(tǒng)的習(xí)慣.Windows CE的界面風(fēng)格比較容易讓用戶接受。 綜上所述.本文選擇Windows CE作為系統(tǒng)的開(kāi)發(fā)平臺(tái),開(kāi)發(fā)工具選擇VS系列的EVC。 3.2 軟件流程 圖5所示是MP3解碼的軟件流程圖。首先將MP3文件數(shù)據(jù)讀人緩存,尋找文件中的ID3信息(ID3信息指MP3文件中可選的一種內(nèi)嵌信息,用于表示MP3的音頻類(lèi)型、作者等,目前分ID3vl和I。D3v2兩個(gè)版本),接著在文件中尋找?guī)筋^,找到后即進(jìn)入幀解碼子程序,其幀解碼的具體流程如圖6所示,解碼完成后,再將解碼出的PCM數(shù)據(jù)放入音頻緩沖進(jìn)行播放,如此循環(huán)直到最后一幀。 按鍵編碼電路采用二極管組合邏輯開(kāi)關(guān)陣列來(lái)實(shí)現(xiàn)對(duì)受控電路開(kāi)關(guān)進(jìn)行編址,其中指令編碼電路采用編譯碼芯片組PT2262。PT2262的A口是地址碼設(shè)置口,D口是數(shù)據(jù)碼設(shè)置端,分別和二極管組合邏輯開(kāi)關(guān)陣列的邏輯輸出相連,數(shù)據(jù)從000~101有6種狀態(tài)。發(fā)射模塊電路中采用的射頻芯片為MICRF1020當(dāng)編碼芯片PT2262的數(shù)據(jù)輸出端無(wú)信號(hào)輸出時(shí),MICRF102不工作,發(fā)射電流為零,而當(dāng)PT2262的控制端有效時(shí),輸出的串行脈沖信號(hào)對(duì)MICRF102進(jìn)行調(diào)制發(fā)射,通過(guò)調(diào)制電阻R2可調(diào)整發(fā)射電流,從而調(diào)整發(fā)射距離,較小的R2取值可提高發(fā)射距離,而增加二極管開(kāi)關(guān)陣列則可將系統(tǒng)擴(kuò)展成為多路遙控發(fā)射模塊。 3.2 接收控制電路 接收控制系統(tǒng)主要由無(wú)線電接收電路、解碼電路、單片機(jī)電路、開(kāi)關(guān)電路組成。接收控制系統(tǒng)的電路原理圖如圖6所示。接收控制系統(tǒng)主要完成的功能是對(duì)接收進(jìn)來(lái)的信號(hào)進(jìn)行解調(diào)和解碼,并將解碼后的數(shù)據(jù)送單片機(jī),由單片機(jī)根據(jù)此數(shù)據(jù)去控制相應(yīng)的開(kāi)關(guān)進(jìn)行動(dòng)作。 4 結(jié)束語(yǔ) 本文提出了一種在嵌入式GPS語(yǔ)音導(dǎo)航系統(tǒng)中實(shí)現(xiàn)MP3音頻播放的實(shí)現(xiàn)方案,給出了解碼步驟,并利用S3C2410核心與Windows CE平臺(tái)完成了這一方案。經(jīng)過(guò)實(shí)際產(chǎn)品驗(yàn)證,該解碼器播放效果良好。各項(xiàng)指標(biāo)均可滿足要求。 |