版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 題目 基于DSP的MP3播放器設計</p><p><b> 一 技術指標</b></p><p><b> 表一 技術指標</b></p><p><b> 二 功能描述</b></p><p><b> 表二 功能
2、描述</b></p><p><b> 三 方案論證</b></p><p><b> 1 硬件要求</b></p><p> 預期的MP3播放器的目標系統(tǒng)硬件要求實現(xiàn)以下功能:</p><p> · 能夠存儲一定量的MP3碼流文件,供解碼系統(tǒng)使用。在系統(tǒng)初步實現(xiàn)時,存
3、儲的碼流長度至少要保證能夠從主觀上感受到音頻信號解碼的效果;</p><p> · 能夠對MP3碼流進行解碼,從MP3格式恢復成PCM碼流。系統(tǒng)應該能夠保證解碼過程的正確性,并能夠解碼算法在實現(xiàn)過程中所需要的存儲空間、計算速度等需求;</p><p> · 能夠把解碼后輸出的PCM碼流通過揚聲設備,如耳機、音箱等播放出來,這樣才能夠從直觀上判斷解碼的效果,并且方便后
4、期在使用該系統(tǒng)方案時進行直觀性能評價和直接應用;</p><p> · 能夠滿足系統(tǒng)的功率要求。對于電子類便攜式系統(tǒng),或者嵌入式應用方案來說,系統(tǒng)的功耗要比較低,用電池供電能夠滿足系統(tǒng)的工作需要。</p><p><b> 2 軟件要求</b></p><p> 系統(tǒng)的軟件應該能夠實現(xiàn)以下功能:</p><p
5、> · 能夠從數(shù)據(jù)存儲介質中讀取MP3碼流數(shù)據(jù),要能保證數(shù)據(jù)讀取的速度滿足系統(tǒng)的需要;</p><p> · 能夠正確對MP3碼流進行解碼,并且以所需要的格式和方式輸出。解碼算</p><p> 法要在目標系統(tǒng)中實現(xiàn),因此,不但要保證算法的正確性,也要保證算法的適應</p><p> 性,充分利用目標系統(tǒng)性能特性,并滿足系統(tǒng)的運算速
6、度要求;</p><p> · 能夠正確協(xié)調硬件各個模塊的工作,提供正確的芯片控制信號,這項軟件</p><p> 功能是專門針對硬件的,需要根據(jù)目標系統(tǒng)的硬件需求來設計實現(xiàn);</p><p><b> 3 兩種設計方案</b></p><p> 為了能夠設計和實現(xiàn)出較高性能的系統(tǒng),需要了解當前的MP3
7、解碼器系統(tǒng)的實現(xiàn)方案。市場調查和技術咨詢的結果顯示,目前MP3播放器系統(tǒng)MP3解碼模塊一般有兩種實現(xiàn)方案。</p><p> 第一、使用專業(yè)的MP3解碼芯片,輔以簡單的外圍電路實現(xiàn)。這種方案的優(yōu)點是系統(tǒng)個體集成度高,電路結構緊湊,實現(xiàn)相對比較簡單,能夠很快設計實現(xiàn)出目標系統(tǒng)并投入使用,但是由于使用的是專業(yè)芯片,芯片中的功能模塊即使能擴充,幅度和范圍都相對較小,系統(tǒng)很難進行算法升級或功能擴充,在嵌入式應用中與原系
8、統(tǒng)的集成度不高。</p><p> 第二、以通用數(shù)字信號處理器(DSP,Digital Signal Processor)為核心,搭建相應的外部電路形成一個系統(tǒng),解碼功能通過對數(shù)字信號處理芯片編程來實現(xiàn)。這種方案中,使用一定開發(fā)環(huán)境進行軟件的設計實現(xiàn)和調試測試。為了滿足解碼系統(tǒng)的需求,需要根據(jù)性能和技術要求,對通用的數(shù)字信號處理芯片進行外圍電路擴充。這種方案的優(yōu)點是系統(tǒng)實現(xiàn)的靈活性高,功能的可擴展性強,系統(tǒng)成本
9、可以通過對芯片的選擇控制到相對較低的水平,而且對于同樣使用數(shù)字信號處理芯片實現(xiàn)的系統(tǒng)來說,能最大程度地進行系統(tǒng)集成。但是由于整個系統(tǒng)從硬件到軟件都需要自行設計和搭建,系統(tǒng)實現(xiàn)的難度和復雜度比較高。</p><p> 對于本系統(tǒng)設計采用方案二,即采用以DSP實現(xiàn)編解碼的系統(tǒng)。</p><p><b> 四 設計方案</b></p><p>
10、 基于DSP的系統(tǒng)設計方案</p><p> MP3解碼器的解碼算法完全由DSP芯片實現(xiàn),其控制部分用單片機實現(xiàn),作為硬件電路設計的一個部分。電路的整體設計與開發(fā)需要綜合考慮前面兩部分程序算法接口內容,可以在進行詳細的程序設計的基礎上進行。這樣,可以把MP3解碼器的開發(fā)工作分為兩大模塊,即MP3解碼程序DSP實現(xiàn),即軟件設計,以單片機控制程序和電路板設計部分,即硬件設計。</p><p>
11、; MP3系統(tǒng)開發(fā)從模塊上可以劃分為硬件開發(fā)和軟件開發(fā)兩個部分,軟件主要實現(xiàn)MP3解碼算法,單片機實現(xiàn)存儲器訪問控制,MP3文件播放控制等功能。系統(tǒng)總體的功能結構如圖一所示。</p><p> 圖5.1 系統(tǒng)結構框圖</p><p> 軟件系統(tǒng)設計方案是用DSP軟件實現(xiàn)MP3解碼算法功能,并完成相應的接口訪問功能,軟件功能圖如圖二所示。</p><p> 圖
12、5.2 MP3解碼器軟件系統(tǒng)功能原理圖</p><p><b> 五 系統(tǒng)整體框圖</b></p><p> MP3解碼算法要被用來實現(xiàn)數(shù)碼MP3實時解碼適配器,所以必須通過硬件實現(xiàn)其算法。本系統(tǒng)以DSP(TMS320VC5416)作為解碼的主要部分,還包括音頻D/A轉換,單片機的控制模塊,電源系統(tǒng),存儲器模塊等組成,圖三給出了系統(tǒng)框圖。</p>
13、<p> 圖5.3 系統(tǒng)整體框圖</p><p><b> 六 硬件電路設計</b></p><p><b> 1 主譯碼模塊</b></p><p> (1) TMS320C6711接口與時鐘電路</p><p> veloci結構使C6000 DSP成為高性能的DSP芯片
14、。典型的VLIW結構由多個并行運行的執(zhí)行單元組成,這些單元在單個時鐘周期內可執(zhí)行多條指令。并行是突破傳統(tǒng)設計而獲得高性能的關鍵。</p><p> C6711處理器由三個主要部分組成:CPU內核、外設和存儲器。CPU中8個功</p><p> 能單元可以并行操作,這些功能單元被分成類似的兩套,每套由4個基本功能單元組成。CPU有兩組寄存器,每組寄存器由16個32位寄存器組成。由于在運行
15、期間個做硬件數(shù)據(jù)相關性的檢查,所以程序的并行性在編譯時就被確定。片內程序存儲器的總線寬度為256的,使每個周期可取8條32位指令。</p><p> C6711腆芯片包括片內程序存儲器和數(shù)據(jù)存儲器,有些芯片將這些存儲器作為高速緩沖存儲器。外設包括直接存儲器訪問(DMA)、低功耗邏輯、外部存儲器接口、串口、擴展總線或主機口和定時器等。</p><p><b> 具有以下特點:&
16、lt;/b></p><p> 1 運行速度快。指令周期為6ns,峰值運算能力為1336MIPS,對于單精度運算可達1G FLOPS,對于算精度運算可達250MFLOPS.</p><p> 2 硬件支持IEEE格式的32位單精度與64為雙精度浮點操作。</p><p> 3 繼承了32*32bit的乘法器,其結果可為32或64bit.</p>
17、;<p> 4 C6711的指令集在C62的指令集基礎上增加了浮點執(zhí)行能力,可以看作是C62指令集的超集。</p><p> 與C62系列芯片一樣,由于其出色的運算能力、高效的指令集、智能外設、大容量的片內存儲器和大范圍的尋址能力,這個系列的芯片適合用于基站數(shù)字波束形成、圖像處理、語音識別等對運算能力和存儲量有高要求的應用場合。</p><p> 圖6.1 時鐘,JTA
18、G和DSP接口電路</p><p> 時鐘電路有25MHZ晶振,兩片ICS504和SN74LVTH125PW組成,如圖所示</p><p><b> 圖6.2 時鐘電路</b></p><p> ?。?) JTAG仿真口電路</p><p> 連接測試組(JTAG)接口用于連接最小系統(tǒng)和仿真器,實現(xiàn)仿真器對DSP的
19、訪問,JTAG接口的連接需要和仿真器上的接口一致。</p><p> 一般情況下,最小系統(tǒng)板需要引出雙排的14腳插針,圖中引腳間隔為0.1英寸,引腳寬度為0.025英寸,引腳長度為0.235英寸。在大多數(shù)情況下,如果開發(fā)板和仿真器之間的連接電纜不超過6英寸,可采用上述接法,在EMU0和EMU1接上拉電阻4.7K。</p><p> 圖6.3 JTAG電路</p><
20、;p><b> 2 模擬音頻模塊</b></p><p> 聲音采集電路以TI公司的音頻編解碼器TLV320AIC23為核心來完成,AIC23把麥克風輸出的模擬音頻信號轉換成數(shù)字音頻信號,形成PCM碼流,送給DSP芯片。DSP則以DMA方式,通過多通道緩沖串口讀取PCM樣值,并在片內RAM建立幀緩沖區(qū),每幀的大小為12,DSP通過I2C接口對芯片的內部寄存器進行控制設置,使其工作在
21、合適的的工作模式下。</p><p> (1) A1C23與6711的連接方式</p><p> AIC23與DSP的接口有兩個:一個是控制口,用于設置AIC23的工作參數(shù);另一個是數(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接口無縫連接,方便地實現(xiàn)主模式與從模式兩種工作方式
23、。當McASP為從模式時,McASP的接收時鐘與幀同步信號都由AIC23來提供;當McASP為主模式時,McASP產生所有的信號。McASP串口相連接。采用DSPMode工作方式。AIC23的數(shù)據(jù)口可以和6711的McASP接口無縫連接,方便地實現(xiàn)主模式與從模式兩種工作方式。當McAS為從模式時,McASP的接收時鐘與幀同步信號都由AIC23來提供;當McAS為主模式時,McASP產生所有的信號。</p><p>
24、;<b> AIC23的控制口</b></p><p> AIC23的控制口有兩種工作方式:兩線制的I2C方式 (MODE為低);三線制的SPI方式(MODE為高),文中采用I2C方式,時序圖如圖4.6所示。</p><p> 圖6.4 I2C總線配置AIC23的時序圖</p><p> 使用I2C總線對AIC23進行配置時,I2C總
25、線選擇7位地址的尋址方式,由于AIC23的寄存器只有寫操作無讀操作,因而其通訊協(xié)議規(guī)定每個WORD的前7Bit為寄存器的地址,后1Bit為寄存器內容。在兩線制的I2C方式下SDI為串行數(shù)據(jù)線,SCLK為串行時鐘線,開始條件是當SCLK為高而SDI為下降沿,1到7個位時鐘傳輸寄存器地址,R/W位決定數(shù)據(jù)傳輸方向,第9個位時鐘識別地址并接受數(shù)據(jù)傳輸,后2個8位時鐘傳輸控制數(shù)據(jù)位(9位)。單片AIC23接口電路。</p><
26、;p> 圖6.5 音頻轉換電路</p><p><b> 3 電源模塊</b></p><p> TMS320C6711的內核電壓典型值為1.26V,電壓范圍為1.1~1.8V;外部接口電壓典型值為3.3V,電壓范圍為3.0~3.6V。另外單片機需+5V供電;電平轉換電路需3.3V供電;故電源系統(tǒng)有5V、3.3V和1.26V四種電壓。電系統(tǒng)的5V電壓由外部
27、穩(wěn)壓電源供給;3.3V和1.26V由系統(tǒng)內部線性電壓調節(jié)器提供。采用TI公司的TPS767D3011線性調壓電路芯片,能滿足系統(tǒng)設計要求。</p><p> TPS767D3011為雙輸出低漏電壓調整器。其特點如下:具有快速瞬態(tài)響應功能;</p><p> 3.3V/1.26V可調電壓輸出;</p><p> 輸出電流范圍為0~1A;</p>&
28、lt;p> 200MS延遲的雙通道上電復位;</p><p><b> 熱關斷保護;</b></p><p> 超低靜態(tài)電流,典型值為80uA;關斷電流為1uA。</p><p> 采用TPS767D3011構成的電源電路如圖6.2所示。從外部穩(wěn)壓電源引入5V電壓。+5V電壓一方面輸入給TPS767D3011,經TPS767D30
29、11后輸出電壓1.26V和3.3V,另一方面又直接供給單片機電源。</p><p> 圖6.6 電源電路</p><p><b> 4 存儲擴展</b></p><p> (1) SDRAM擴展</p><p> 本系統(tǒng)采用MICron公司生產的MT48LC4M16AZ作為SDRAM存儲芯片,并可與DSP完全兼
30、容,能夠與6711實現(xiàn)無縫連接。MT48LC4M16AZ連線圖如圖4.12所示。通過對6711的EMIF與SDRAM相關寄存器的設置之后,DSP對SDRAM的訪問操作將變的非常透明,可像訪問片外SRAM一樣訪問它,因此非常方便。系統(tǒng)中采用一片Mieron公司的MT48LC4M16AZ,數(shù)據(jù)寬度16bit,工作電壓為3.3V。該芯片可以滿足系統(tǒng)對內存容量和讀寫速度的要求。板上通過6711的EMIF總線擴展了一片64M位(IM*4Blank
31、*16)的SDRAM,它將占用oM642的石而和瓦1二個片外存儲空間可尋址范圍oXo40000一oX7FFFFF:最大配置時,板上可安裝一片128M為的SDRAM,它將占用6711的CEO一CE3。全部四個片外存儲空間,可尋址范圍0x040000一OxFEFFFF(6711狀態(tài)寄存器ST3中的MPNMC=O),或oxO40000一OxFFFFFF(MPNMC=0),上電復位時,MPNMC被清0。由于EMIF每個片選的最大空間為64M比特
32、,所以一片64M比特的</p><p> 圖6.7 SDRAM擴展電路</p><p> (2) FLASH存儲器模塊</p><p> 本系統(tǒng)采用SST公司推出的多用途、高性能、低電壓、基于CMOS的FLASH存儲器SST39VF80OA,其容量為SMbit(512kx16bit),只需2.7V的電壓就可完成讀、寫和擦除操作,寫入一個字節(jié)(sbit)僅需2
33、0,s,整個存儲器的擦除只需8s。FLASH存儲器電路的連接圖如圖4.13所示。</p><p> 圖6.8 FLASH擴展電路</p><p> 由于本系統(tǒng)DSP采用ROM加載方式,在上電復位之后首先將CE1空間的程序代碼搬到片內地址O處開始運行,因此FLASH主要分配到DSP的外部CE1空間。為使DSP能夠正確地從FLASH引導并加載程序,還需配置相應的引腳。由于C6000系列D
34、SP提供了與FLASH的無縫接口,因此設計6711與FLASH的接口電路就變得相對較簡單。</p><p><b> (3) ROM模塊</b></p><p> 采用EPROM芯片AT29LV010A-15JC存儲程序,接線圖如下;</p><p> 圖6.9 ROM電路</p><p><b>
35、5 單片機控制模塊</b></p><p> (1) USB接口電路與控制</p><p> 下面介紹以下PDIUSBD12芯片。</p><p> 圖6.10 PDIUSBD12芯片引腳</p><p> D0~D7:雙向8位數(shù)據(jù)線。</p><p> ALE: 地址鎖存使能信號。</p
36、><p> CLKOUT:可編程時鐘輸出。</p><p> /INT: PDIUSBD12中斷輸出。</p><p> D-: USB D-數(shù)據(jù)線。</p><p> D+: USB D+數(shù)據(jù)線。</p><p> PDIUSBD12適應于不同類型的設備,有四種不同的模式:非同步傳輸,同步輸出傳輸,同步輸入傳輸
37、,同步輸出/輸入傳輸。共有3各端點,分別為端點0,端點1和端點2。端點是一個USB設備唯一可以確認的部分,它是主機和設備之間的通信流終點。每一個USB邏輯設備都包括一個端點集合,PC機應用軟件只能通過一個或多個端點與一個USB設備通信。在設備接入時,每個邏輯設備都有一個由系統(tǒng)分配的唯一地址,而一個設備上的任一個端點都有一個有設備確定的唯一的標識和端點號,利用設備的地址和端點號就可以唯一指定任一個端點。</p><p&
38、gt; 所有的USB設備都要擁有端點0,它總是在設備一經接入和上電時就進行配置。該端點用于對一個邏輯設備進行初始化和一般的操作。端點0支持控制傳輸,通過它訪問一般的USB狀態(tài)和控制操作。</p><p> 除了端點0外,功能設備還具有其他端點,如PDIUSBD12的端點1和端點2.低速功能設備有兩個端點可供選擇,而一個全速設備最多可以有16個輸入端點和16個輸出端點。</p><p>
39、 ?。?) 單片機與鍵盤控制</p><p> 單片機采用80C52芯片,實現(xiàn)按鍵管理,及USB控制。</p><p> 圖6.11 USB,鍵盤和單片機接口電路</p><p><b> 6 LCD擴展</b></p><p> LCD 模塊選擇 VPG240128TA-SC-HT-LED04,LCD工作電
40、壓與DSP的電壓不匹配,需要做電平匹配,LCD電平轉換芯片SN74LVC4245A ;LCD模塊通過排線與單板連接。</p><p> 圖6.12 LCD顯示接口電路</p><p><b> 七 PCB板設計</b></p><p> 在MP3播放機PCB板設計中,經過合理布局,全面滿足了外觀和結構方面的需求。同時在數(shù)字信號部分精心
41、考慮信號線走向,盡可能多地增加鋪地面積,減少分布參數(shù)的影響,使干擾減少到合理范圍。兼顧信號質量和成本后,最終PCB板采用了六層板設計。</p><p><b> 八 系統(tǒng)軟件設計</b></p><p><b> 1 CVSD編碼</b></p><p> 語音信號采用比較容易實現(xiàn)的CSVD編碼,也即線性增量調制算
42、法編碼方法,實現(xiàn)對語音信號的編碼以及相應的解碼算法。</p><p> CVSD是一種量階隨著輸入語音信號平均斜率大小而連續(xù)變化的增量調制方法。他的工作原理是使用多個連續(xù)可變斜率的線段來逼近語音信號,當斜率為正時,對應的數(shù)字編碼為1;當斜率為負時,對應的數(shù)字編碼為0。當CVSD工作于編碼方式時,其系統(tǒng)框圖如7.1,語音輸入信號經采樣得到數(shù)字信號,數(shù)字信號與積分器輸出信號¥比較后輸出偏差信號,偏差信號經判決后輸出
43、數(shù)字編碼,該信號同時作為積分器輸出斜率的機型控制信號和積分器輸出斜率邏輯的輸入信號。在每個時鐘周期內,若語音信號大于積分器輸出信號,則判決輸出為1,積分器輸出上升一個量階;若語音信號小于積分器輸出信號,則判決輸出為0,積分器下降一個量階。</p><p> 圖8.1 CSVD編碼系統(tǒng)框圖</p><p> 當CSVD工作于解碼方式時,其系統(tǒng)框圖如圖7.2。在每個時鐘周期內,數(shù)字編碼被送
44、到連碼檢測器,然后送到斜率幅度控制電路一控制積分器輸出斜率的大小。若數(shù)字編碼輸入為1,則積分器的輸出上升一個量階,這相當于編碼過程的逆過程。積分器的輸出通過低通濾波器平滑濾波后將重現(xiàn)輸入語音信號。</p><p> 圖7.2 CSVD解碼系統(tǒng)框圖</p><p> 可見輸入信號的波形上升越快,輸出的連1碼就越多,同樣下降越快連0碼越多,CVSD編碼能夠很好地反應輸入信號的斜率大小。為
45、使積分器的輸出能夠更好地逼近輸入語音信號,量階隨著信號斜率大小而變化,當信號斜率絕對值很大,編碼出現(xiàn)3個連1或連0碼時,則量階加一個增量,當不出現(xiàn)上述碼型時,量階則相應地減小。</p><p> 為了減小編碼及譯碼的偏差,要求編碼和譯碼過程使用相同的時鐘頻率,而且采樣頻率應符合耐酸斯特采樣定律。</p><p> CSVD通過不斷改變量階大小來跟蹤信號的變化以減小顆粒噪聲與斜率過程失真
46、,量階調整是基于過去的3個或4個樣值輸出。具體編碼程序如圖7.3,具體解碼程序如圖7.4.</p><p> 圖7.3 語音編碼流程圖 圖7.4 語音解碼流程圖</p><p> 2 CVSD編碼的C語言程序代碼</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> 八* 軟硬件電路調試</p><p><b> 九 總結</b></p><p> 本文通過MP3的設計,熟
122、悉并掌握了C6711芯片,TLV320AIC23芯片以及語音編解碼原理;</p><p><b> 十 參考書目</b></p><p> ?。?)宋亞玲, MP3音頻編碼算法的DSP實現(xiàn)及優(yōu)化, 北京工業(yè)大學, 2006.</p><p> ?。?)王希公, MP3數(shù)碼音頻播放機設計 ,天津大學工程碩士學位論文, 2004.</p&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于dsp的mp3播放器設計
- 基于mp3播放器的設計
- 基于DSP的MP3播放器的設計與實現(xiàn).pdf
- mp3播放器設計設計
- 基于fpga的mp3音樂播放器設計
- 基于ZSP的MP3播放器SoC設計.pdf
- 基于linux的mp3播放器設計與實現(xiàn)
- dsp數(shù)字信號處理課程設計--基于dsp的mp3播放器設計
- dsp數(shù)字信號處理課程設計報告--基于dsp的mp3播放器設計
- 基于arm的mp3播放器設計與實現(xiàn)
- 基于java的mp3播放器設計與實現(xiàn)
- 基于android的mp3播放器的設計與實現(xiàn)
- 基于vs1003的mp3音樂播放器設計
- 基于java的MP3播放器設計與實現(xiàn).doc
- mp3播放器的實現(xiàn)開題報告
- MP3播放器的虛擬光驅.pdf
- 畢業(yè)設計---mp3播放器的設計與實現(xiàn)
- 基于FPGA的MP3播放器的設計與實現(xiàn).pdf
- 畢業(yè)設計---mp3播放器的設計與實現(xiàn)
- 基于android的mp3音樂播放器設計畢業(yè)設計論文
評論
0/150
提交評論