基于dsp的多功能mp3播放器設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩59頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  題目 基于DSP的MP3播放器設(shè)計(jì)</p><p><b>  一 技術(shù)指標(biāo)</b></p><p><b>  表一 技術(shù)指標(biāo)</b></p><p><b>  二 功能描述</b></p><p><b>  表二 功能

2、描述</b></p><p><b>  三 方案論證</b></p><p><b>  1 硬件要求</b></p><p>  預(yù)期的MP3播放器的目標(biāo)系統(tǒng)硬件要求實(shí)現(xiàn)以下功能:</p><p>  · 能夠存儲(chǔ)一定量的MP3碼流文件,供解碼系統(tǒng)使用。在系統(tǒng)初步實(shí)現(xiàn)時(shí),存

3、儲(chǔ)的碼流長(zhǎng)度至少要保證能夠從主觀上感受到音頻信號(hào)解碼的效果;</p><p>  · 能夠?qū)P3碼流進(jìn)行解碼,從MP3格式恢復(fù)成PCM碼流。系統(tǒng)應(yīng)該能夠保證解碼過(guò)程的正確性,并能夠解碼算法在實(shí)現(xiàn)過(guò)程中所需要的存儲(chǔ)空間、計(jì)算速度等需求;</p><p>  · 能夠把解碼后輸出的PCM碼流通過(guò)揚(yáng)聲設(shè)備,如耳機(jī)、音箱等播放出來(lái),這樣才能夠從直觀上判斷解碼的效果,并且方便后

4、期在使用該系統(tǒng)方案時(shí)進(jìn)行直觀性能評(píng)價(jià)和直接應(yīng)用;</p><p>  · 能夠滿足系統(tǒng)的功率要求。對(duì)于電子類便攜式系統(tǒng),或者嵌入式應(yīng)用方案來(lái)說(shuō),系統(tǒng)的功耗要比較低,用電池供電能夠滿足系統(tǒng)的工作需要。</p><p><b>  2 軟件要求</b></p><p>  系統(tǒng)的軟件應(yīng)該能夠?qū)崿F(xiàn)以下功能:</p><p

5、>  · 能夠從數(shù)據(jù)存儲(chǔ)介質(zhì)中讀取MP3碼流數(shù)據(jù),要能保證數(shù)據(jù)讀取的速度滿足系統(tǒng)的需要;</p><p>  · 能夠正確對(duì)MP3碼流進(jìn)行解碼,并且以所需要的格式和方式輸出。解碼算</p><p>  法要在目標(biāo)系統(tǒng)中實(shí)現(xiàn),因此,不但要保證算法的正確性,也要保證算法的適應(yīng)</p><p>  性,充分利用目標(biāo)系統(tǒng)性能特性,并滿足系統(tǒng)的運(yùn)算速

6、度要求;</p><p>  · 能夠正確協(xié)調(diào)硬件各個(gè)模塊的工作,提供正確的芯片控制信號(hào),這項(xiàng)軟件</p><p>  功能是專門針對(duì)硬件的,需要根據(jù)目標(biāo)系統(tǒng)的硬件需求來(lái)設(shè)計(jì)實(shí)現(xiàn);</p><p><b>  3 兩種設(shè)計(jì)方案</b></p><p>  為了能夠設(shè)計(jì)和實(shí)現(xiàn)出較高性能的系統(tǒng),需要了解當(dāng)前的MP3

7、解碼器系統(tǒng)的實(shí)現(xiàn)方案。市場(chǎng)調(diào)查和技術(shù)咨詢的結(jié)果顯示,目前MP3播放器系統(tǒng)MP3解碼模塊一般有兩種實(shí)現(xiàn)方案。</p><p>  第一、使用專業(yè)的MP3解碼芯片,輔以簡(jiǎn)單的外圍電路實(shí)現(xiàn)。這種方案的優(yōu)點(diǎn)是系統(tǒng)個(gè)體集成度高,電路結(jié)構(gòu)緊湊,實(shí)現(xiàn)相對(duì)比較簡(jiǎn)單,能夠很快設(shè)計(jì)實(shí)現(xiàn)出目標(biāo)系統(tǒng)并投入使用,但是由于使用的是專業(yè)芯片,芯片中的功能模塊即使能擴(kuò)充,幅度和范圍都相對(duì)較小,系統(tǒng)很難進(jìn)行算法升級(jí)或功能擴(kuò)充,在嵌入式應(yīng)用中與原系

8、統(tǒng)的集成度不高。</p><p>  第二、以通用數(shù)字信號(hào)處理器(DSP,Digital Signal Processor)為核心,搭建相應(yīng)的外部電路形成一個(gè)系統(tǒng),解碼功能通過(guò)對(duì)數(shù)字信號(hào)處理芯片編程來(lái)實(shí)現(xiàn)。這種方案中,使用一定開(kāi)發(fā)環(huán)境進(jìn)行軟件的設(shè)計(jì)實(shí)現(xiàn)和調(diào)試測(cè)試。為了滿足解碼系統(tǒng)的需求,需要根據(jù)性能和技術(shù)要求,對(duì)通用的數(shù)字信號(hào)處理芯片進(jìn)行外圍電路擴(kuò)充。這種方案的優(yōu)點(diǎn)是系統(tǒng)實(shí)現(xiàn)的靈活性高,功能的可擴(kuò)展性強(qiáng),系統(tǒng)成本

9、可以通過(guò)對(duì)芯片的選擇控制到相對(duì)較低的水平,而且對(duì)于同樣使用數(shù)字信號(hào)處理芯片實(shí)現(xiàn)的系統(tǒng)來(lái)說(shuō),能最大程度地進(jìn)行系統(tǒng)集成。但是由于整個(gè)系統(tǒng)從硬件到軟件都需要自行設(shè)計(jì)和搭建,系統(tǒng)實(shí)現(xiàn)的難度和復(fù)雜度比較高。</p><p>  對(duì)于本系統(tǒng)設(shè)計(jì)采用方案二,即采用以DSP實(shí)現(xiàn)編解碼的系統(tǒng)。</p><p><b>  四 設(shè)計(jì)方案</b></p><p> 

10、 基于DSP的系統(tǒng)設(shè)計(jì)方案</p><p>  MP3解碼器的解碼算法完全由DSP芯片實(shí)現(xiàn),其控制部分用單片機(jī)實(shí)現(xiàn),作為硬件電路設(shè)計(jì)的一個(gè)部分。電路的整體設(shè)計(jì)與開(kāi)發(fā)需要綜合考慮前面兩部分程序算法接口內(nèi)容,可以在進(jìn)行詳細(xì)的程序設(shè)計(jì)的基礎(chǔ)上進(jìn)行。這樣,可以把MP3解碼器的開(kāi)發(fā)工作分為兩大模塊,即MP3解碼程序DSP實(shí)現(xiàn),即軟件設(shè)計(jì),以單片機(jī)控制程序和電路板設(shè)計(jì)部分,即硬件設(shè)計(jì)。</p><p>

11、;  MP3系統(tǒng)開(kāi)發(fā)從模塊上可以劃分為硬件開(kāi)發(fā)和軟件開(kāi)發(fā)兩個(gè)部分,軟件主要實(shí)現(xiàn)MP3解碼算法,單片機(jī)實(shí)現(xiàn)存儲(chǔ)器訪問(wèn)控制,MP3文件播放控制等功能。系統(tǒng)總體的功能結(jié)構(gòu)如圖一所示。</p><p>  圖5.1 系統(tǒng)結(jié)構(gòu)框圖</p><p>  軟件系統(tǒng)設(shè)計(jì)方案是用DSP軟件實(shí)現(xiàn)MP3解碼算法功能,并完成相應(yīng)的接口訪問(wèn)功能,軟件功能圖如圖二所示。</p><p>  圖

12、5.2 MP3解碼器軟件系統(tǒng)功能原理圖</p><p><b>  五 系統(tǒng)整體框圖</b></p><p>  MP3解碼算法要被用來(lái)實(shí)現(xiàn)數(shù)碼MP3實(shí)時(shí)解碼適配器,所以必須通過(guò)硬件實(shí)現(xiàn)其算法。本系統(tǒng)以DSP(TMS320VC5416)作為解碼的主要部分,還包括音頻D/A轉(zhuǎn)換,單片機(jī)的控制模塊,電源系統(tǒng),存儲(chǔ)器模塊等組成,圖三給出了系統(tǒng)框圖。</p>

13、<p>  圖5.3 系統(tǒng)整體框圖</p><p><b>  六 硬件電路設(shè)計(jì)</b></p><p><b>  1 主譯碼模塊</b></p><p>  (1) TMS320C6711接口與時(shí)鐘電路</p><p>  veloci結(jié)構(gòu)使C6000 DSP成為高性能的DSP芯片

14、。典型的VLIW結(jié)構(gòu)由多個(gè)并行運(yùn)行的執(zhí)行單元組成,這些單元在單個(gè)時(shí)鐘周期內(nèi)可執(zhí)行多條指令。并行是突破傳統(tǒng)設(shè)計(jì)而獲得高性能的關(guān)鍵。</p><p>  C6711處理器由三個(gè)主要部分組成:CPU內(nèi)核、外設(shè)和存儲(chǔ)器。CPU中8個(gè)功</p><p>  能單元可以并行操作,這些功能單元被分成類似的兩套,每套由4個(gè)基本功能單元組成。CPU有兩組寄存器,每組寄存器由16個(gè)32位寄存器組成。由于在運(yùn)行

15、期間個(gè)做硬件數(shù)據(jù)相關(guān)性的檢查,所以程序的并行性在編譯時(shí)就被確定。片內(nèi)程序存儲(chǔ)器的總線寬度為256的,使每個(gè)周期可取8條32位指令。</p><p>  C6711腆芯片包括片內(nèi)程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器,有些芯片將這些存儲(chǔ)器作為高速緩沖存儲(chǔ)器。外設(shè)包括直接存儲(chǔ)器訪問(wèn)(DMA)、低功耗邏輯、外部存儲(chǔ)器接口、串口、擴(kuò)展總線或主機(jī)口和定時(shí)器等。</p><p><b>  具有以下特點(diǎn):&

16、lt;/b></p><p>  1 運(yùn)行速度快。指令周期為6ns,峰值運(yùn)算能力為1336MIPS,對(duì)于單精度運(yùn)算可達(dá)1G FLOPS,對(duì)于算精度運(yùn)算可達(dá)250MFLOPS.</p><p>  2 硬件支持IEEE格式的32位單精度與64為雙精度浮點(diǎn)操作。</p><p>  3 繼承了32*32bit的乘法器,其結(jié)果可為32或64bit.</p>

17、;<p>  4 C6711的指令集在C62的指令集基礎(chǔ)上增加了浮點(diǎn)執(zhí)行能力,可以看作是C62指令集的超集。</p><p>  與C62系列芯片一樣,由于其出色的運(yùn)算能力、高效的指令集、智能外設(shè)、大容量的片內(nèi)存儲(chǔ)器和大范圍的尋址能力,這個(gè)系列的芯片適合用于基站數(shù)字波束形成、圖像處理、語(yǔ)音識(shí)別等對(duì)運(yùn)算能力和存儲(chǔ)量有高要求的應(yīng)用場(chǎng)合。</p><p>  圖6.1 時(shí)鐘,JTA

18、G和DSP接口電路</p><p>  時(shí)鐘電路有25MHZ晶振,兩片ICS504和SN74LVTH125PW組成,如圖所示</p><p><b>  圖6.2 時(shí)鐘電路</b></p><p> ?。?) JTAG仿真口電路</p><p>  連接測(cè)試組(JTAG)接口用于連接最小系統(tǒng)和仿真器,實(shí)現(xiàn)仿真器對(duì)DSP的

19、訪問(wèn),JTAG接口的連接需要和仿真器上的接口一致。</p><p>  一般情況下,最小系統(tǒng)板需要引出雙排的14腳插針,圖中引腳間隔為0.1英寸,引腳寬度為0.025英寸,引腳長(zhǎng)度為0.235英寸。在大多數(shù)情況下,如果開(kāi)發(fā)板和仿真器之間的連接電纜不超過(guò)6英寸,可采用上述接法,在EMU0和EMU1接上拉電阻4.7K。</p><p>  圖6.3 JTAG電路</p><

20、;p><b>  2 模擬音頻模塊</b></p><p>  聲音采集電路以TI公司的音頻編解碼器TLV320AIC23為核心來(lái)完成,AIC23把麥克風(fēng)輸出的模擬音頻信號(hào)轉(zhuǎn)換成數(shù)字音頻信號(hào),形成PCM碼流,送給DSP芯片。DSP則以DMA方式,通過(guò)多通道緩沖串口讀取PCM樣值,并在片內(nèi)RAM建立幀緩沖區(qū),每幀的大小為12,DSP通過(guò)I2C接口對(duì)芯片的內(nèi)部寄存器進(jìn)行控制設(shè)置,使其工作在

21、合適的的工作模式下。</p><p>  (1) A1C23與6711的連接方式</p><p>  AIC23與DSP的接口有兩個(gè):一個(gè)是控制口,用于設(shè)置AIC23的工作參數(shù);另一個(gè)是數(shù)據(jù)口,用于傳輸AIC23的A/D、D/A數(shù)據(jù)。將6711的McASP配置成脈沖幀同步模式,2通路TDM格式的數(shù)據(jù)流,與4片AIC23的數(shù)據(jù)接口相連;使用I2C總線與AIC23的控制口接口。</p&

22、gt;<p><b>  AIC23的數(shù)據(jù)口</b></p><p>  AIC23的數(shù)據(jù)口有4種工作方式,分別為Rightiustitled、Leftjustified、xlsMode、DSPMode。其中后兩種可以很方便的與DSP的McASP串口相連接。采用DSPMode工作方式。AIC23的數(shù)據(jù)口可以和6711的McASP接口無(wú)縫連接,方便地實(shí)現(xiàn)主模式與從模式兩種工作方式

23、。當(dāng)McASP為從模式時(shí),McASP的接收時(shí)鐘與幀同步信號(hào)都由AIC23來(lái)提供;當(dāng)McASP為主模式時(shí),McASP產(chǎn)生所有的信號(hào)。McASP串口相連接。采用DSPMode工作方式。AIC23的數(shù)據(jù)口可以和6711的McASP接口無(wú)縫連接,方便地實(shí)現(xiàn)主模式與從模式兩種工作方式。當(dāng)McAS為從模式時(shí),McASP的接收時(shí)鐘與幀同步信號(hào)都由AIC23來(lái)提供;當(dāng)McAS為主模式時(shí),McASP產(chǎn)生所有的信號(hào)。</p><p>

24、;<b>  AIC23的控制口</b></p><p>  AIC23的控制口有兩種工作方式:兩線制的I2C方式 (MODE為低);三線制的SPI方式(MODE為高),文中采用I2C方式,時(shí)序圖如圖4.6所示。</p><p>  圖6.4 I2C總線配置AIC23的時(shí)序圖</p><p>  使用I2C總線對(duì)AIC23進(jìn)行配置時(shí),I2C總

25、線選擇7位地址的尋址方式,由于AIC23的寄存器只有寫(xiě)操作無(wú)讀操作,因而其通訊協(xié)議規(guī)定每個(gè)WORD的前7Bit為寄存器的地址,后1Bit為寄存器內(nèi)容。在兩線制的I2C方式下SDI為串行數(shù)據(jù)線,SCLK為串行時(shí)鐘線,開(kāi)始條件是當(dāng)SCLK為高而SDI為下降沿,1到7個(gè)位時(shí)鐘傳輸寄存器地址,R/W位決定數(shù)據(jù)傳輸方向,第9個(gè)位時(shí)鐘識(shí)別地址并接受數(shù)據(jù)傳輸,后2個(gè)8位時(shí)鐘傳輸控制數(shù)據(jù)位(9位)。單片AIC23接口電路。</p><

26、;p>  圖6.5 音頻轉(zhuǎn)換電路</p><p><b>  3 電源模塊</b></p><p>  TMS320C6711的內(nèi)核電壓典型值為1.26V,電壓范圍為1.1~1.8V;外部接口電壓典型值為3.3V,電壓范圍為3.0~3.6V。另外單片機(jī)需+5V供電;電平轉(zhuǎn)換電路需3.3V供電;故電源系統(tǒng)有5V、3.3V和1.26V四種電壓。電系統(tǒng)的5V電壓由外部

27、穩(wěn)壓電源供給;3.3V和1.26V由系統(tǒng)內(nèi)部線性電壓調(diào)節(jié)器提供。采用TI公司的TPS767D3011線性調(diào)壓電路芯片,能滿足系統(tǒng)設(shè)計(jì)要求。</p><p>  TPS767D3011為雙輸出低漏電壓調(diào)整器。其特點(diǎn)如下:具有快速瞬態(tài)響應(yīng)功能;</p><p>  3.3V/1.26V可調(diào)電壓輸出;</p><p>  輸出電流范圍為0~1A;</p>&

28、lt;p>  200MS延遲的雙通道上電復(fù)位;</p><p><b>  熱關(guān)斷保護(hù);</b></p><p>  超低靜態(tài)電流,典型值為80uA;關(guān)斷電流為1uA。</p><p>  采用TPS767D3011構(gòu)成的電源電路如圖6.2所示。從外部穩(wěn)壓電源引入5V電壓。+5V電壓一方面輸入給TPS767D3011,經(jīng)TPS767D30

29、11后輸出電壓1.26V和3.3V,另一方面又直接供給單片機(jī)電源。</p><p>  圖6.6 電源電路</p><p><b>  4 存儲(chǔ)擴(kuò)展</b></p><p>  (1) SDRAM擴(kuò)展</p><p>  本系統(tǒng)采用MICron公司生產(chǎn)的MT48LC4M16AZ作為SDRAM存儲(chǔ)芯片,并可與DSP完全兼

30、容,能夠與6711實(shí)現(xiàn)無(wú)縫連接。MT48LC4M16AZ連線圖如圖4.12所示。通過(guò)對(duì)6711的EMIF與SDRAM相關(guān)寄存器的設(shè)置之后,DSP對(duì)SDRAM的訪問(wèn)操作將變的非常透明,可像訪問(wèn)片外SRAM一樣訪問(wèn)它,因此非常方便。系統(tǒng)中采用一片Mieron公司的MT48LC4M16AZ,數(shù)據(jù)寬度16bit,工作電壓為3.3V。該芯片可以滿足系統(tǒng)對(duì)內(nèi)存容量和讀寫(xiě)速度的要求。板上通過(guò)6711的EMIF總線擴(kuò)展了一片64M位(IM*4Blank

31、*16)的SDRAM,它將占用oM642的石而和瓦1二個(gè)片外存儲(chǔ)空間可尋址范圍oXo40000一oX7FFFFF:最大配置時(shí),板上可安裝一片128M為的SDRAM,它將占用6711的CEO一CE3。全部四個(gè)片外存儲(chǔ)空間,可尋址范圍0x040000一OxFEFFFF(6711狀態(tài)寄存器ST3中的MPNMC=O),或oxO40000一OxFFFFFF(MPNMC=0),上電復(fù)位時(shí),MPNMC被清0。由于EMIF每個(gè)片選的最大空間為64M比特

32、,所以一片64M比特的</p><p>  圖6.7 SDRAM擴(kuò)展電路</p><p>  (2) FLASH存儲(chǔ)器模塊</p><p>  本系統(tǒng)采用SST公司推出的多用途、高性能、低電壓、基于CMOS的FLASH存儲(chǔ)器SST39VF80OA,其容量為SMbit(512kx16bit),只需2.7V的電壓就可完成讀、寫(xiě)和擦除操作,寫(xiě)入一個(gè)字節(jié)(sbit)僅需2

33、0,s,整個(gè)存儲(chǔ)器的擦除只需8s。FLASH存儲(chǔ)器電路的連接圖如圖4.13所示。</p><p>  圖6.8 FLASH擴(kuò)展電路</p><p>  由于本系統(tǒng)DSP采用ROM加載方式,在上電復(fù)位之后首先將CE1空間的程序代碼搬到片內(nèi)地址O處開(kāi)始運(yùn)行,因此FLASH主要分配到DSP的外部CE1空間。為使DSP能夠正確地從FLASH引導(dǎo)并加載程序,還需配置相應(yīng)的引腳。由于C6000系列D

34、SP提供了與FLASH的無(wú)縫接口,因此設(shè)計(jì)6711與FLASH的接口電路就變得相對(duì)較簡(jiǎn)單。</p><p><b>  (3) ROM模塊</b></p><p>  采用EPROM芯片AT29LV010A-15JC存儲(chǔ)程序,接線圖如下;</p><p>  圖6.9 ROM電路</p><p><b>  

35、5 單片機(jī)控制模塊</b></p><p>  (1) USB接口電路與控制</p><p>  下面介紹以下PDIUSBD12芯片。</p><p>  圖6.10 PDIUSBD12芯片引腳</p><p>  D0~D7:雙向8位數(shù)據(jù)線。</p><p>  ALE: 地址鎖存使能信號(hào)。</p

36、><p>  CLKOUT:可編程時(shí)鐘輸出。</p><p>  /INT: PDIUSBD12中斷輸出。</p><p>  D-: USB D-數(shù)據(jù)線。</p><p>  D+: USB D+數(shù)據(jù)線。</p><p>  PDIUSBD12適應(yīng)于不同類型的設(shè)備,有四種不同的模式:非同步傳輸,同步輸出傳輸,同步輸入傳輸

37、,同步輸出/輸入傳輸。共有3各端點(diǎn),分別為端點(diǎn)0,端點(diǎn)1和端點(diǎn)2。端點(diǎn)是一個(gè)USB設(shè)備唯一可以確認(rèn)的部分,它是主機(jī)和設(shè)備之間的通信流終點(diǎn)。每一個(gè)USB邏輯設(shè)備都包括一個(gè)端點(diǎn)集合,PC機(jī)應(yīng)用軟件只能通過(guò)一個(gè)或多個(gè)端點(diǎn)與一個(gè)USB設(shè)備通信。在設(shè)備接入時(shí),每個(gè)邏輯設(shè)備都有一個(gè)由系統(tǒng)分配的唯一地址,而一個(gè)設(shè)備上的任一個(gè)端點(diǎn)都有一個(gè)有設(shè)備確定的唯一的標(biāo)識(shí)和端點(diǎn)號(hào),利用設(shè)備的地址和端點(diǎn)號(hào)就可以唯一指定任一個(gè)端點(diǎn)。</p><p&

38、gt;  所有的USB設(shè)備都要擁有端點(diǎn)0,它總是在設(shè)備一經(jīng)接入和上電時(shí)就進(jìn)行配置。該端點(diǎn)用于對(duì)一個(gè)邏輯設(shè)備進(jìn)行初始化和一般的操作。端點(diǎn)0支持控制傳輸,通過(guò)它訪問(wèn)一般的USB狀態(tài)和控制操作。</p><p>  除了端點(diǎn)0外,功能設(shè)備還具有其他端點(diǎn),如PDIUSBD12的端點(diǎn)1和端點(diǎn)2.低速功能設(shè)備有兩個(gè)端點(diǎn)可供選擇,而一個(gè)全速設(shè)備最多可以有16個(gè)輸入端點(diǎn)和16個(gè)輸出端點(diǎn)。</p><p>

39、 ?。?) 單片機(jī)與鍵盤(pán)控制</p><p>  單片機(jī)采用80C52芯片,實(shí)現(xiàn)按鍵管理,及USB控制。</p><p>  圖6.11 USB,鍵盤(pán)和單片機(jī)接口電路</p><p><b>  6 LCD擴(kuò)展</b></p><p>  LCD 模塊選擇 VPG240128TA-SC-HT-LED04,LCD工作電

40、壓與DSP的電壓不匹配,需要做電平匹配,LCD電平轉(zhuǎn)換芯片SN74LVC4245A ;LCD模塊通過(guò)排線與單板連接。</p><p>  圖6.12 LCD顯示接口電路</p><p><b>  七 PCB板設(shè)計(jì)</b></p><p>  在MP3播放機(jī)PCB板設(shè)計(jì)中,經(jīng)過(guò)合理布局,全面滿足了外觀和結(jié)構(gòu)方面的需求。同時(shí)在數(shù)字信號(hào)部分精心

41、考慮信號(hào)線走向,盡可能多地增加鋪地面積,減少分布參數(shù)的影響,使干擾減少到合理范圍。兼顧信號(hào)質(zhì)量和成本后,最終PCB板采用了六層板設(shè)計(jì)。</p><p><b>  八 系統(tǒng)軟件設(shè)計(jì)</b></p><p><b>  1 CVSD編碼</b></p><p>  語(yǔ)音信號(hào)采用比較容易實(shí)現(xiàn)的CSVD編碼,也即線性增量調(diào)制算

42、法編碼方法,實(shí)現(xiàn)對(duì)語(yǔ)音信號(hào)的編碼以及相應(yīng)的解碼算法。</p><p>  CVSD是一種量階隨著輸入語(yǔ)音信號(hào)平均斜率大小而連續(xù)變化的增量調(diào)制方法。他的工作原理是使用多個(gè)連續(xù)可變斜率的線段來(lái)逼近語(yǔ)音信號(hào),當(dāng)斜率為正時(shí),對(duì)應(yīng)的數(shù)字編碼為1;當(dāng)斜率為負(fù)時(shí),對(duì)應(yīng)的數(shù)字編碼為0。當(dāng)CVSD工作于編碼方式時(shí),其系統(tǒng)框圖如7.1,語(yǔ)音輸入信號(hào)經(jīng)采樣得到數(shù)字信號(hào),數(shù)字信號(hào)與積分器輸出信號(hào)¥比較后輸出偏差信號(hào),偏差信號(hào)經(jīng)判決后輸出

43、數(shù)字編碼,該信號(hào)同時(shí)作為積分器輸出斜率的機(jī)型控制信號(hào)和積分器輸出斜率邏輯的輸入信號(hào)。在每個(gè)時(shí)鐘周期內(nèi),若語(yǔ)音信號(hào)大于積分器輸出信號(hào),則判決輸出為1,積分器輸出上升一個(gè)量階;若語(yǔ)音信號(hào)小于積分器輸出信號(hào),則判決輸出為0,積分器下降一個(gè)量階。</p><p>  圖8.1 CSVD編碼系統(tǒng)框圖</p><p>  當(dāng)CSVD工作于解碼方式時(shí),其系統(tǒng)框圖如圖7.2。在每個(gè)時(shí)鐘周期內(nèi),數(shù)字編碼被送

44、到連碼檢測(cè)器,然后送到斜率幅度控制電路一控制積分器輸出斜率的大小。若數(shù)字編碼輸入為1,則積分器的輸出上升一個(gè)量階,這相當(dāng)于編碼過(guò)程的逆過(guò)程。積分器的輸出通過(guò)低通濾波器平滑濾波后將重現(xiàn)輸入語(yǔ)音信號(hào)。</p><p>  圖7.2 CSVD解碼系統(tǒng)框圖</p><p>  可見(jiàn)輸入信號(hào)的波形上升越快,輸出的連1碼就越多,同樣下降越快連0碼越多,CVSD編碼能夠很好地反應(yīng)輸入信號(hào)的斜率大小。為

45、使積分器的輸出能夠更好地逼近輸入語(yǔ)音信號(hào),量階隨著信號(hào)斜率大小而變化,當(dāng)信號(hào)斜率絕對(duì)值很大,編碼出現(xiàn)3個(gè)連1或連0碼時(shí),則量階加一個(gè)增量,當(dāng)不出現(xiàn)上述碼型時(shí),量階則相應(yīng)地減小。</p><p>  為了減小編碼及譯碼的偏差,要求編碼和譯碼過(guò)程使用相同的時(shí)鐘頻率,而且采樣頻率應(yīng)符合耐酸斯特采樣定律。</p><p>  CSVD通過(guò)不斷改變量階大小來(lái)跟蹤信號(hào)的變化以減小顆粒噪聲與斜率過(guò)程失真

46、,量階調(diào)整是基于過(guò)去的3個(gè)或4個(gè)樣值輸出。具體編碼程序如圖7.3,具體解碼程序如圖7.4.</p><p>  圖7.3 語(yǔ)音編碼流程圖 圖7.4 語(yǔ)音解碼流程圖</p><p>  2 CVSD編碼的C語(yǔ)言程序代碼</p><p>  #include <stdio.h></p><p>  #in

47、clude <math.h></p><p>  //#include <C55.h></p><p>  #define BUFFERSIZEOUT 254</p><p>  #define BUFFERSIZEIN 4064</p><p>  #define DeltaMax

48、 1280 </p><p>  #define DeltaMin 6.5</p><p>  #define Beta 0.99 </p><p>  #define ORD 6 </p><p>  #defin

49、e MAX_BITS 16 </p><p>  double ValPreCVSD = 0;</p><p>  double DeltaCVSD = 20;</p><p>  double Delta0CVSD = 10;</p><p>  char ThreeJudgeCVSD[3] = {0,1,0

50、};</p><p>  double ValPreCVSDDE = 0;</p><p>  double DeltaCVSDDE = 20;</p><p>  double Delta0CVSDDE = 10;</p><p>  char ThreeJudgeCVSDDE[3] = {0,1,0};</p>

51、<p>  static double CoefA[ORD] = {1.00000000,-3.88893329, 6.64074495,-6.08600100, 2.98673653,-0.62768820};</p><p>  static double CoefB[ORD] = {0.03285030,-0.05723916, 0.03681835, 0.03681835,-0.05723916

52、, 0.03285030};</p><p>  static short filterY[ORD-1];</p><p>  static short filterX[ORD];</p><p>  char CVSDCoder(short InData);</p><p>  short CVSDDecoder(char InData);

53、</p><p>  char CVSDCoder(short InData)</p><p><b>  {</b></p><p>  double Diff = 0;</p><p>  int j = 0;</p><p>  char OutData;</p>

54、<p>  Diff = InData - ValPreCVSD;</p><p>  if (Diff > 0)</p><p><b>  {</b></p><p>  ThreeJudgeCVSD[j] = 1;</p><p>  OutData = 1;</p><p>

55、;<b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  ThreeJudgeCVSD[j] = 0;</p><p>  OutData = 0;</p><p>  }

56、 //判斷三連碼</p><p>  if (((ThreeJudgeCVSD[0] == 1) & (ThreeJudgeCVSD[1] == 1) & (ThreeJudgeCVSD[2] == 1)) | ((ThreeJudgeCVSD[0] == 0) & (ThreeJudgeCVSD[1] == 0) & (T

57、hreeJudgeCVSD[2] == 0)))</p><p>  DeltaCVSD = DeltaCVSD + Delta0CVSD;</p><p>  else DeltaCVSD = Beta*DeltaCVSD;</p><p>  if (DeltaCVSD > DeltaMax) DeltaCVSD = DeltaMa

58、x;</p><p>  if (DeltaCVSD < DeltaMin) DeltaCVSD = DeltaMin;</p><p>  if (ThreeJudgeCVSD[j] == 1) </p><p><b>  {</b></p><p>  ValPreCVSD = ValPreCV

59、SD + DeltaCVSD;</p><p><b>  }</b></p><p>  if (ThreeJudgeCVSD[j] == 0) </p><p><b>  {</b></p><p>  ValPreCVSD = ValPreCVSD - DeltaCVSD;</p

60、><p><b>  }</b></p><p><b>  j++;</b></p><p><b>  j %= 3;</b></p><p>  return OutData;</p><p><b>  }</b></

61、p><p>  short CVSDDecoder(char InData)</p><p><b>  {</b></p><p>  double Max;</p><p>  int j = 0;</p><p>  int m = 0;</p><p>  

62、short OutData;</p><p>  short DataDecode;</p><p>  if (InData == 0) ThreeJudgeCVSDDE[m] = 0;</p><p>  if (InData == 1) ThreeJudgeCVSDDE[m] = 1;</p><p>  if (((

63、ThreeJudgeCVSDDE[0] == 1) & (ThreeJudgeCVSDDE[1] == 1) & (ThreeJudgeCVSDDE[2] == 1)) | ((ThreeJudgeCVSDDE[0] == 0) & (ThreeJudgeCVSDDE[1] == 0) & (ThreeJudgeCVSDDE[2] == 0)))</p><p>  DeltaCV

64、SDDE = DeltaCVSDDE + Delta0CVSDDE;</p><p>  else DeltaCVSDDE = Beta*DeltaCVSDDE;</p><p>  if (DeltaCVSDDE > DeltaMax) DeltaCVSDDE = DeltaMax;</p><p>  if (DeltaCVSDDE

65、 < DeltaMin) DeltaCVSDDE = DeltaMin;</p><p>  if (ThreeJudgeCVSDDE[m] == 1) ValPreCVSDDE += DeltaCVSDDE;</p><p>  if (ThreeJudgeCVSDDE[m] == 0) ValPreCVSDDE -= DeltaCVSDDE;</p&

66、gt;<p>  if (ValPreCVSDDE > 32767) ValPreCVSDDE = 32767;</p><p>  if (ValPreCVSDDE < -32768) ValPreCVSDDE = -32768;</p><p><b>  m++;</b></p><p><

67、;b>  m %= 3;</b></p><p>  OutData = (short)ValPreCVSDDE;</p><p><b>  Max = 0;</b></p><p>  filterX[0] = OutData;</p><p>  for (j = 0; j < OR

68、D; j++)</p><p><b>  {</b></p><p>  Max = Max + CoefB[j]*filterX[j];</p><p><b>  }</b></p><p>  for (j = 1; j < ORD; j++)</p><p>

69、<b>  {</b></p><p>  Max = Max - CoefA[j]*filterY[j-1];</p><p><b>  }</b></p><p>  DataDecode = (short)Max;</p><p>  for (j = ORD-1; j > 0; j-

70、-)</p><p><b>  {</b></p><p>  filterX[j] = filterX[j-1];</p><p><b>  }</b></p><p>  for (j = ORD-2; j > 0; j--)</p><p><b>

71、  {</b></p><p>  filterY[j] = filterY[j-1];</p><p><b>  }</b></p><p>  filterY[0] = (short)Max;</p><p>  return DataDecode; </p><p><

72、;b>  }</b></p><p>  main()</p><p><b>  {</b></p><p>  short CVSDinput = 0;</p><p>  char CVSDoutput; </p><p>  short CV

73、SDDEoutput;</p><p>  char CVSDDEinput = 0; </p><p>  CVSDoutput = CVSDCoder(CVSDinput); </p><p>  CVSDDEoutput = CVSDDecoder(CVSDDEinput);</p><p><b>  }&

74、lt;/b></p><p><b>  3 編碼程序</b></p><p>  .title "CVSDcoder.asm"</p><p><b>  .mmregs</b></p><p>  STACK .usect

75、 "STACK",10h</p><p>  .global Init, Begin</p><p>  DeltaMax .set 1280h</p><p>  DeltaMin .set 65h</p><p>  Beta .set 99

76、h</p><p>  Delta0CVSD .set 10h</p><p><b>  .data</b></p><p>  TBL: .word 0,1,0</p><p>  .bss ThreeJudge,3</p><

77、;p>  .bss InData,1</p><p>  .bss OutData,1</p><p>  .bss DeltaCVSD,1</p><p>  .bss ValPreCVSD,1</p><p><b>  .text</b></p&g

78、t;<p>  Init: STM #ThreeJudge,AR5 </p><p>  RPT #3</p><p>  MVPD TBL,*AR5+ </p><p>  STM #ThreeJudge,AR5 </p><

79、p>  ST #20,*(DeltaCVSD) </p><p>  ST #0,*(ValPreCVSD)</p><p>  ST #100,*(InData) </p><p>  Begin: LD *(InData),A</p><p>

80、  STLM A,AR1</p><p>  LD *(ValPreCVSD),A</p><p>  STLM A,AR0</p><p>  CMPR LT,AR1</p><p>  BC DiffNeg,TC</p><p>  STM #1,*AR5+</p>&l

81、t;p>  ST #1,*(OutData)</p><p>  LD #1,A</p><p>  AND *AR5+,A</p><p>  AND *AR5+,A</p><p>  BC L1,ANEQ </p><p>  STM #DeltaCVSD

82、,AR6 </p><p>  STM #Beta,T </p><p>  MPY AR6,A</p><p>  B L2 </p><p>  L1: LD #DeltaCVSD,A </p><

83、;p>  STM #Delta0CVSD,AR3;</p><p>  ADD AR3,A </p><p>  L2: STM #DeltaMax,AR0 </p><p><b>  STL A,AR4</b></p><

84、;p>  CMPR LT,AR4 </p><p>  BC L3,TC </p><p>  LD AR0,A </p><p>  L3: STM #DeltaMin,AR0

85、 </p><p>  STL A,AR4 </p><p>  CMPR GT,AR4 </p><p><b>  BC L4,TC</b></p><p>  LD AR0,A </p&g

86、t;<p>  L4: STL A,*(DeltaCVSD) </p><p>  STM #ValPreCVSD,AR4 </p><p>  ADD *AR4,A</p><p>  STL A,*(ValPreCVSD) </p>

87、<p>  B ending </p><p>  DiffNeg: STM #0,*AR5+ </p><p>  ST #0,*(OutData)</p><p><b>  LD #0,A</b></p><p&

88、gt;  ADD *AR5+,A</p><p>  ADD *AR5+,A</p><p>  BC L5,ANEQ </p><p>  LD #DeltaCVSD,A</p><p>  STM #Delta0CVSD,AR3;</p><p>  ADD

89、 AR3,A </p><p>  B L6 </p><p>  L5: STM #DeltaCVSD,AR6</p><p>  STM #Beta,T </p><p>  MPY AR6,A </p

90、><p>  L6: STM #DeltaMax,AR0</p><p>  STL A,AR4 </p><p>  CMPR LT,AR4 </p><p><b>  BC L7,TC</b></p><p>  LD

91、 AR0,A </p><p>  L7: STM #DeltaMin,AR0</p><p>  CMPR GT,AR4</p><p>  BC L8,TC </p><p><b>  LD AR0,A</b></

92、p><p>  L8: STL A,*(DeltaCVSD)</p><p>  STL A,AR4</p><p>  STM #ValPreCVSD,AR6</p><p>  LD *(AR6),A</p><p>  SUB AR4,A</p&

93、gt;<p>  STL A,*(ValPreCVSD)</p><p>  ending: STL A,*(ValPreCVSD)</p><p><b>  .END</b></p><p><b>  4 解碼程序</b></p><p>  .titl

94、e "CVSDdecoder.asm"</p><p><b>  .mmregs</b></p><p>  STACK .usect "STACK",10h</p><p>  .global nit, Begin</p><p> 

95、 DeltaMax .set 1280h</p><p>  DeltaMin .set 65h</p><p>  Beta .set 99h</p><p>  Delta0CVSD .set 10h</p><p> 

96、 ORD .set 6h</p><p>  ORD1 .set 5h </p><p><b>  .data</b></p><p>  TBL: .word 0,1,0</p><p>  Coefa:

97、 .word -3888933*32768/1000000 </p><p>  .word 6640744*32768/1000000</p><p>  .word -6086001*32768/1000000</p><p>  .word 2986736*32768/1000000 </p><p&

98、gt;  .word -627688*32768/1000000</p><p>  Coefb: .word 32850*32768/1000000</p><p>  .word -57239*32768/1000000</p><p>  .word 36818*32768/1000000 </p>&

99、lt;p>  .word 36818*32768/1000000 </p><p>  .word -57239*32768/1000000 </p><p>  .word 32850*32768/1000000</p><p>  .bss ThreeJudge,3</p><p&

100、gt;  .bss Judge,1</p><p>  .bss InData,1</p><p>  .bss OutData,1</p><p>  .bss DeltaCVSD,1</p><p>  .bss ValPreCVSD,1</p><

101、p>  .bss FilterX,6</p><p>  .bss CoefA,5</p><p>  .bss FilterY,5</p><p>  .bss CoefB,6 </p><p><b>  .text</b></

102、p><p>  Init: STM #ThreeJudge,AR5 </p><p>  RPT #3</p><p>  MVPD TBL,*AR5+ </p><p>  STM #CoefA,AR5</p><p>  RPT

103、 #5</p><p>  MVPD Coefa,*AR5+</p><p>  STM #CoefB,AR5</p><p>  RPT #6</p><p>  MVPD Coefb,*AR5+</p><p>  STM #ThreeJudge,AR5 </p&

104、gt;<p>  ST #20,*(DeltaCVSD)</p><p>  ST #0,*(ValPreCVSD) </p><p>  ST #1,*(Judge) </p><p>  ST #1,*(InData) </p><p>

105、  Begin: LD *(InData),A </p><p>  STL A,*AR5+ </p><p>  AND *(Judge),A</p><p>  BC ONE,ANEQ</p><p>  LD #0,A <

106、;/p><p>  ADD *AR5+,A</p><p>  ADD *AR5+,A</p><p>  BC L1,ANEQ</p><p>  STM #DeltaCVSD,AR6 </p><p>  STM #Beta,T</p><p>  

107、MPY AR6,A </p><p><b>  B L2</b></p><p>  L1: LD #DeltaCVSD,A</p><p>  STM #Delta0CVSD,AR3;</p><p>  ADD AR3,

108、A</p><p>  L2: STM #DeltaMax,AR0</p><p>  STL A,AR4</p><p>  CMPR LT,AR4</p><p>  BC L3,TC</p><p>  LD AR0,A &

109、lt;/p><p>  L3: STM #DeltaMin,AR0 </p><p>  STL A,AR4</p><p>  CMPR GT,AR4 </p><p>  BC L4,TC <

110、/p><p>  LD AR0,A</p><p>  L4: STL A,*(DeltaCVSD) </p><p>  STL A,AR4</p><p>  STM #ValPreCVSD,AR6 </p><p&

111、gt;  LD *(AR6),A </p><p>  SUB AR4,A</p><p>  STL A,*(ValPreCVSD) </p><p>  ONE: </p><p>  LD

112、 #1,A</p><p>  AND *AR5+,A</p><p>  AND *AR5+,A</p><p>  BC L5,ANEQ </p><p>  STM #DeltaCVSD,AR6 </p><p>  STM #Beta,T

113、 </p><p>  MPY AR6,A </p><p><b>  B L6</b></p><p>  L5: LD #DeltaCVSD,A </p><p>  STM #Delta0CVSD,AR3;

114、 </p><p>  ADD AR3,A</p><p>  L6: STM #DeltaMax,AR0 </p><p>  STL A,AR4 </p><p>  CMPR LT,AR4</p><

115、;p>  BC L7,TC </p><p>  LD AR0,A </p><p>  L7: STM #DeltaMin,AR0 </p><p>  STL A,AR4 </p>

116、<p>  CMPR GT,AR4 </p><p>  BC L8,TC</p><p>  LD AR0,A </p><p>  L8: STL A,*(DeltaCVSD)</p><p>  STM

117、 #ValPreCVSD,AR4</p><p>  ADD *AR4,A</p><p>  STL A,*(ValPreCVSD) </p><p>  IIR: STM #CoefB,AR2</p><p>  STM #FilterX,AR3</p><p

118、>  LD *(ValPreCVSD),A</p><p>  STL A,*AR3 </p><p>  MPY *AR2+,*AR3+,A </p><p><b>  RPT #4</b></p><

119、;p>  MAC *AR2+,*AR3+,A </p><p>  STM #CoefA,AR2</p><p>  STM #FilterY,AR3</p><p>  RPT #4</p><p>  MAS *AR2+,*AR3+,A </p>

120、;<p>  STM #FilterX+4,AR3</p><p>  RPT #3</p><p>  DELAY *AR3-</p><p>  STM #FilterY+3,AR3</p><p>  RPT #2</p><p>  DELAY *AR3-&

121、lt;/p><p>  S: STL A,*(FilterY)</p><p><b>  .END</b></p><p>  八* 軟硬件電路調(diào)試</p><p><b>  九 總結(jié)</b></p><p>  本文通過(guò)MP3的設(shè)計(jì),熟

122、悉并掌握了C6711芯片,TLV320AIC23芯片以及語(yǔ)音編解碼原理;</p><p><b>  十 參考書(shū)目</b></p><p>  (1)宋亞玲, MP3音頻編碼算法的DSP實(shí)現(xiàn)及優(yōu)化, 北京工業(yè)大學(xué), 2006.</p><p> ?。?)王希公, MP3數(shù)碼音頻播放機(jī)設(shè)計(jì) ,天津大學(xué)工程碩士學(xué)位論文, 2004.</p&

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論