版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 目 錄</b></p><p><b> 1 概述1</b></p><p><b> 1.1設(shè)計目的1</b></p><p><b> 1.2設(shè)計要求1</b></p><p> 1.3 語音信號壓縮A律
2、設(shè)計基本原理1</p><p> 1.3.1 語音信號壓縮編碼技術(shù)的發(fā)展1</p><p> 1.3.2 DSP硬件實現(xiàn)數(shù)據(jù)壓縮解壓的簡單流程2</p><p> 1.3.3 A律語音信號壓縮2</p><p> 2 系統(tǒng)硬件設(shè)計方案4</p><p> 2.1 DSP芯片的基本原理4&l
3、t;/p><p> 2.2 指令緩沖單元(I)5</p><p> 2.3 程序流程單元(P)5</p><p> 2.4 地址程序單元(A)5</p><p> 2.5 數(shù)據(jù)計算單元(D)6</p><p> 3 語音信號壓縮A律設(shè)計的CCS實現(xiàn)6</p><p>
4、3.1 簡述CCS環(huán)境6</p><p> 3.1.1 CCS主要特點7</p><p> 3.1.2 DSP/BIOS和API函數(shù)以及RTDX插件7</p><p> 3.2 CCS配置7</p><p> 3.3 CCS環(huán)境中工程文件的使用8</p><p> 3.3.1 建立工程文件
5、8</p><p> 3.3.2 創(chuàng)建新文件9</p><p> 3.4 編譯鏈接和運行目標文件9</p><p> 3.4.1 對程序進行編譯鏈接并裝載.out文件10</p><p> 4 軟件設(shè)計與系統(tǒng)仿真10</p><p> 4.1軟件設(shè)計流程圖10</p><
6、p> 4.2 CCS操作過程11</p><p> 4.3 程序代碼實現(xiàn)11</p><p> 5 課程設(shè)計總結(jié)20</p><p><b> 6參考文獻21</b></p><p><b> 1 概述</b></p><p><b> 1
7、.1設(shè)計目的</b></p><p> 在CCS環(huán)境下基于TMS320VC55X芯片的語音采集壓縮存儲與回放。通過這次課程設(shè)計,加深對CCS集成開發(fā)環(huán)境的以及DSP試驗系統(tǒng)箱的使用。鍛煉邏輯思維能力、動手能力以及獨立解決問題的能力,對以后更深入地學習和應用數(shù)字信號處理及相關(guān)知識作準備。</p><p><b> 1.2設(shè)計要求</b></p>
8、;<p> ?。?)了解DSP開發(fā)工具及其安裝過程</p><p> (2)熟悉DSP開發(fā)軟件CCS使用</p><p> ?。?)熟悉工程文件的建立方法、匯編程序開發(fā)調(diào)試過程</p><p> ?。?)熟悉常用C55X系列指令的用法</p><p> (5)在老師的指導下,獨立完成課程設(shè)計的全部內(nèi)容,并按要求編寫課程設(shè)計論
9、文,能正確闡述和分析設(shè)計和實驗結(jié)果。</p><p> 1.3 語音信號壓縮A律設(shè)計基本原理</p><p> 1.3.1 語音信號壓縮編碼技術(shù)的發(fā)展</p><p> 隨隨著通信、計算機網(wǎng)絡等技術(shù)的飛速發(fā)展,語音壓縮編碼技術(shù)得到了快速發(fā)展和廣泛應用,尤其是最近20年,語音壓縮編碼技術(shù)在移動通信、衛(wèi)星通信、多媒體技術(shù)以及IP電話通信中得到普遍應用,起著舉足
10、輕重的作用。 語音壓縮編碼技術(shù)的類別 語音編碼就是將模擬語音信號數(shù)字化,數(shù)字化之后可以作為數(shù)字信號傳輸、存儲或處理,可以充分利用數(shù)字信號處理的各種技術(shù)。為了減小存儲空間或降低傳輸比特率節(jié)省帶寬,還需要對數(shù)字化之后的語音信號進行壓縮編碼,這就是語音壓縮編碼技術(shù)。 語音的壓縮編碼方法歸納起來可以分為三大類:波形編碼、參數(shù)編碼和混合編碼。</p><p> 1.3.2 DSP硬件實現(xiàn)數(shù)據(jù)壓縮解壓
11、的簡單流程</p><p> DSP將傳輸來的壓縮后的數(shù)據(jù)進行解壓成16位或32位,而后對解壓后的數(shù)據(jù)進行分析,處理,最后將處理后的數(shù)據(jù)按照要求壓縮成8位的數(shù)據(jù)格式輸出到相應設(shè)備以供讀?。篋R→RSR→RBR→解壓→RJUST→DDR→DXR→壓縮→XSR→DX</p><p> 在進行壓縮時,采樣后的12位數(shù)據(jù),默認其最高位為符號位,壓縮時要保持最高位即符號位不變;原數(shù)據(jù)的后11位要
12、壓縮成7位。這7位碼由3位段落碼和4位段內(nèi)碼組成,具體壓縮變換后的根據(jù)后11位數(shù)據(jù)大小決定。壓縮后數(shù)據(jù)的最高位(第7位)表示符號,量階分別為1,1,2,4,8,16,32,64,由壓縮后數(shù)據(jù)的第6位到第4位決定,第3位到第0位是段內(nèi)碼,壓縮后數(shù)據(jù)有一定的失真,有些數(shù)據(jù)不能表示出,只能取最接近該數(shù)據(jù)的壓縮值。例如數(shù)據(jù)125,壓縮后的值為00111111,意義如下:</p><p> 從左往右,第一個0為符號位,表
13、示為一個正數(shù);后面的011為段落碼,表示量階為4,起始數(shù)據(jù)為64,后面的4個1111為段內(nèi)碼,表示值為15</p><p> 最終結(jié)果為:64+4*15=124.</p><p> 1.3.3 A律語音信號壓縮</p><p> A律限制采樣值為12比特,A律的壓縮可按照下列公式定義:</p><p> F(x)=sgn(x)A|x
14、|/(a+lnA){0<=|x|<1/A}</p><p> =sgn(x)(1+lnA|x|)/(1+lnA){1/A<=|x|<=1}</p><p> 式中,A是壓縮參數(shù),x是需要壓縮的歸一化整數(shù).下圖說明這個壓縮公式是按照分段線性近似。</p><p> 從線性到A律的壓縮轉(zhuǎn)換如下表.壓縮后的碼字組成:比特0~3表示量化值,比特
15、4~6 表示段值,壓縮后的碼字符號放在比特7,為了簡化未寫出</p><p> 表1 A律二進制編碼表</p><p> 輸入模擬信號經(jīng)MAX1246采樣編碼后形成12位一禎的碼流進入VC5410的串口___McBSP0,并向VC5410的CPU發(fā)出中斷請求(rint0),A律壓縮就是將這些接受到的12位數(shù)據(jù)轉(zhuǎn)換成8位的A律PCM碼.MAX1246對雙極性輸入信號進行量化,編碼和傳輸
16、函數(shù)如下圖所示</p><p> 圖2 MAX1246信號函數(shù)</p><p> 由MAX1246信號函數(shù)圖可見,MAX1246采用的是均勻量化個補碼的編碼形式.在進行A律壓縮時,要保持符號位不變,原數(shù)據(jù)的后11位要壓縮成7位.這7位碼編譯碼表由3位段落碼和4位段內(nèi)碼組成.具體的編譯碼表如下</p><p> 表2 7位碼編譯碼表</p>&
17、lt;p> 2 系統(tǒng)硬件設(shè)計方案</p><p> 2.1 DSP芯片的基本原理</p><p> C55X有1條32位的程序數(shù)據(jù)總線(PB),5條16位數(shù)據(jù)總線(BB、CB、DB、EB、FB)和1條24位的程序地址總線及5條23位地址總線,這些總線分別與CPU相連。總線通過存儲單元接口(M)與外部程序總線和數(shù)據(jù)總線相連,實現(xiàn)CPU對外部存儲器的訪問。這種并行的多總線結(jié)構(gòu),使C
18、PU能在一個CPU周期內(nèi)完成1次32位程序代碼讀、3次16位數(shù)據(jù)讀和兩次16位數(shù)據(jù)寫。C55X根據(jù)功能的不同將CPU分為4個單元,指令緩沖單元(I)、程序流程單元(P)、地址流程單元(A)、和數(shù)據(jù)計算單元(D)。</p><p> 讀程序地址總線(PDA)上傳送24位的程序代碼地址,由讀程序總線(PB)將32位的程序代碼送入指令緩沖單元進行譯碼[1]。</p><p> 2.2 指令
19、緩沖單元(I)</p><p> C55X的指令緩沖單元有指令緩沖隊列IBQ和指令譯碼器組成。在每個CPU周期內(nèi),I單元將從程序數(shù)據(jù)接收的4B程序代碼放入指令緩沖隊列,指令譯碼器從隊列中取6B程序代碼,根據(jù)指令的長度可對8位、16位、24位、32位和48位的變長指令進行譯碼,然后把譯碼數(shù)據(jù)送入P單元、A單元和D單元去執(zhí)行。</p><p> 2.3 程序流程單元(P)</p&g
20、t;<p> 程序流程單元有程序地址產(chǎn)生電路和寄存器組湊成。程序流程單元產(chǎn)生所有程序空間的地址,并控制指令的讀取順序。</p><p> 程序地址產(chǎn)生邏輯電路的任務是產(chǎn)生讀取空間的24位地址。一般情況下,它產(chǎn)生的是連續(xù)地址,如果指令要求讀取非連續(xù)地址的程序代碼時,程序地址產(chǎn)生邏輯電路能夠接收來自I單元的立即數(shù)和來自D單元的寄存器值,并將產(chǎn)生的地址傳送到PAB。</p><p&
21、gt; 在P單元中使用的寄存器分為5種類型。</p><p> 程序流寄存器:包括程序計數(shù)器、返回地址寄存器和控制流程關(guān)系寄存器。</p><p> 塊重復寄存器:包括塊重復寄存器0和1(BRC0、BRC1)BRC1的保存寄存器(BRS1)、塊重復起始地址寄存器0和1以及塊重復結(jié)束地址寄存器0和1。</p><p> 單重復寄存器:包括單重復寄存器和計算單重
22、復寄存器。</p><p> 中斷寄存器:包括中斷標志寄存器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> 地址程序單元包括數(shù)據(jù)地址產(chǎn)生電路、算術(shù)邏輯電路和寄存器組構(gòu)成。</p>&
23、lt;p> 數(shù)據(jù)地址產(chǎn)生電路能夠接收來自I單元的立即數(shù)和來自A單元的寄存器產(chǎn)生讀取數(shù)據(jù)空間的地址。對于使用間接尋址模式的指令,有P單元向DAGEN說明采用的尋址模式。</p><p> A單元包括一個16位的算術(shù)邏輯單元,它既可以接收來自I單元的立即數(shù)也可以與存儲器、I/O空間、A單元寄存器、D單元寄存器和P單元寄存器進行雙向通信。</p><p> A單元包括的寄存器有以下幾
24、種類型。</p><p> 數(shù)據(jù)頁寄存器:包括數(shù)據(jù)頁寄存器和接口數(shù)據(jù)頁寄存器;</p><p> 指針:包括系數(shù)數(shù)據(jù)指針寄存器、堆棧針寄存器和8個輔助寄存器;</p><p> 循環(huán)緩沖寄存器:包括循環(huán)緩沖大小寄存器、循環(huán)緩沖起始地址寄存器;</p><p> 臨時寄存器:包括臨時寄存器。</p><p>
25、2.5 數(shù)據(jù)計算單元(D)</p><p> 數(shù)據(jù)計算單元由移位器、算數(shù)邏輯電路、乘法累加器和寄存器組構(gòu)成。D單元包含了CPU的主要運算部件。</p><p> D單元移位器能夠接收來自I單元的立即數(shù),能夠與存儲器、I/O單元、A單元寄存器、D單元寄存器和P單元寄存器進行雙向通信,此外,還可以向D單元的ALU和A單元的ALU提供移位后的數(shù)據(jù)。移位可以完成以下操作:</p>
26、<p> 對40位的累加器可以完成向左最多32位的移位操作,移位數(shù)樂意從零食寄存器讀取或由指令中的常數(shù)提供;</p><p> 對于16位寄存器、存儲器或I/O空間數(shù)據(jù)可完成左移31位或32位的移位操作;</p><p> 對于16位立即數(shù)可完成向左移最多15位的移位操作。</p><p> 3 語音信號壓縮A律設(shè)計的CCS實現(xiàn)</p&g
27、t;<p> 3.1 簡述CCS環(huán)境</p><p> CCS,即Code Composer Studio,是TI公司在1999年推出的一個開放、具有強大集成開發(fā)環(huán)境。它最初是由GO DSP公司為TI的C6000系列DSP開發(fā)的。在TI收購了GO DSP后,將CCS擴展到了其它系列。現(xiàn)在所有TI的DSP都可以使用CCS進行開發(fā),但是其中的DSPBIOS功能只有C5000和C6000的CCS中才
28、提供。</p><p> 以前的DSP軟件開發(fā)都是在一個分散的開發(fā)環(huán)境下進行,程序的編寫、代碼的生成以及調(diào)試等都是要通過命令來完成,類似于以前的DOS,十分煩雜。而CCS的出現(xiàn)是DSP開發(fā)軟件的一次革命性的變化。CCS主要由代碼生成工具、CCS集成開發(fā)環(huán)境、DSPBIOS和API函數(shù)以及RTDX組成。 </p><p> 3.1.1 CCS主要特點</p><p&
29、gt; 集成可視化代碼編輯界面,可以方便地直接編寫C、匯編、.h文件、.cmd文件等。集成代碼生成工具,包括匯編器、優(yōu)化的C編譯器和連接器等。具有完整的基本調(diào)試工具,可以載入執(zhí)行文件(.out),查看寄存器窗口、存儲器窗口和變量窗口、反匯編窗口等,支持在C源代碼級進行調(diào)試。支持多片DSP聯(lián)合調(diào)試。斷點工具,支持硬件斷點、數(shù)據(jù)空間讀/寫斷點、條件斷點等。探針工具,用于進行算法仿真,數(shù)據(jù)監(jiān)視等。剖析工具,用于評估代碼執(zhí)行的時間。數(shù)據(jù)圖形顯
30、示工具,可繪制時域/頻域波形、眼圖、星座圖等,并可以自動刷新。提供GEI工具,用戶可以根據(jù)需要編寫自己的控制面板/菜單,從而方便直觀地修改變量,配置參數(shù)。</p><p> 3.1.2 DSP/BIOS和API函數(shù)以及RTDX插件</p><p> DSP/BIOS(Basic Input Output System)和API(Application Program Interface
31、)函數(shù)為CCS的主要插件之一。DSPBIOS可以看作是一個準實時操作系統(tǒng),支持TI DSP芯片的各種實時操作系統(tǒng)都是以DSP/BIOS作為底層軟件,為嵌入式應用提供基本的運行服務。并且,它還能實時獲取目標機的信息,并將其傳遞給主機上的BIOSCOPE工具,對應用程序進行實時分析RTDX (Real Time Data Exchange)插件是CCS中另一個十分重要的插件。實時數(shù)據(jù)交換技術(shù)為CCS提供了一個實時、連續(xù)的可視環(huán)境,開發(fā)人員可
32、以看到DSP應用程序工作的真實過程。RTDX允許系統(tǒng)開發(fā)者在不停止運行目標應用程序的情況下在計算機和DSP芯片之間傳輸數(shù)據(jù),同時還可以在主機上利用對象鏈接嵌入(OLE)技術(shù)分析和觀察數(shù)據(jù)。RTDX可以在DSPBIOS中使用,也可以脫離DSP/BIOS使用。由于CCS中的Simulator不支持RTDX,所以必須在連接有硬件仿真器或目標板的Emulator下使用。</p><p> 3.2 CCS配置</
33、p><p> 擊桌面圖標的“setup CCStudio v3.1”圖標,運行CCS設(shè)置程序,如圖5.1所示:點擊Add→Save&quit完成設(shè)置。</p><p> 圖3.1 用標準配置文件設(shè)置系統(tǒng)配置</p><p> 3.3 CCS環(huán)境中工程文件的使用</p><p> 3.3.1 建立工程文件</p>
34、<p> 在CCS集成環(huán)境下開發(fā)匯編程序或者C/C++程序,首先要建立一個工程項目文件(*.pjt),再向工程項目文件中添加匯編程序源文件(*.asm),C/C++源文件(*.c)和鏈接命令文件(*.cmd),并設(shè)置工程項目選項。使用CCS開發(fā)應用程序的一般步驟如下:</p><p> 創(chuàng)建或打開一個工程項目文件(*.pjt),編輯各類文件,可以使用CCS提供的集成編輯環(huán)境,對鏈接命令文件和源程序進
35、行編輯。</p><p> 對工程項目進行編譯。在編譯過程中如果出現(xiàn)語法錯誤,將在編譯鏈接信息視窗(build)窗口中顯示錯誤信息,用戶可以根據(jù)顯示的信息找到錯誤的位置,更改錯誤。</p><p> 對結(jié)果和數(shù)據(jù)進行分析和算法評估。用戶可以利用CCS提供的探測點.圖形顯示和性能評價等工具,對運行結(jié)果及輸出數(shù)據(jù)進行分析,評估算法的可能性。</p><p> 下面
36、分別進行介紹建立工程文件,單擊Project→New命令,系統(tǒng)將彈出如圖所示的對話框,在該對話框中輸入項目文件名,如fir單擊“完成”系統(tǒng)就會創(chuàng)建一個名為fir.pjt的工程項目文件如圖5.2所示。</p><p> 圖3.2 創(chuàng)建新的工程項目文件對話框</p><p> 3.3.2 創(chuàng)建新文件</p><p> 選擇File→New可打開一個新的編輯窗口。
37、在新窗口中輸入源代碼。選擇File→Save,在出現(xiàn)的對話框中輸入一個文件名,并選擇一個擴展名(C源代碼選擇*.c,匯編源代碼選擇*.asm),然后單擊保存將源程序保存[6]。</p><p> 3.3.3 向工程項目中添加文件</p><p> 添加文件:單擊Project→Add File to Project命令然后會彈出如圖5.3所示的對話框,單擊打開完成對文件的添加。<
38、;/p><p> 圖3.3 向工程項目中添加文件對話框</p><p> 3.4 編譯鏈接和運行目標文件</p><p> 3.4.1 對程序進行編譯鏈接并裝載.out文件</p><p> 對程序進行編譯:執(zhí)行Project→Compile命令就可以對當前的匯編程序進行編譯生成.obj文件。如果程序存在語法錯誤,那么就會在下面的編譯
39、鏈接信息框中顯示錯誤信息。根據(jù)錯誤提示,讀者可對程序進行修改[2]。</p><p> 對程序進行編譯鏈接執(zhí)行Project→Build命令,就可以對當前的項目文件同時進行編譯,匯編和鏈接操作,并生成與工程項目名稱相同的可執(zhí)行的.out文件。如果有錯誤信息,則會在“編譯鏈接”信息框中顯示。也可以執(zhí)行Project下的build All命令,所有項目中的文件重新編譯,匯編和鏈接,生成.out文件。</p&g
40、t;<p> 單擊主菜單“File”中“Load Program”選項,在對話框中,在CCS安裝目錄下,找到構(gòu)建該工程的Debug目錄,選擇構(gòu)建生成后的.out文件,并打開CCS裝載完畢后,該“*.out”文件到目標dsp之后,會自動彈出“Disassembly”窗口如圖5.4所示。</p><p> 圖3.4 CCS調(diào)試程序時出現(xiàn)的視窗加工程界面</p><p> 4
41、 軟件設(shè)計與系統(tǒng)仿真</p><p> 4.1軟件設(shè)計流程圖</p><p> 在對語音進行采集時,先要初始化DSP及其串口和A/D和D/A轉(zhuǎn)換器。</p><p> 4.2 CCS操作過程</p><p> 1.將工程文件夾放入C盤要求目錄下。</p><p> 2. 打開CCS,Project → ope
42、n,打開工程文件。</p><p> 3.進行編譯,連接。</p><p> 4.根據(jù)錯誤提示,對build option進行正確的設(shè)置,修改頭文件路徑。</p><p> 5.再編譯,連接,顯示沒有錯誤。</p><p> 6.load program---run,此時三盞燈循環(huán)亮,之后程序開始,第一盞燈亮開始錄音,一段時間后第二盞
43、燈亮開始放音,然后又開始錄音。依次循環(huán)。</p><p> 4.3 程序代碼實現(xiàn)</p><p> 數(shù)據(jù)經(jīng)壓縮后,放置在3000h~3800;解壓縮數(shù)據(jù)放在5000h~5400h.</p><p> A律壓縮表放在4000h~4800h;A律解壓縮表放在4900h~4980h.</p><p><b> 程序清單如下:<
44、;/b></p><p> File:A_LAW.ASM→program for the’C5510</p><p><b> MEMORY</b></p><p><b> {</b></p><p> PAGE 0: VECS: origin = 0080h, length
45、 = 0080h /* Internal Program RAM */</p><p> PRAM: origin = 7600h, length = 8000h /* Internal Program RAM */</p><p> PAGE 1: SCRATCH: origin = 0060h, length = 0020h /* Scratch Pad Data
46、RAM */</p><p> DMARAM: origin = 0C00h, length = 0300h /* DMA buffer */</p><p> DATA: origin = 1100h, length = 0080h /* Internal Data RAM */</p><p> STACK: origin =
47、1180h, length = 0560h /* Stack Memory Space */</p><p> INRAM: origin = 1900h, length = 0100h /* Internal Data RAM */</p><p> HPRAM0: origin = 1A00h, length = 0002h /* HPI memory acce
48、ssible by Host and DSP */</p><p> HPRAM1: origin = 1A02h, length = 0280h /* HPI memory accessible by Host and DSP */</p><p> HPRAM2: origin = 1C82h, length = 0280h /* HPI memory accessible by
49、Host and DSP */</p><p> EXRAM: origin = 1F10h, length = 9000h /* External Data RAM */</p><p><b> }</b></p><p><b> SECTIONS</b></p><p><
50、;b> {</b></p><p> .cinit > PRAM PAGE 0</p><p> .text > PRAM PAGE 0</p><p> .vectors > VECS PAGE 0</p><p> init_var > PRAM PAGE 0&
51、lt;/p><p> detect > PRAM PAGE 0</p><p> vrcprg > PRAM PAGE 0</p><p> matprg > PRAM PAGE 0</p><p> .stack > STACK PAGE 1</p><p> .t
52、rap > SCRATCH PAGE 1</p><p> .const > EXRAM PAGE 1</p><p> .data > EXRAM PAGE 1</p><p> .bss > EXRAM PAGE 1</p><p> .cio > EXRAM
53、 PAGE 1</p><p> .switch > EXRAM PAGE 1</p><p> tables > EXRAM PAGE 1</p><p> var > EXRAM PAGE 1</p><p> svctab > EXRAM PAGE 1 /* S
54、S_V LSP table */</p><p> vctab > EXRAM PAGE 1 /* V LSP table */</p><p> uvctab > EXRAM PAGE 1 /* UV LSP table */</p><p> cuvtab > EXRAM PAGE 1
55、 /* Stochastic codebook */</p><p> cdbktab > EXRAM PAGE 1 /* various codebook tables*/</p><p> logtab > EXRAM PAGE 1 /* table for log2 */</p><p>
56、; powtab > EXRAM PAGE 1 /* table for pow2 */</p><p> hamtab > EXRAM PAGE 1 /* table for hamming */</p><p> lgwtab > EXRAM PAGE 1 /* table for lag
57、window */</p><p> acostab > EXRAM PAGE 1 /* table for arccos */</p><p> sqrtab > EXRAM PAGE 1 /* table for square root */</p><p> acbtab > EXRA
58、M PAGE 1 /* table for thresholds in acb */</p><p> pm03tab > EXRAM PAGE 1 /* table for x^(-0.3) computation */</p><p> costab > EXRAM PAGE 1 /* table for
59、cosine */</p><p> V23 > INRAM PAGE 1</p><p> FSK > INRAM PAGE 1</p><p> hpibuff0 > HPRAM0 PAGE 1</p><p> hpibuff1 > HPRAM1 PAGE 1</p>
60、;<p> hpibuff2 > HPRAM2 PAGE 1</p><p> dma_buff > DMARAM PAGE 1</p><p><b> }</b></p><p><b> /*主程序設(shè)計*/</b></p><p> /*語音采集及回放程
61、序,用A律進行壓縮及解壓,采用AD50進行A/D,D/A轉(zhuǎn)換 */ </p><p> /*燈循環(huán)閃爍程序開始,L0:錄音,L1:放音*/</p><p> #include <type.h> /* 頭文件*/</p><p> #include <b
62、oard.h></p><p> #include <codec.h></p><p> #include <mcbsp54.h></p><p> #defineSIGN_BIT(0x80)/* Sign bit for a A-law byte. */</p><p> #defineQUA
63、NT_MASK(0xf)/* Quantization field mask. */</p><p> #defineNSEGS(8) /* Number of A-law segments. */</p><p> #defineSEG_SHIFT(4) /* Left shift for segment number. */</p>
64、<p> #defineSEG_MASK(0x70)/* Segment field mask. */</p><p> void delay(s16 period);</p><p> void led(s16 cnt);</p><p> void initcodec(void);</p><p> void
65、 flashenable(void);</p><p> unsigned char data2alaw(s16 pcm_val);</p><p> int alaw2data(unsigned chara_val);</p><p> static int search(int val,short*table,int size);</p>
66、<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><
67、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,0xFF,0x
68、1FF,0x3FF,0x7FF,0xFFF};</p><p> void main()</p><p> { if (brd_init(100))</p><p><b> return;</b></p><p> led(2); //閃燈兩次</p><
69、p> initcodec(); //初始化codec</p><p> flashenable(); //選擇片外FLASH為片外存儲器 </p><p> delay(100);</p><p> brd_led_toggle(BRD_LED0);</p><p> for
70、(i=0x9000;i<0xefff;i++)</p><p><b> { </b></p><p> REG_WRITE(i,*(volatile u16*)DRR1_ADDR(HANDSET_CODEC));</p><p> delay(20);</p><p><b> }<
71、;/b></p><p> brd_led_toggle(BRD_LED1);</p><p> delay(200);</p><p> for(i=0x9000;i<0xefff;i++)</p><p><b> {</b></p><p> *(volatile u1
72、6*)DXR1_ADDR(HANDSET_CODEC)=REG_READ(i);</p><p> delay(20); }</p><p> brd_led_toggle(BRD_LED2) </p><p><b> while (1)</b></p><p> { while (!MCBSP_RRDY(HA
73、NDSET_CODEC)) {}; //等待接收handset處的采樣</p><p> brd_led_toggle(BRD_LED0);</p><p> data = *(volatile u16*)DRR1_ADDR(HANDSET_CODEC); //從handset處讀取采樣</p><p> temp1=data2alaw(data
74、); //對采樣進行a律壓縮</p><p> i=i+1; </p><p> if(i%2==1)</p><p> {buffer[j]=(temp1<<=8);}</p><p><b> else</b></p><p>
75、; {buffer[j]=(buffer[j]|temp1); </p><p> j++; //j加1</p><p><b> }</b></p><p> if(i>=40000) </p><p><b> {i=0;}</b></p><p>
76、 if(j>=20000)</p><p><b> {j=0;</b></p><p> brd_led_disable(BRD_LED0); </p><p> brd_led_toggle(BRD_LED1); //點亮二極管1 表示放音開始</p><p> /*
77、 放音部分 */</p><p> for(k=0;k<40000;k++)</p><p><b> {</b></p><p> if(k%2==0)</p><p><b> {</b></p><p&
78、gt; temp2=(buffer[l]>>8)&0x0ff;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> temp2=buffer[l]&0x0
79、ff;</p><p><b> l++;</b></p><p><b> }</b></p><p> if(l>=20000)</p><p><b> l=0; </b></p><p> data1=alaw2data(temp
80、2); // a律解壓</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>&
81、lt;p> /* 放音結(jié)束 */</p><p> brd_led_toggle(BRD_LED0);</p><p> brd_led_toggle(BRD_LED1); }</p><p><b> } </b><
82、/p><p> } //主程序結(jié)束 </p><p>
83、 /*******延時子程序******/</p><p> void delay(s16 period)</p><p><b> {</b></p><p><b> int i, j;</b></p><p> for(i=0; i<period; i++)</p>
84、<p><b> {</b></p><p> for(j=0; j<period>>1; j++);</p><p><b> }</b></p><p><b> }</b></p><p> /*******閃燈******/<
85、;/p><p> void led(s16 cnt)</p><p> {while ( cnt-- )</p><p> {brd_led_toggle(BRD_LED0); //切換LED指示燈0的顯示狀態(tài)</p><p> delay(1000);</p><p> brd_led_togg
86、le(BRD_LED1);</p><p> delay(1000);</p><p> brd_led_toggle(BRD_LED2);</p><p> delay(1000);</p><p><b> }</b></p><p><b> }</b><
87、;/p><p> /*****初始化codec**/</p><p> void initcodec(void)</p><p> {/* Open Handset Codec 獲取設(shè)置codec的句柄*/</p><p> hHandset = codec_open(HANDSET_CODEC); / Acquire ha
88、ndle to codec </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><p>
89、; 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 from DAC <
90、;/p><p> codec_sample_rate(hHandset,SR_8000); // 8KHz sampling rate </p><p><b> }</b></p><p> /*****設(shè)置flash****/</p><p> void flashenable(void)&
91、lt;/p><p><b> {</b></p><p> CPLD_CTRL2_REG|=0x0010;</p><p> CPLD_DMCTRL_REG|=0x0040;</p><p><b> }</b></p><p> /*****a律壓縮******/&l
92、t;/p><p> unsigned char data2alaw(s16 pcm_val) </p><p><b> {</b></p><p> intmask;</p><p><b> intseg;</b></p><p> unsigne
93、d charaval;</p><p> if (pcm_val >= 0) </p><p><b> {</b></p><p> mask = 0xD5; // 標記 (7th) bit = 1</p><p><b> } </b>&l
94、t;/p><p><b> else </b></p><p><b> {</b></p><p> mask = 0x55; // 標記 bit = 0 </p><p> pcm_val = -pcm_val;</p>&l
95、t;p><b> }</b></p><p> seg = search(pcm_val, seg_end, 8); </p><p> if (seg >= 8) // out of range, 返回最大數(shù). </p><p> return (
96、0x7F ^ mask);</p><p><b> else </b></p><p><b> {</b></p><p> aval = seg << SEG_SHIFT;</p><p> if (seg < 2)</p><p> ava
97、l |= (pcm_val >> 1) & QUANT_MASK;</p><p><b> else</b></p><p> aval |= (pcm_val >>seg) & QUANT_MASK;</p><p> return (aval ^ mask);</p><p
98、><b> }</b></p><p><b> }</b></p><p> /****alaw的子程序**/</p><p> static int search(int val,short*table,int size)</p><p><b> {</b&g
99、t;</p><p><b> inti;</b></p><p> for (i = 0; i < size; i++) </p><p><b> {</b></p><p> if (val <= *table++)</p><p> retu
100、rn (i);</p><p><b> }</b></p><p> return (size);</p><p><b> }</b></p><p> /*****a律解壓******/</p><p> int alaw2data(unsigned char
101、a_val)</p><p> { intt;</p><p><b> intseg;</b></p><p> a_val ^= 0x55;</p><p> t = (a_val & QUANT_MASK) << 4;</p><p> seg =
102、 ((unsigned)a_val & SEG_MASK) >> SEG_SHIFT;</p><p> if(seg==0) </p><p><b> {t += 8;</b></p><p> t=(t>>3);}</p><p> if((seg<4)&&am
103、p;(seg>0)) </p><p> {t +=0x108;</p><p> t=(t>>(4-seg));}</p><p><b> if(seg>3)</b></p><p> {t+=0x108;</p><p> t=(t<<=(seg
104、-4));}</p><p> return ((a_val & SIGN_BIT) ? t : -t);</p><p><b> }</b></p><p> /* 結(jié)束 *</p><p><b> 5 課程設(shè)計總結(jié)<
105、/b></p><p> CCS為信號處理器的開發(fā)過程提供配置、構(gòu)造、調(diào)試、跟蹤和分析程序的工具,在基本代碼產(chǎn)生工具的基礎(chǔ)上增加了調(diào)試和實時分析的功能。開發(fā)設(shè)計人員可在不中斷程序運行的情況下檢查算法的對錯,實現(xiàn)對硬件的實時跟蹤調(diào)試,從而大大縮減了程序的開發(fā)時間。這里以C算法的實現(xiàn)為例,從View菜單,選擇Graph Time/Frequency命令,系統(tǒng)彈出“圖形屬性”對話框,在該對話框中填入如圖5所示的
106、參數(shù)。</p><p><b> 6參考文獻</b></p><p> 汪春梅,孫洪波.TMS320C 55x DSP原理及應用.第二版.北京:電子工業(yè)出版社 2008</p><p> 姜 陽,周錫青.DSP原理與應用實驗.西安:西安電子科技大學出版社,2008</p><p> 方華剛. DSP原理與應用.
107、北京:機械工業(yè)出版社,2006.1</p><p> 程佩青,數(shù)字信號處理教程第二版,清華大學出版社,2001.8</p><p> TMS320C55X DSP Programmer’s Guide SPRU376A[Z].Texas Instruments,2001</p><p> TMS320C55X DSP Mnemonic Instruction
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- dsp課程設(shè)計報告----語音壓縮、存儲與回放
- dsp課程設(shè)計---語音的壓縮、存儲和回放
- dsp課程設(shè)計--基于tm320vc5402語音采集壓縮存儲與回放
- dsp課程設(shè)計--基于tms320vc5402語音采集壓縮存儲與回放
- dsp數(shù)字信號處理課程設(shè)計報告-- 語音壓縮與回放
- dsp課程設(shè)計--語音壓縮,存儲和回訪
- 課程設(shè)計-基于單片機的語音存儲及回放系統(tǒng)課程設(shè)設(shè)計
- 課程設(shè)計---雙通道數(shù)據(jù)采集回放系統(tǒng)
- 波形采集、存儲與回放系統(tǒng)畢業(yè)設(shè)計
- 波形的采集存儲與回放系統(tǒng)
- dsp課程設(shè)計--語音噪聲濾波
- 波形的采集存儲與回放系統(tǒng)
- dsp課程設(shè)計-- 溫度采集與顯示系統(tǒng)設(shè)計
- dsp語音信號處理課程設(shè)計
- dsp課程設(shè)計報告---語音噪聲濾波
- dsp語音錄放課程設(shè)計--基于tms320c5416 dsp的語音信號的采集和放送
- 數(shù)字化語音存儲與回放系統(tǒng)的設(shè)計[文獻綜述]
- 數(shù)字化語音存儲與回放系統(tǒng)-畢業(yè)設(shè)計論文
- 畢業(yè)設(shè)計(論文)-數(shù)字化語音存儲與回放系統(tǒng)設(shè)計
- matlab課程設(shè)計--語音信號的采集與處理
評論
0/150
提交評論