2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  課 程 設(shè) 計(jì) 任 務(wù) 書</p><p><b>  摘 要</b></p><p>  本文簡要闡述了語音信號擴(kuò)展U律的基本原理,可以將高位的數(shù)據(jù)擴(kuò)展成低位的數(shù)據(jù),它適用于聲音信號的播放和傳輸系統(tǒng),在設(shè)計(jì)中借助MATLAB信號處理工具箱FDAtool工具設(shè)計(jì)了語音信號擴(kuò)展系數(shù),然后在CCS中以TMS320C55x芯片的匯編語言編程實(shí)現(xiàn)了該語音

2、信號擴(kuò)展。利用MATLAB設(shè)計(jì)語音信號擴(kuò)展,可以隨時(shí)對比設(shè)計(jì)要求和語音信號擴(kuò)展特性調(diào)整參數(shù),直觀簡便,極大的減輕了工作量,有利于語音信號擴(kuò)展設(shè)計(jì)的最優(yōu)化。另外文中還介紹CCS開發(fā)環(huán)境。文中所給程序已經(jīng)經(jīng)過軟件仿真驗(yàn)證,所設(shè)計(jì)的語音信號擴(kuò)展符合設(shè)計(jì)要求。</p><p>  關(guān)鍵詞:DSP;語音信號擴(kuò)展;MATLAB;Code Composer Studio(CCS);TMS320C55x</p>&

3、lt;p><b>  目 錄</b></p><p><b>  緒論1</b></p><p>  1 語音信號擴(kuò)展u律設(shè)計(jì)任務(wù)及目的……………………………………2</p><p>  1.1語音信號擴(kuò)展U律設(shè)計(jì)任務(wù)2</p><p>  1.2語音信號擴(kuò)展U律設(shè)計(jì)目的2</

4、p><p>  1.3 語音信號擴(kuò)展U律設(shè)計(jì)基本原理2</p><p>  1.3.1 語音信號擴(kuò)展編碼技術(shù)的發(fā)展2</p><p>  1 .3.2 DSP硬件實(shí)現(xiàn)數(shù)據(jù)擴(kuò)展解壓的簡單流程2</p><p>  1.3.3 u律語音信號擴(kuò)展3</p><p>  2 TMS320C5X的硬件結(jié)構(gòu)4&

5、lt;/p><p>  2.1 C55X的CPU體系結(jié)構(gòu)4</p><p>  2.2 指令緩沖單元(I)4</p><p>  2.3 程序流程單元(P)4</p><p>  2.4 地址程序單元(A)5</p><p>  2.5 數(shù)據(jù)計(jì)算單元(D)5</p><p>  

6、3 語音信號擴(kuò)展U律設(shè)計(jì)設(shè)計(jì)過程7</p><p>  3.1 設(shè)計(jì)步驟7</p><p>  4 語音信擴(kuò)展u律設(shè)計(jì)軟件程序7</p><p>  5 語音信號擴(kuò)展u律設(shè)計(jì)的CCS實(shí)現(xiàn)15</p><p>  5.1 簡述CCS環(huán)境15</p><p>  5.1.1 CCS主要特點(diǎn)15<

7、;/p><p>  5.1.2 DSP/BIOS和API函數(shù)以及RTDX插件15</p><p>  5.2 CCS配置16</p><p>  5.3 CCS環(huán)境中工程文件的使用16</p><p>  5.3.1 建立工程文件16</p><p>  5.3.2 創(chuàng)建新文件17</p>

8、<p>  5.3.3 向工程項(xiàng)目中添加文件17</p><p>  5.4 編譯鏈接和運(yùn)行目標(biāo)文件18</p><p>  5.4.1 對程序進(jìn)行編譯鏈接并裝載.out文件18</p><p>  6仿真結(jié)果及討論19</p><p><b>  結(jié) 論14</b></p>&

9、lt;p><b>  參考文獻(xiàn)25 </b></p><p><b>  緒 論</b></p><p>  至20世紀(jì)70年代末以來,由于數(shù)字技術(shù)和微電子技術(shù)的迅猛發(fā)展給語音信號擴(kuò)展提供了先進(jìn)的技術(shù)手段,基于計(jì)算機(jī)的語音信號擴(kuò)展也就從信息處理、自動(dòng)控制系統(tǒng)論、計(jì)算機(jī)科學(xué)、數(shù)據(jù)通信、電視技術(shù)等學(xué)科中脫穎而出,成為研究“語音信號的獲取、傳

10、輸、存儲(chǔ)、變換、顯示、理解與綜合利用”的一門嶄新學(xué)科</p><p>  數(shù)字圖像處理(Digital Image Processing),就是利用數(shù)字計(jì)算機(jī)或則其他數(shù)字硬件,對從圖像信息轉(zhuǎn)換而得到的電信號進(jìn)行某些數(shù)學(xué)運(yùn)算,以提高圖像的實(shí)用性。例如從衛(wèi)星圖片中提取目標(biāo)物的特征參數(shù),三維立體斷層圖像的重建等??偟膩碚f,數(shù)字圖像處理包括點(diǎn)運(yùn)算、幾何處理、圖像增強(qiáng)、圖像復(fù)原、圖像形態(tài)學(xué)處理、圖像編碼、圖像重建、模式識別

11、等。目前數(shù)字圖像處理的應(yīng)用越來越廣泛,已經(jīng)滲透到工業(yè)、醫(yī)療保健、航空航天、軍事等各個(gè)領(lǐng)域,在國民經(jīng)濟(jì)中發(fā)揮越來越大的作用。 對圖像進(jìn)行一系列的操作,以達(dá)到預(yù)期的目的的技術(shù)稱作圖像處理。圖像處理可分為模擬圖像處理和數(shù)字圖像處理兩種方式。</p><p>  近年來,DSP技術(shù)在我國也得到了迅速的發(fā)展,不論是在科學(xué)技術(shù)研究,還是在產(chǎn)品的開發(fā)等方面,在數(shù)字信號處理中,其應(yīng)用越來越廣泛,并取得了豐碩的成果。數(shù)字濾波

12、占有極其重要的地位。一個(gè)完備的語音信號處理系統(tǒng)不但要具備語音信號的采集和回放功能,而且更重要的是要能完成復(fù)雜的語音信號分析和處理處理算法,通常這些算法運(yùn)算量大,而且又要滿足實(shí)時(shí)或準(zhǔn)時(shí)的快速高效處理要求,因此需采用高速DSP芯片,另外,在要求系統(tǒng)滿足較好的通用性的同時(shí),針對不同的應(yīng)用和不斷出現(xiàn)的新的處理方法,還要使系統(tǒng)便于功能的改進(jìn)和擴(kuò)展。為此,我們以PC機(jī)為主機(jī),以TMS320C50為信號處理核心設(shè)計(jì)了該系統(tǒng),TMS320C50是美國T

13、exas Instrument 公司的16位定點(diǎn)DSP產(chǎn)品,它包括改進(jìn)的哈佛結(jié)構(gòu),高性能CPU,片內(nèi)存儲(chǔ)器,在外圍接口以及一套高效的泄編指令集,計(jì)算速度可達(dá)40Mips且性能價(jià)格比好</p><p>  1 語音信號擴(kuò)展U律設(shè)計(jì)任務(wù)及目的</p><p>  語音信號擴(kuò)展U律設(shè)計(jì)任務(wù)</p><p> ?。?)完成語音信號采集;</p><p&

14、gt; ?。?)對語音信號進(jìn)行U律擴(kuò)展;</p><p> ?。?)傳輸擴(kuò)展后的信號</p><p>  語音信號擴(kuò)展U律設(shè)計(jì)目的</p><p>  本設(shè)計(jì)的目的在于通過使用DSP的程序設(shè)計(jì)完成對語音信號的擴(kuò)展,既可以通過軟件實(shí)現(xiàn),也可以通過硬件實(shí)現(xiàn)。進(jìn)行程序的設(shè)計(jì),并在CCS軟件環(huán)境下進(jìn)行調(diào)試,同時(shí)也加深學(xué)生對數(shù)字信號處理器的常用指標(biāo)和設(shè)計(jì)過程的理解。</

15、p><p>  1.3 語音信號擴(kuò)展U律設(shè)計(jì)基本原理</p><p>  1.3.1 語音信號擴(kuò)展編碼技術(shù)的發(fā)展</p><p>  隨隨著通信、計(jì)算機(jī)網(wǎng)絡(luò)等技術(shù)的飛速發(fā)展,語音擴(kuò)展編碼技術(shù)得到了快速發(fā)展和廣泛應(yīng)用,尤其是最近20年,語音擴(kuò)展編碼技術(shù)在移動(dòng)通信、衛(wèi)星通信、多媒體技術(shù)以及IP電話通信中得到普遍應(yīng)用,起著舉足輕重的作用。   語音擴(kuò)展編碼技術(shù)的類別

16、  語音編碼就是將模擬語音信號數(shù)字化,數(shù)字化之后可以作為數(shù)字信號傳輸、存儲(chǔ)或處理,可以充分利用數(shù)字信號處理的各種技術(shù)。為了減小存儲(chǔ)空間或降低傳輸比特率節(jié)省帶寬,還需要對數(shù)字化之后的語音信號進(jìn)行擴(kuò)展編碼,這就是語音擴(kuò)展編碼技術(shù)。   語音的擴(kuò)展編碼方法歸納起來可以分為三大類:波形編碼、參數(shù)編碼和混合編碼。</p><p>  1.3.2 DSP硬件實(shí)現(xiàn)數(shù)據(jù)擴(kuò)展解壓的簡單流程</p><p&

17、gt;  DSP將傳輸來的擴(kuò)展后的數(shù)據(jù)進(jìn)行解壓成16位或32位,而后對解壓后的數(shù)據(jù)進(jìn)行分析,處理,最后將處理后的數(shù)據(jù)按照要求擴(kuò)展成8位的數(shù)據(jù)格式輸出到相應(yīng)設(shè)備以供讀?。篋R→RSR→RBR→解壓→RJUST→DDR→DXR→擴(kuò)展→XSR→DX</p><p>  在進(jìn)行擴(kuò)展時(shí),采樣后的12位數(shù)據(jù),默認(rèn)其最高位為符號位,擴(kuò)展時(shí)要保持最高位即符號位不變;原數(shù)據(jù)的后11位要擴(kuò)展成7位。這7位碼由3位段落碼和4位段內(nèi)碼組

18、成,具體擴(kuò)展變換后的根據(jù)后11位數(shù)據(jù)大小決定。擴(kuò)展后數(shù)據(jù)的最高位(第7位)表示符號,量階分別為1,1,2,4,8,16,32,64,由擴(kuò)展后數(shù)據(jù)的第6位到第4位決定,第3位到第0位是段內(nèi)碼,擴(kuò)展后數(shù)據(jù)有一定的失真,有些數(shù)據(jù)不能表示出,只能取最接近該數(shù)據(jù)的擴(kuò)展值。例如數(shù)據(jù)125,擴(kuò)展后的值為00111111,意義如下:</p><p>  從左往右,第一個(gè)0為符號位,表示為一個(gè)正數(shù);后面的011為段落碼,表示量階為

19、4,起始數(shù)據(jù)為64,后面的4個(gè)1111為段內(nèi)碼,表示值為15</p><p>  最終結(jié)果為:64+4*15=124.</p><p>  1.3.3 U律語音信號擴(kuò)展</p><p>  μ律算法:采用μ律算法對采集的語音數(shù)據(jù)進(jìn)行處理,μ律編碼是一種針對語音信號進(jìn)行對數(shù)壓縮非均勻量化的方案。采用μ律對信號進(jìn)行對數(shù)形式的壓縮,以便在不提高數(shù)據(jù)量的前提下提高信噪比,

20、盡管量化的位數(shù)保持不變,但動(dòng)態(tài)范圍增加了。μ律壓縮的語音信號一般用8比特抽樣數(shù)據(jù)表示,攜帶小信號信息量比大信號信息量多。從統(tǒng)計(jì)意義上講,有用信號更可能在小信號區(qū)間而非大信號區(qū)間。因此,在小信號區(qū)間需要更多的量化點(diǎn)數(shù)。</p><p><b>  μ律算法公式:</b></p><p>  其中Xmax是信號x(n)的最大幅度,u是控制壓縮程序的參數(shù),u越大壓縮就越厲害

21、</p><p>  μ律查找表內(nèi)共有256個(gè)數(shù),分別用來獲得0—7段量化電壓,其由16×16組數(shù)組成。</p><p>  由下表看大信號多數(shù)由第7段表示,三個(gè)指數(shù)位用來表示第0-7段,4個(gè)尾數(shù)位用于表示后4個(gè)有效位,還有一位符號位沒有給出。16比特輸入數(shù)據(jù)是由線性數(shù)據(jù)變換成8比</p><p>  特μ律數(shù)據(jù)(模擬傳輸),然后再從μ律轉(zhuǎn)成16比特的線性

22、數(shù)據(jù)(模擬接收),再輸出到編解碼器</p><p>  上圖給出了按律壓擴(kuò)算法的輸入輸出特性曲線,為確定壓縮量的參數(shù),它反映最大量化間隔和最小量化間隔之比。由圖可見,值越大,壓縮量越大。由于 律壓擴(kuò)的輸入和輸出關(guān)系是對數(shù)函數(shù)關(guān)系,所以這種編碼又稱為對數(shù)PCM。</p><p>  A律壓擴(kuò)與律壓擴(kuò)相比,則壓縮的動(dòng)態(tài)范圍略小些,小信號振幅時(shí)質(zhì)量要比律稍差。無論是A律還是律算法,它們的特性在輸

23、入信號振幅小時(shí)都呈線性,在輸入信號振幅大時(shí)呈對數(shù)壓縮特性。</p><p>  對于采樣頻率為8kHz,樣本精度為16位的輸入信號,使用A律壓擴(kuò)或律壓擴(kuò)編碼,經(jīng)過PCM編碼器之后每個(gè)樣本的精度為8位,輸出的數(shù)據(jù)率為64kb/s。這個(gè)數(shù)據(jù)就是CCITT ,(國際電話與電報(bào)顧問委員會(huì))推薦的G.711標(biāo)準(zhǔn):話音頻率脈沖編碼調(diào)制。</p><p>  U律的擴(kuò)展可定義為:</p>

24、<p>  U律擴(kuò)展的線性表如下:</p><p>  2 TMS320C5X的硬件結(jié)構(gòu)</p><p>  2.1 C55X的CPU體系結(jié)構(gòu)</p><p>  C55X有1條32位的程序數(shù)據(jù)總線(PB),5條16位數(shù)據(jù)總線(BB、CB、DB、EB、FB)和1條24位的程序地址總線及5條23位地址總線,這些總線分別與CPU相連??偩€通過存儲(chǔ)單元接口(

25、M)與外部程序總線和數(shù)據(jù)總線相連,實(shí)現(xiàn)CPU對外部存儲(chǔ)器的訪問。這種并行的多總線結(jié)構(gòu),使CPU能在一個(gè)CPU周期內(nèi)完成1次32位程序代碼讀、3次16位數(shù)據(jù)讀和兩次16位數(shù)據(jù)寫。C55X根據(jù)功能的不同將CPU分為4個(gè)單元,指令緩沖單元(I)、程序流程單元(P)、地址流程單元(A)、和數(shù)據(jù)計(jì)算單元(D)。</p><p>  讀程序地址總線(PDA)上傳送24位的程序代碼地址,由讀程序總線(PB)將32位的程序代碼送

26、入指令緩沖單元進(jìn)行譯碼[1]。</p><p>  2.2 指令緩沖單元(I)</p><p>  C55X的指令緩沖單元有指令緩沖隊(duì)列IBQ和指令譯碼器組成。在每個(gè)CPU周期內(nèi),I單元將從程序數(shù)據(jù)接收的4B程序代碼放入指令緩沖隊(duì)列,指令譯碼器從隊(duì)列中取6B程序代碼,根據(jù)指令的長度可對8位、16位、24位、32位和48位的變長指令進(jìn)行譯碼,然后把譯碼數(shù)據(jù)送入P單元、A單元和D單元去執(zhí)行。

27、</p><p>  2.3 程序流程單元(P)</p><p>  程序流程單元有程序地址產(chǎn)生電路和寄存器組湊成。程序流程單元產(chǎn)生所有程序空間的地址,并控制指令的讀取順序。</p><p>  程序地址產(chǎn)生邏輯電路的任務(wù)是產(chǎn)生讀取空間的24位地址。一般情況下,它產(chǎn)生的是連續(xù)地址,如果指令要求讀取非連續(xù)地址的程序代碼時(shí),程序地址產(chǎn)生邏輯電路能夠接收來自I單元的立即

28、數(shù)和來自D單元的寄存器值,并將產(chǎn)生的地址傳送到PAB。</p><p>  在P單元中使用的寄存器分為5種類型。</p><p>  程序流寄存器:包括程序計(jì)數(shù)器、返回地址寄存器和控制流程關(guān)系寄存器。</p><p>  塊重復(fù)寄存器:包括塊重復(fù)寄存器0和1(BRC0、BRC1)BRC1的保存寄存器(BRS1)、塊重復(fù)起始地址寄存器0和1以及塊重復(fù)結(jié)束地址寄存器0和

29、1。</p><p>  單重復(fù)寄存器:包括單重復(fù)寄存器和計(jì)算單重復(fù)寄存器。</p><p>  中斷寄存器:包括中斷標(biāo)志寄存器0和1、中斷使能寄存器0和1以及調(diào)試中斷使能寄存器0和1。</p><p>  狀態(tài)奇存期:包括狀態(tài)寄存器0,1,2和3。</p><p>  2.4 地址程序單元(A)</p><p> 

30、 地址程序單元包括數(shù)據(jù)地址產(chǎn)生電路、算術(shù)邏輯電路和寄存器組構(gòu)成。</p><p>  數(shù)據(jù)地址產(chǎn)生電路能夠接收來自I單元的立即數(shù)和來自A單元的寄存器產(chǎn)生讀取數(shù)據(jù)空間的地址。對于使用間接尋址模式的指令,有P單元向DAGEN說明采用的尋址模式。</p><p>  A單元包括一個(gè)16位的算術(shù)邏輯單元,它既可以接收來自I單元的立即數(shù)也可以與存儲(chǔ)器、I/O空間、A單元寄存器、D單元寄存器和P單元寄

31、存器進(jìn)行雙向通信。</p><p>  A單元包括的寄存器有以下幾種類型。</p><p>  數(shù)據(jù)頁寄存器:包括數(shù)據(jù)頁寄存器和接口數(shù)據(jù)頁寄存器;</p><p>  指針:包括系數(shù)數(shù)據(jù)指針寄存器、堆棧針寄存器和8個(gè)輔助寄存器;</p><p>  循環(huán)緩沖寄存器:包括循環(huán)緩沖大小寄存器、循環(huán)緩沖起始地址寄存器;</p><

32、;p>  臨時(shí)寄存器:包括臨時(shí)寄存器。</p><p>  2.5 數(shù)據(jù)計(jì)算單元(D)</p><p>  數(shù)據(jù)計(jì)算單元由移位器、算數(shù)邏輯電路、乘法累加器和寄存器組構(gòu)成。D單元包含了CPU的主要運(yùn)算部件。</p><p>  D單元移位器能夠接收來自I單元的立即數(shù),能夠與存儲(chǔ)器、I/O單元、A單元寄存器、D單元寄存器和P單元寄存器進(jìn)行雙向通信,此外,還可以向

33、D單元的ALU和A單元的ALU提供移位后的數(shù)據(jù)。移位可以完成以下操作:</p><p>  對40位的累加器可以完成向左最多32位的移位操作,移位數(shù)樂意從零食寄存器讀取或由指令中的常數(shù)提供;</p><p>  對于16位寄存器、存儲(chǔ)器或I/O空間數(shù)據(jù)可完成左移31位或32位的移位操作;</p><p>  對于16位立即數(shù)可完成向左移最多15位的移位操作。<

34、/p><p>  3 語音信號擴(kuò)展U律設(shè)計(jì)過程</p><p><b>  3.1 設(shè)計(jì)步驟</b></p><p> ?。?)連接好DSP開發(fā)系統(tǒng),運(yùn)行CCS軟件;</p><p> ?。?)設(shè)計(jì)程序或鍵入下面的參考程序并保存(文件名設(shè)為jia)</p><p> ?。?) 新建兩個(gè)工程,分別添

35、加jia以及鏈接命令文件(.cmd文件);</p><p><b> ?。?)向工程添加</b></p><p>  (5)編譯、鏈接工程,生成.Out文件;</p><p> ?。?)裝載.out文件,運(yùn)行;</p><p><b> ?。?)找錯(cuò)至無錯(cuò)誤</b></p><p

36、> ?。?)在view下運(yùn)行兩程序,出現(xiàn)結(jié)果框圖。</p><p> ?。?)改變參數(shù),重新設(shè)置其工作的參數(shù),重復(fù)以上步驟并比較;</p><p>  4 語音信號U律設(shè)計(jì)軟件程序</p><p>  存儲(chǔ)器的分配(5402.cmd)</p><p><b>  MEMORY</b></p><

37、;p><b>  {</b></p><p>  PAGE 0: VECS: origin = 0080h, length = 0080h /* Internal Program RAM */</p><p>  PRAM: origin = 7600h, length = 8000h /* Internal Program RAM */&l

38、t;/p><p>  PAGE 1: SCRATCH: origin = 0060h, length = 0020h /* Scratch Pad Data RAM */</p><p>  DMARAM: origin = 0C00h, length = 0300h /* DMA buffer */</p><p>  DATA: origin =

39、1100h, length = 0080h /* Internal Data RAM */</p><p>  STACK: origin = 1180h, length = 0560h /* Stack Memory Space */</p><p>  INRAM: origin = 1900h, length = 0100h /* Internal Dat

40、a RAM */</p><p>  HPRAM0: origin = 1A00h, length = 0002h /* HPI memory accessible by Host and DSP */</p><p>  HPRAM1: origin = 1A02h, length = 0280h /* HPI memory accessible by Host and

41、 DSP */</p><p>  HPRAM2: origin = 1C82h, length = 0280h /* HPI memory accessible by Host and DSP */</p><p>  EXRAM: origin = 1F10h, length = 9000h /* External Data RAM */</p>&l

42、t;p><b>  }</b></p><p><b>  SECTIONS</b></p><p><b>  {</b></p><p>  .cinit > PRAM PAGE 0</p><p>  .text > PRAM PAGE

43、 0</p><p>  .vectors > VECS PAGE 0</p><p>  init_var > PRAM PAGE 0</p><p>  detect > PRAM PAGE 0</p><p>  vrcprg > PRAM PAGE 0</p><p>

44、;  matprg > PRAM PAGE 0</p><p>  .stack > STACK PAGE 1</p><p>  .trap > SCRATCH PAGE 1</p><p>  .const > EXRAM PAGE 1</p><p>  .data > EX

45、RAM PAGE 1</p><p>  .bss > EXRAM PAGE 1</p><p>  .cio > EXRAM PAGE 1</p><p>  .switch > EXRAM PAGE 1</p><p>  tables > EXRAM PAGE 1</p>

46、<p>  var > EXRAM PAGE 1</p><p>  svctab > EXRAM PAGE 1 /* SS_V LSP table */</p><p>  vctab > EXRAM PAGE 1 /* V LSP table */</p><p>  uv

47、ctab > EXRAM PAGE 1 /* UV LSP table */</p><p>  cuvtab > EXRAM PAGE 1 /* Stochastic codebook */</p><p>  cdbktab > EXRAM PAGE 1 /* various codebook table

48、s*/</p><p>  logtab > EXRAM PAGE 1 /* table for log2 */</p><p>  powtab > EXRAM PAGE 1 /* table for pow2 */</p><p>  hamtab > EXRAM PAGE 1

49、 /* table for hamming */</p><p>  lgwtab > EXRAM PAGE 1 /* table for lag window */</p><p>  acostab > EXRAM PAGE 1 /* table for arccos */</p><p>  sqr

50、tab > EXRAM PAGE 1 /* table for square root */</p><p>  acbtab > EXRAM PAGE 1 /* table for thresholds in acb */</p><p>  pm03tab > EXRAM PAGE 1 /* tab

51、le for x^(-0.3) computation */</p><p>  costab > EXRAM PAGE 1 /* table for cosine */</p><p>  V23 > INRAM PAGE 1</p><p>  FSK > INRAM PAGE 1</p&g

52、t;<p>  hpibuff0 > HPRAM0 PAGE 1</p><p>  hpibuff1 > HPRAM1 PAGE 1</p><p>  hpibuff2 > HPRAM2 PAGE 1</p><p>  dma_buff > DMARAM PAGE 1</p><p><

53、;b>  }</b></p><p><b>  /*主程序設(shè)計(jì)*/</b></p><p>  /*語音采集及回放程序*/</p><p>  /*用U律進(jìn)行擴(kuò)展及解壓*/</p><p>  /*采用AD50進(jìn)行A/D,D/A轉(zhuǎn)換 */ &l

54、t;/p><p>  /*燈循環(huán)閃爍程序開始*/</p><p><b>  /*L0:錄音*/</b></p><p><b>  /*L1:放音*/</b></p><p>  #include <type.h> /* 頭文件*/</p>

55、<p>  #include <board.h></p><p>  #include <codec.h></p><p>  #include <mcbsp54.h></p><p>  /* 宏定義 */</p><p>  #defineSIGN_BIT(0x80)/* Sign

56、 bit for a A-law byte. */</p><p>  #defineQUANT_MASK(0xf)/* Quantization field mask. */</p><p>  #defineNSEGS(8) /* Number of A-law segments. */</p><p>  #defineSEG_SHI

57、FT(4) /* Left shift for segment number. */</p><p>  #defineSEG_MASK(0x70)/* Segment field mask. */</p><p>  /* 函數(shù)聲明 */</p><

58、p>  void delay(s16 period);</p><p>  void led(s16 cnt);</p><p>  void initcodec(void);</p><p>  void flashenable(void);</p><p>  unsigned char data2alaw(s16 pcm_val)

59、;</p><p>  int alaw2data(unsigned chara_val);</p><p>  static int search(int val,short*table,int size);</p><p>  /* 全局變量 */</p&

60、gt;<p>  HANDLE hHandset;</p><p><b>  s16 data;</b></p><p>  s16 data1;</p><p><b>  u16 i=0;</b></p><p>  u16 temp1;</p><p>

61、<b>  u16 j=0;</b></p><p>  u16 k,l=0;</p><p><b>  u8 temp2;</b></p><p>  u16 buffer[20000];</p><p>  static short seg_end[8]={0x1F,0x3F,0x7F,0xF

62、F,0x1FF,0x3FF,0x7FF,0xFFF};</p><p>  /* 主函數(shù) */</p><p>  void main()</p><p><b>  {</b></p><p>  if (brd_init(1

63、00))</p><p><b>  return;</b></p><p>  led(2); //閃燈兩次</p><p>  initcodec(); //初始化codec</p><p>  flashenable(); //選擇片外F

64、LASH為片外存儲(chǔ)器</p><p><b>  /* </b></p><p>  delay(100);</p><p>  brd_led_toggle(BRD_LED0);</p><p>  for(i=0x9000;i<0xefff;i++)</p><p><

65、b>  { </b></p><p>  REG_WRITE(i,*(volatile u16*)DRR1_ADDR(HANDSET_CODEC));</p><p>  delay(20);</p><p><b>  }</b></p><p>  brd_led_toggle(BRD_LE

66、D1);</p><p>  delay(200);</p><p>  for(i=0x9000;i<0xefff;i++)</p><p><b>  {</b></p><p>  *(volatile u16*)DXR1_ADDR(HANDSET_CODEC)=REG_READ(i);</p>

67、<p>  delay(20);</p><p><b>  }</b></p><p>  brd_led_toggle(BRD_LED2);</p><p><b>  */ </b></p><p><b>  while (1)</b></p>

68、<p><b>  {</b></p><p>  while (!MCBSP_RRDY(HANDSET_CODEC)) {}; //等待接收handset處的采樣</p><p>  brd_led_toggle(BRD_LED0);</p><p>  data = *(volatile u16*)DRR1_ADDR(HAND

69、SET_CODEC); //從handset處讀取 </p><p><b>  采樣</b></p><p>  temp1=data2alaw(data); //對采樣進(jìn)行U律擴(kuò)展</p><p>  /* 把低地址數(shù)據(jù)放在高八位 高地址數(shù)據(jù)放在低八位 */</p><p&g

70、t;  i=i+1; </p><p>  if(i%2==1)</p><p><b>  {</b></p><p>  buffer[j]=(temp1<<=8); </p><p>  /*奇數(shù)數(shù)據(jù)左移8位 temp1=abcdefgh00000000</p>

71、;<p>  buffer[j]=temp1*/</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  buffer[j]=(buffer[j]|temp1); <

72、/p><p>  /*偶數(shù)數(shù)據(jù)與temp1取或 組成新的數(shù)據(jù)</p><p>  buffer[j]=abcdefghiabcdefghi*/</p><p>  j++; //j加1</p><p><b>  }</b></p><p>  if(i>=40000) </p>

73、<p><b>  {</b></p><p><b>  i=0;</b></p><p><b>  }</b></p><p>  if(j>=20000)</p><p><b>  {</b></p><p

74、><b>  j=0;</b></p><p>  brd_led_disable(BRD_LED0); </p><p>  brd_led_toggle(BRD_LED1); </p><p>  //點(diǎn)亮二極管1 表示放音開始</p><p>  /* 放音部分

75、 */</p><p>  for(k=0;k<40000;k++)</p><p><b>  {</b></p><p>  if(k%2==0)</p><p><b>  {</b></p><p>

76、;  temp2=(buffer[l]>>8)&0x0ff;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  temp2=buffer[l]&0x0ff

77、;</p><p><b>  l++;</b></p><p><b>  }</b></p><p>  if(l>=20000)</p><p><b>  l=0; </b></p><p>  data1=alaw2data(temp2)

78、; // U律解壓</p><p>  while (!MCBSP_XRDY(HANDSET_CODEC)) {}; </p><p>  *(volatile u16*)DXR1_ADDR(HANDSET_CODEC) = data1; //將數(shù)據(jù)寫入D/A轉(zhuǎn)換器</p><p><b>  }</b></p>&l

79、t;p>  /* 放音結(jié)束 */</p><p>  brd_led_toggle(BRD_LED0);</p><p>  brd_led_toggle(BRD_LED1); </p><p><b>  }</b></p>&

80、lt;p><b>  } </b></p><p>  } //主程序結(jié)束</p><p>  /* 子函數(shù) */

81、 </p><p>  /*******延時(shí)******/</p><p>  void delay(s16 period)</p><p><b>  {</b></p><p><b>  int i, j;</b></p

82、><p>  for(i=0; i<period; i++)</p><p><b>  {</b></p><p>  for(j=0; j<period>>1; j++);</p><p><b>  }</b></p><p><b>  

83、}</b></p><p>  /*******閃燈******/</p><p>  void led(s16 cnt)</p><p><b>  {</b></p><p>  while ( cnt-- )</p><p><b>  {</b></

84、p><p>  brd_led_toggle(BRD_LED0); //切換LED指示燈0的顯示狀態(tài)</p><p>  delay(1000);</p><p>  brd_led_toggle(BRD_LED1);</p><p>  delay(1000);</p><p>  brd_led_tog

85、gle(BRD_LED2);</p><p>  delay(1000);</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*****初始化codec**/</p><p>  void initcodec(void)&l

86、t;/p><p><b>  {</b></p><p>  /* Open Handset Codec 獲取設(shè)置codec的句柄*/</p><p>  hHandset = codec_open(HANDSET_CODEC); / Acquire handle to codec </p><p>  /*

87、Set codec parameters */</p><p>  codec_dac_mode(hHandset, CODEC_DAC_15BIT); // DAC in 15-bit mode </p><p>  codec_adc_mode(hHandset, CODEC_ADC_15BIT); // ADC in 15-bit mode </p>

88、<p>  codec_ain_gain(hHandset, CODEC_AIN_6dB); // 6dB gain on analog input to ADC </p><p>  codec_aout_gain(hHandset, CODEC_AOUT_MINUS_6dB); </p><p>  // -6dB gain on analog output fro

89、m DAC </p><p>  codec_sample_rate(hHandset,SR_8000); // 8KHz sampling rate </p><p><b>  }</b></p><p>  /*****設(shè)置flash****/</p><p>  void flashenab

90、le(void)</p><p><b>  {</b></p><p>  CPLD_CTRL2_REG|=0x0010;</p><p>  CPLD_DMCTRL_REG|=0x0040;</p><p><b>  }</b></p><p>  /*****U律擴(kuò)展

91、******/</p><p>  unsigned char data2alaw(s16 pcm_val) </p><p><b>  {</b></p><p>  intmask;</p><p><b>  intseg;</b></p><p>

92、  unsigned charaval;</p><p>  if (pcm_val >= 0) </p><p><b>  {</b></p><p>  mask = 0xD5; // 標(biāo)記 (7th) bit = 1</p><p><b>  } <

93、;/b></p><p><b>  else </b></p><p><b>  {</b></p><p>  mask = 0x55; // 標(biāo)記 bit = 0 </p><p>  pcm_val = -pcm_val;</

94、p><p><b>  }</b></p><p>  seg = search(pcm_val, seg_end, 8); </p><p>  if (seg >= 8) // out of range, 返回最大數(shù). </p><p> 

95、 return (0x7F ^ mask);</p><p><b>  else </b></p><p><b>  {</b></p><p>  aval = seg << SEG_SHIFT;</p><p>  if (seg < 2)</p><p

96、>  aval |= (pcm_val >> 1) & QUANT_MASK;</p><p><b>  else</b></p><p>  aval |= (pcm_val >>seg) & QUANT_MASK;</p><p>  return (aval ^ mask);</p&g

97、t;<p><b>  }</b></p><p><b>  }</b></p><p>  /****alaw的子程序**/</p><p>  static int search(int val,short*table,int size)</p><p><b>  

98、{</b></p><p><b>  inti;</b></p><p>  for (i = 0; i < size; i++) </p><p><b>  {</b></p><p>  if (val <= *table++)</p><p&

99、gt;  return (i);</p><p><b>  }</b></p><p>  return (size);</p><p><b>  }</b></p><p>  /*****U律解壓******/</p><p>  int alaw2data(unsi

100、gned chara_val)</p><p><b>  {</b></p><p><b>  intt;</b></p><p><b>  intseg;</b></p><p>  a_val ^= 0x55;</p><p>  t

101、 = (a_val & QUANT_MASK) << 4;</p><p>  seg = ((unsigned)a_val & SEG_MASK) >> SEG_SHIFT;</p><p>  if(seg==0) </p><p><b>  {</b></p><p>&l

102、t;b>  t += 8;</b></p><p><b>  t=(t>>3);</b></p><p><b>  }</b></p><p>  if((seg<4)&&(seg>0)) </p><p><b>  {<

103、;/b></p><p>  t +=0x108;</p><p>  t=(t>>(4-seg));</p><p><b>  }</b></p><p><b>  if(seg>3)</b></p><p><b>  {</b

104、></p><p><b>  t+=0x108;</b></p><p>  t=(t<<=(seg-4));</p><p><b>  }</b></p><p>  return ((a_val & SIGN_BIT) ? t : -t);</p>&

105、lt;p><b>  }</b></p><p>  /* 結(jié)束 */</p><p>  5 語音信號擴(kuò)展U律設(shè)計(jì)的CCS實(shí)現(xiàn)</p><p>  5.1 簡述CCS環(huán)境</p><p>  CCS,即Code Composer Studio

106、,是TI公司在1999年推出的一個(gè)開放、具有強(qiáng)大集成開發(fā)環(huán)境。它最初是由GO DSP公司為TI的C6000系列DSP開發(fā)的。在TI收購了GO DSP后,將CCS擴(kuò)展到了其它系列?,F(xiàn)在所有TI的DSP都可以使用CCS進(jìn)行開發(fā),但是其中的DSPBIOS功能只有C5000和C6000的CCS中才提供。</p><p>  以前的DSP軟件開發(fā)都是在一個(gè)分散的開發(fā)環(huán)境下進(jìn)行,程序的編寫、代碼的生成以及調(diào)試等都是要通過命令

107、來完成,類似于以前的DOS,十分煩雜。而CCS的出現(xiàn)是DSP開發(fā)軟件的一次革命性的變化。CCS主要由代碼生成工具、CCS集成開發(fā)環(huán)境、DSPBIOS和API函數(shù)以及RTDX組成。</p><p>  5.1.1 CCS主要特點(diǎn)</p><p>  集成可視化代碼編輯界面,可以方便地直接編寫C、匯編、.h文件、.cmd文件等。集成代碼生成工具,包括匯編器、優(yōu)化的C編譯器和連接器等。具有完整

108、的基本調(diào)試工具,可以載入執(zhí)行文件(.out),查看寄存器窗口、存儲(chǔ)器窗口和變量窗口、反匯編窗口等,支持在C源代碼級進(jìn)行調(diào)試。支持多片DSP聯(lián)合調(diào)試。斷點(diǎn)工具,支持硬件斷點(diǎn)、數(shù)據(jù)空間讀/寫斷點(diǎn)、條件斷點(diǎn)等。探針工具,用于進(jìn)行算法仿真,數(shù)據(jù)監(jiān)視等。剖析工具,用于評估代碼執(zhí)行的時(shí)間。數(shù)據(jù)圖形顯示工具,可繪制時(shí)域/頻域波形、眼圖、星座圖等,并可以自動(dòng)刷新。提供GEI工具,用戶可以根據(jù)需要編寫自己的控制面板/菜單,從而方便直觀地修改變量,配置參數(shù)

109、。</p><p>  5.1.2 DSP/BIOS和API函數(shù)以及RTDX插件</p><p>  DSP/BIOS(Basic Input Output System)和API(Application Program Interface)函數(shù)為CCS的主要插件之一。DSPBIOS可以看作是一個(gè)準(zhǔn)實(shí)時(shí)操作系統(tǒng),支持TI DSP芯片的各種實(shí)時(shí)操作系統(tǒng)都是以DSP/BIOS作為底層軟件,為嵌

110、入式應(yīng)用提供基本的運(yùn)行服務(wù)。并且,它還能實(shí)時(shí)獲取目標(biāo)機(jī)的信息,并將其傳遞給主機(jī)上的BIOSCOPE工具,對應(yīng)用程序進(jìn)行實(shí)時(shí)分析RTDX (Real Time Data Exchange)插件是CCS中另一個(gè)十分重要的插件。實(shí)時(shí)數(shù)據(jù)交換技術(shù)為CCS提供了一個(gè)實(shí)時(shí)、連續(xù)的可視環(huán)境,開發(fā)人員可以看到DSP應(yīng)用程序工作的真實(shí)過程。RTDX允許系統(tǒng)開發(fā)者在不停止運(yùn)行目標(biāo)應(yīng)用程序的情況下在計(jì)算機(jī)和DSP芯片之間傳輸數(shù)據(jù),同時(shí)還可以在主機(jī)上利用對象鏈

111、接嵌入(OLE)技術(shù)分析和觀察數(shù)據(jù)。RTDX可以在DSPBIOS中使用,也可以脫離DSP/BIOS使用。由于CCS中的Simulator不支持RTDX,所以必須在連接有硬件仿真器或目標(biāo)板的Emulator下使用。</p><p>  5.2 CCS配置</p><p>  擊桌面圖標(biāo)的“setup CCStudio v3.1”圖標(biāo),運(yùn)行CCS設(shè)置程序,如圖5.1所示:點(diǎn)擊Add→Save

112、&quit完成設(shè)置。</p><p>  圖5.1 用標(biāo)準(zhǔn)配置文件設(shè)置系統(tǒng)配置</p><p>  5.3 CCS環(huán)境中工程文件的使用</p><p>  5.3.1 建立工程文件</p><p>  在CCS集成環(huán)境下開發(fā)匯編程序或者C/C++程序,首先要建立一個(gè)工程項(xiàng)目文件(*.pjt),再向工程項(xiàng)目文件中添加匯編程序源文件(

113、*.asm),C/C++源文件(*.c)和鏈接命令文件(*.cmd),并設(shè)置工程項(xiàng)目選項(xiàng)。使用CCS開發(fā)應(yīng)用程序的一般步驟如下:</p><p>  創(chuàng)建或打開一個(gè)工程項(xiàng)目文件(*.pjt),編輯各類文件,可以使用CCS提供的集成編輯環(huán)境,對鏈接命令文件和源程序進(jìn)行編輯。</p><p>  對工程項(xiàng)目進(jìn)行編譯。在編譯過程中如果出現(xiàn)語法錯(cuò)誤,將在編譯鏈接信息視窗(build)窗口中顯示錯(cuò)誤

114、信息,用戶可以根據(jù)顯示的信息找到錯(cuò)誤的位置,更改錯(cuò)誤。</p><p>  對結(jié)果和數(shù)據(jù)進(jìn)行分析和算法評估。用戶可以利用CCS提供的探測點(diǎn).圖形顯示和性能評價(jià)等工具,對運(yùn)行結(jié)果及輸出數(shù)據(jù)進(jìn)行分析,評估算法的可能性。</p><p>  下面分別進(jìn)行介紹建立工程文件,單擊Project→New命令,系統(tǒng)將彈出如圖所示的對話框,在該對話框中輸入項(xiàng)目文件名,如fir單擊“完成”系統(tǒng)就會(huì)創(chuàng)建一個(gè)名

115、為fir.pjt的工程項(xiàng)目文件如圖5.2所示。</p><p>  圖5.2 創(chuàng)建新的工程項(xiàng)目文件對話框</p><p>  5.3.2 創(chuàng)建新文件</p><p>  選擇File→New可打開一個(gè)新的編輯窗口。在新窗口中輸入源代碼。選擇File→Save,在出現(xiàn)的對話框中輸入一個(gè)文件名,并選擇一個(gè)擴(kuò)展名(C源代碼選擇*.c,匯編源代碼選擇*.asm),然后單擊

116、保存將源程序保存[6]。</p><p>  5.3.3 向工程項(xiàng)目中添加文件</p><p>  添加文件:單擊Project→Add File to Project命令然后會(huì)彈出如圖5.3所示的對話框,單擊打開完成對文件的添加。</p><p>  圖5.3 向工程項(xiàng)目中添加文件對話框</p><p>  5.4 編譯鏈接和運(yùn)行目標(biāo)文

117、件</p><p>  5.4.1 對程序進(jìn)行編譯鏈接并裝載.out文件</p><p>  對程序進(jìn)行編譯:執(zhí)行Project→Compile命令就可以對當(dāng)前的匯編程序進(jìn)行編譯生成.obj文件。如果程序存在語法錯(cuò)誤,那么就會(huì)在下面的編譯鏈接信息框中顯示錯(cuò)誤信息。根據(jù)錯(cuò)誤提示,讀者可對程序進(jìn)行修改[2]。</p><p>  對程序進(jìn)行編譯鏈接執(zhí)行Project→

118、Build命令,就可以對當(dāng)前的項(xiàng)目文件同時(shí)進(jìn)行編譯,匯編和鏈接操作,并生成與工程項(xiàng)目名稱相同的可執(zhí)行的.out文件。如果有錯(cuò)誤信息,則會(huì)在“編譯鏈接”信息框中顯示。也可以執(zhí)行Project下的build All命令,所有項(xiàng)目中的文件重新編譯,匯編和鏈接,生成.out文件。</p><p>  單擊主菜單“File”中“Load Program”選項(xiàng),在對話框中,在CCS安裝目錄下,找到構(gòu)建該工程的Debug目錄,

119、選擇構(gòu)建生成后的.out文件,并打開CCS裝載完畢后,該“*.out”文件到目標(biāo)dsp之后,會(huì)自動(dòng)彈出“Disassembly”窗口如圖5.4所示。</p><p>  圖5.4 CCS調(diào)試程序時(shí)出現(xiàn)的視窗加工程界面</p><p><b>  6 仿真結(jié)果及討論</b></p><p><b>  1.觀察數(shù)據(jù)結(jié)果</b>

120、;</p><p>  View——watch window</p><p>  輸入buffer,顯示此數(shù)組的值,如圖圖3.2所示。</p><p>  圖3.2 watch window中的值圖</p><p><b>  2.觀察數(shù)據(jù)圖形</b></p><p>  View——Graph

121、——Time Frequency</p><p>  可以加入斷點(diǎn),然后按Animate 動(dòng)態(tài)顯示。</p><p>  分別觀察語音輸入(存放在變量data中)波形,擴(kuò)展后波形(temp1),解壓后輸出波形(data1),圖形分別為圖3.3,圖3.4,圖3.5。</p><p>  3.觀察存儲(chǔ)器中數(shù)據(jù)</p><p>  View——Me

122、mory</p><p>  經(jīng)過多次調(diào)試,使錄音時(shí)間在保持音質(zhì)的前提下達(dá)到5-6秒。</p><p>  圖3.3 輸入波形(data)圖</p><p>  圖3.4 壓縮后波形(temp1)圖</p><p>  圖3.5 解壓縮后輸出波形(data1)圖</p><p><b>  結(jié) 論</

123、b></p><p>  此類擴(kuò)展是一種最簡單的線性位擴(kuò)展方式,可以將高位的數(shù)據(jù)擴(kuò)展成低位的數(shù)據(jù),它適用于聲音信號的播放和傳輸系統(tǒng),但采集和播放音樂信號時(shí)采用高位的AD和DA可得到較好的音樂效果,但傳輸或保存聲音信號時(shí),可擴(kuò)展存儲(chǔ),從而在同樣的存儲(chǔ)空間上存儲(chǔ)較長時(shí)間的語音信號,現(xiàn)在很多簡單的錄音設(shè)備就采用這種方式,但U率擴(kuò)展率不高,而且擴(kuò)展的失真是固定的,不能通過算法提高,所以在較為復(fù)雜的語音設(shè)備中應(yīng)用較少

124、。</p><p><b>  參考文獻(xiàn)</b></p><p>  汪春梅,孫洪波.TMS320C 55x DSP原理及應(yīng)用.第二版.北京:電子工業(yè)出版社 2008</p><p>  姜 陽,周錫青.DSP原理與應(yīng)用實(shí)驗(yàn).西安:西安電子科技大學(xué)出版社,2008</p><p>  方華剛. DSP原理與應(yīng)用. 北京:

溫馨提示

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

評論

0/150

提交評論