版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于dsp的mp3播放器設(shè)計(jì)
- 基于mp3播放器的設(shè)計(jì)
- 基于DSP的MP3播放器的設(shè)計(jì)與實(shí)現(xiàn).pdf
- mp3播放器設(shè)計(jì)設(shè)計(jì)
- 基于fpga的mp3音樂(lè)播放器設(shè)計(jì)
- 基于ZSP的MP3播放器SoC設(shè)計(jì).pdf
- 基于linux的mp3播放器設(shè)計(jì)與實(shí)現(xiàn)
- dsp數(shù)字信號(hào)處理課程設(shè)計(jì)--基于dsp的mp3播放器設(shè)計(jì)
- dsp數(shù)字信號(hào)處理課程設(shè)計(jì)報(bào)告--基于dsp的mp3播放器設(shè)計(jì)
- 基于arm的mp3播放器設(shè)計(jì)與實(shí)現(xiàn)
- 基于java的mp3播放器設(shè)計(jì)與實(shí)現(xiàn)
- 基于android的mp3播放器的設(shè)計(jì)與實(shí)現(xiàn)
- 基于vs1003的mp3音樂(lè)播放器設(shè)計(jì)
- 基于java的MP3播放器設(shè)計(jì)與實(shí)現(xiàn).doc
- mp3播放器的實(shí)現(xiàn)開(kāi)題報(bào)告
- MP3播放器的虛擬光驅(qū).pdf
- 畢業(yè)設(shè)計(jì)---mp3播放器的設(shè)計(jì)與實(shí)現(xiàn)
- 基于FPGA的MP3播放器的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 畢業(yè)設(shè)計(jì)---mp3播放器的設(shè)計(jì)與實(shí)現(xiàn)
- 基于android的mp3音樂(lè)播放器設(shè)計(jì)畢業(yè)設(shè)計(jì)論文
評(píng)論
0/150
提交評(píng)論