<noframes id="ixm7d"><noframes id="ixm7d"><rt id="ixm7d"><delect id="ixm7d"></delect></rt><noframes id="ixm7d"><rt id="ixm7d"><rt id="ixm7d"></rt></rt><rt id="ixm7d"></rt> <noframes id="ixm7d"><rt id="ixm7d"><delect id="ixm7d"></delect></rt><delect id="ixm7d"></delect><bdo id="ixm7d"></bdo><rt id="ixm7d"></rt><bdo id="ixm7d"></bdo><noframes id="ixm7d"><rt id="ixm7d"><rt id="ixm7d"></rt></rt><rt id="ixm7d"><rt id="ixm7d"></rt></rt><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><rt id="ixm7d"></rt> <noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><noframes id="ixm7d"><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><noframes id="ixm7d"><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d">

dsp期末考試實驗報告

2023-06-20

一份優質的報告,需要以總結性的語錄、合理的格式,進行工作與學習內容的記錄。想必你也正在為如何寫好報告而發愁吧?以下是小編精心整理的《dsp期末考試實驗報告》,僅供參考,希望能夠幫助到大家。

第一篇:dsp期末考試實驗報告

2013級DSP實驗期末考試題

1、LED燈結合外部中斷實驗

? 以一次正反向LED燈亮顯示為一個周期,實現正向1,3,2,4燈依次亮,反向3,1,4,2依次亮,如此重復進行 ? 在運行中的任何時候均可用外部中斷停止

? 要求在LED燈的程序上進行修改,即此工程名字為LED.pjt,或者自行創建工程

2、通過撥碼開關控制流水燈的速度

? 流水燈顯示順序依次為1,2燈,2,3燈,3,4燈,1,4燈,1,2燈,2,3燈...... ? 用撥碼開關分別控制流水燈,以正常為基準,可以實現加速、減速、暫停/繼續 ? 例如:撥碼狀態0001實現加速,0002實現暫停 ? 暫停的時候狀態要保持,繼續的時候從當前狀態開始

? 要求在撥碼開關的程序上進行修改,即此工程名字為DIP.pjt,或者自行創建工程

3、語音采集與放送結合指示燈實驗

? 使其中一個聲道有數據讀寫時,指示燈1,2亮

? 另一個聲道有數據讀寫時,4燈亮 ? 要求聲音播放正常

? 要求在語音采集與放送的程序上修改,即工程的名字為audio.pjt,或者自行創建工程

4、語音采集與放送結合ADC實驗

? 利用信號發生器加入白噪聲 ? 右通道是原音,左通道是加噪后的聲音,右通道和左通道的聲音不同

? 要求在語音采集與放送的程序上修改,即工程的名字為audio.pjt,或者自行創建工程

5、DA多路轉換結合撥碼開關控制實驗

? 利用通道DAC1或DAC2輸出正弦波、余弦波、方波、三角波等,自己設計復雜的圖形也可(至少實現4種波形)

? 例如:撥碼開關為0001時輸出正弦波,0010時輸出波形為方波,波形輸出由自己控制,撥碼開關狀態也由自己控制

? 要求在撥碼開關的程序上修改,即工程的名字為DIP.pjt,或者自行創建工程

6、定時器結合DAC實驗

? 用定時器觸發DA模塊完成正弦波、余弦波、方波、三角波等波形的循環顯示,自己設計復雜的圖形也可

? 定時時間盡量長才能看見完整的波形

? 注意定時器、向量表、cmd文件及寄存器配置 ? 波形都用數學函數實現(至少實現4種波形)

? 要求在DA轉換的程序上修改,即工程的名字為DA.pjt,或者自行創建工程

7、結合外部中斷、定時器以及LED燈實驗

? 利用外部中斷控制實現指示燈的不同顯示效果,定時器實現指示燈的亮滅長度 ? 至少完成兩種不同的指示燈顯示功能

? 主要考核兩個中斷的結合,注意向量表和CMD文件及中斷的初始化的配置

? 要求在定時器中斷的程序上修改,即工程的名字為Timer.pjt,或者自行創建工程

8、自建C工程及混合編程實驗

? 包括自建工程、自建源文件、添加源文件、自動加載、C與匯編的混合編程、觀察效率、

防止.ASM文件被替換等知識點

? 每個知識點均有分值

? 脫稿限時完成

? 考試時現場完成以上操作

9、直方圖均衡化增強

? 在DSP中自行設計兩幅80*80的相對復雜的圖像(與實驗中兩幅圖像不同) ? 將其進行直方圖統計

? 進行直方圖均衡化增強

? 使用View中Graph工具顯示出原圖、增強后圖、相應直方圖 ? 對整個過程進行分析

? 要求自己自建工程,工程名字不可和源代碼工程名字相同

? 脫稿限時完成

10、邊緣檢測

? 在DSP中自行設計兩幅80*80的相對復雜的圖像(與實驗中兩幅圖像不同) ? 實現基于Laplace算子的邊緣檢測

? 使用View中Graph工具顯示出Laplace算子的邊緣檢測結果 ? 對整個過程進行分析

? 要求自己自建工程,工程名字不可和源代碼工程名字相同

? 脫稿限時完成

11、外部中斷、定時器、LED燈結合

? 利用外部中斷控制LED燈閃爍速度,實現每按一次按鍵,LED燈閃爍速度依次變慢。

至少實現兩種情況

? 定時器周期默認設定為最大值,不需修改

? 要求在外部中斷的程序上修改,即工程的名字為XINT.pjt,或者自行創建工程

12、AD轉換和外部中斷實驗

? 利用外部中斷來啟動AD轉換,顯示出波形

? 要求在AD轉換的程序上修改,即工程的名字為AD.pjt,或者自行創建工程

13、語音采集、外部中斷、定時中斷、LED燈結合

? 能實現語音信號的采集,用外部中斷來控制語音的快進,暫停,倒退,正常播放等 ? 左聲道持續送原音,右聲道送待控制的音頻

? 同時用指示燈表示相應的操作,比如指示燈1亮代表播放,指示燈2亮代表暫停等,定

時器實現指示燈的亮滅長度

? 注意要存儲一段音頻數據及存儲數據的大小,右聲道才能聽出快進,暫停,倒退,正常

播放的效果(按一下執行下一個功能)

? 要求在AD轉換的程序上修改,即工程的名字為AD.pjt,或者自行創建工程

14、用定時器觸發播放已保存好的語音信號

? 先將通過DSP采集的語音信號進行存儲

? 左聲道持續播放原音,右聲道通過定時器中斷重復播放存儲的語音信號 ? 進入定時中斷時打?。?ldquo;播放”

? 要求在定時器中斷的程序上修改,即工程的名字為Timer.pjt,或者自行創建工程

自行創建的工程需以學號為工程名。 除第8題以外,其它題目可堂下自行準備好程序,考試時抽取題目之后,將代碼考到計算機中,演示結果并回答問題。 考試過程中,調試程序及演示結果時,不允許看ppt以及其它資料,但可看源代碼。

第二篇:DSP實驗報告

實驗0 實驗設備安裝才CCS調試環境

實驗目的:

按照實驗講義操作步驟,打開CCS軟件,熟悉軟件工作環境,了解整個工作環境內容,有助于提高以后實驗的操作性和正確性。 實驗步驟:

以演示實驗一為例:

1. 使用配送的并口電纜線連接好計算機并口與實驗箱并口,打開實驗箱電源; 2.啟動CCS,點擊主菜單“Project->Open”在目錄“C5000QuickStartsinewave”下打開工程文件sinewave.pjt,然后點擊主菜單“Project->Build”編譯,然后點擊主菜單“File->Load Program”裝載debug目錄下的程序sinewave.out;

3. 打開源文件exer3.asm,在注釋行“set breakpoint in CCS !!!”語句的NOP處單擊右鍵彈出菜單,選擇“Toggle breakpoint”加入紅色的斷點,如下圖所示; 4. 點擊主菜單“View->Graph->Time/Frequency„”,屏幕會出現圖形窗口設置對話框

5. 雙擊Start Address,將其改為y0;雙擊Acquisition Buffer Size,將其改為1;DSP Data Type設置成16-bit signed integer,如下圖所示;

6. 點擊主菜單“Windows->Tile Horizontally”,排列好窗口,便于觀察

7. 點擊主菜單“Debug->Animate”或按F12鍵動畫運行程序,即可觀察到實驗結果:

心得體會:

通過對演示實驗的練習,讓自己更進一步對CCS軟件的運行環境、編譯過程、裝載過程、屬性設置、動畫演示、實驗結果的觀察有一個醒目的了解和熟悉的操作方法。熟悉了DSP實驗箱基本模塊。讓我對DSP課程產生了濃厚的學習興趣,課程學習和實驗操作結合為一體的學習體系,使我更好的領悟到DSP課程的實用性和趣味性。

實驗二 基本算數運算

2.1 實驗目的和要求

加、減、乘、除是數字信號處理中最基本的算術運算。DSP 中提供了大量的指令來 實現這些功能。本實驗學習使用定點DSP 實現16 位定點加、減、乘、除運算的基本方法 和編程技巧。本實驗的演示文件為exer1.out。

2.2 實驗原理

1) 定點 DSP 中的數據表示方法

C54X 是16 位的定點DSP。一個16 位的二進制數既可以表示一個整數,也可以表

示一個小數。當它表示一個整數時,其最低位(D0)表示20,D1 位表示21,次高位(D14) 表示214。

2) 實現 16 位定點加法

C54X 中提供了多條用于加法的指令,如ADD,ADDC,ADDM 和ADDS。其中

ADDS 用于無符號數的加法運算,ADDC 用于帶進位的加法運算(如32 位擴展精度加 法),而ADDM 專用于立即數的加法。

3) 實現 16 位定點減法

C54X 中提供了多條用于減法的指令,如SUB,SUBB,SUBC 和SUBS。其中SUBS 用于無符號數的減法運算,SUBB 用于帶進位的減法運算(如32 位擴展精度的減法), 而SUBC 為移位減,DSP 中的除法就是用該指令來實現的。

4) 實現 16 位定點整數乘法

在C54X 中提供了大量的乘法運算指令,其結果都是32 位,放在A 或B 寄存器 中。乘數在C54X 的乘法指令很靈活,可以是T 寄存器、立即數、存貯單元和A 或B 寄存器的高16 位。

5) 實現 16 位定點小數乘法

在 C54X 中,小數的乘法與整數乘法基本一致,只是由于兩個有符號的小數相乘, 其結果的小數點的位置在次高的后面,所以必須左移一位,才能得到正確的結果。C54X 中提供了一個狀態位FRCT,將其設置為1 時,系統自動將乘積結果左移一位。但注意 整數乘法時不能這樣處理,所以上面的實驗中一開始便將FRCT 清除。兩個小數(16 位) 相乘后結果為32 位,如果精度允許的話,可以只存高16 位,將低16 位丟棄,這樣仍可 得到16 位的結果。

6) 實現 16 位定點整數除法

在 C54X 中沒有提供專門的除法指令,一般有兩種方法來完成除法。一種是用乘法 來代替,除以某個數相當于乘以其倒數,所以先求出其倒數,然后相乘。這種方法對于 除以常數特別適用。另一種方法是使用SUBC 指令,重復16 次減法完成除法運算。

7) 實現 16 位定點小數除法

在 C54X 中實現16 位的小數除法與前面的整數除法基本一致,也是使用循環的

SUBC 指令來完成。但有兩點需要注意:第一,小數除法的結果一定是小數(小于1),

1 所以被除數一定小于除數。

2.3 實驗內容

本實驗需要使用C54X 匯編語言實現加、減、乘、除的基本運算,并通過DES 的存 貯器顯示窗口觀察結果。

1) 編寫實驗程序代碼

2) 用 ccs simulator 調試運行并觀察結

2.4 實驗結果

1、加法結果

2、乘法結果

3、減法結果

4、除

4 2.5 思考題(0.5、0.25)

5 實驗三 C54X的浮點數的算術運

一、實驗目的

1) 練習 TMS320C54X 匯編程序的編寫與調試方法,重點練習C54X 程序流程控制的方法。 2) 學習并掌握應用 TMS320C54X 來進行浮點數的各種算術運算的算法實現。

3) 練習并掌握 TMS320C54X 的匯編語言的匯編指令系統的使用方法,重點練習具有C54X 特點的一些在功能上有所擴展的特殊指令,并了解這些指令在進行算術運算或各種控制時所帶來的方便。

4) 練習并掌握用 CCS 調試程序的一些基本操作。

二.實驗原理

1) 浮點數的表示方法

在定點運算中,小數點是在一個特定的固定位置。例如,如果一個 32-bit 的數把小數點放在最高有效位(也就是符號位)之后,那么就只有分數(絕對值小于1)才能被顯示。在定點運算系統中,雖然在硬件上實現簡單,但是表示的操作數的動態范圍要受到限制。

3) 浮點數運算的步驟

程序代碼分成四個 ASM 文件輸入,通過編譯生成.obj 文件,連接生成.out 文件后就可以在DES320PP-U 實驗系統上調試運行(先要創建一個工程文件,然后加入四個工程文件,并且一起編譯,連接。因為每個文件都對下一個文件作了引用)。步驟如下:

a. 首先啟動 setup CCS C5000,在其中設置目前需要的CCS 的工作狀態為C54xxsimulator,保存這一設置并退出。然后再啟動CCS 實驗系統軟件CCS C5000。

b. 在下拉菜單中選擇“File”->“Load Program”以裝入所要調試的程序fc.out,這時,在反匯編窗口中能看到程序的源代碼。

c. 在下拉菜單中選擇“View”->“CPU Registers”->“CPU Register”,可以看見在CCS 界面下部份會出現CPU 中的相關寄存器;選擇“View”->“Memory…”,在彈出的“Memory Window Options”窗口中選擇要觀察的區域為數據區,地址開始為0x80h,然后就可以看見出現一個Data Memory 窗口,其中顯示了從0x80h 開始的 .bss 區。

d. 在反匯編窗口中需要觀察的地方設置斷點:在這條指令處雙擊將其點為紅色即可。比如在加法程序中有指令nop 的位置都可以加一個斷點。

e. 在下拉菜單中選擇“調試”——“連續運行”(或直接點擊“運行程序”按鈕)運行浮點數程序。如果編寫程序時在計算完畢后遇到一個斷點,那么程序到此會自動停止。

f. 當示范程序在第一個斷點處停下來時,此時就可以看見程序初始化后的情況:被加數12.0 以浮點數的格式放在內存區0x08a-0x08b 中,其值為4140h 和0000h。加數12.0 放在內存區0x08c-0x08d 中,其值也為4140h 和0000h。

6 g. 再點擊“運行程序”按鈕,之后程序會在下一個斷點處停下來,這時可以看見被加數被格式轉換后的變量op1hm、op1lm 和op1se 的值在內存區0x084-0x086 中,分別為00c0h、0000h 和0082h。同樣加數被格式轉換后的變量op2se、op2hm 和op2lm的值在內存區0x087-0x089 中,分別為0082h、00c0h 和0000h。

h. 再點擊“運行程序”按鈕,程序停下來時就可以觀察到在存儲器窗口中表示結果的變量rlthm、rltlm、rltsign 和rltexp 的值在內存區0x080-0x083 中,其值分別為0040h、0000h、0180h 和0083h。

i. 這時可以看到 A 寄存器中的值為AH=41c0h,AL=0000h 這就是最后的以浮點數的格式表示的結果值24(=12+12)。加法運算到此結束。

j. 繼續點擊“運行程序”按鈕,當程序再次停下來時就可以看見在A 寄存器中顯示的13.0 與12.0 進行減法運算的結果:AH=3f80h,AL=0000h。這是用浮點數格式表示的數1(=13-12)。減法運算的程序到此結束。

k. 繼續點擊“運行程序”按鈕,當程序再次停下來時就可以看見在A 寄存器中顯示的12.0 與12.0 進行乘法運算的結果:AH=4310h,AL=0000h。這是用浮點數格式表示的數144(=12*12)。乘法運算的程序到此結束。

l. 繼續點擊“運行程序”按鈕,當程序再次停下來時就可以看見在A 寄存器中顯示的12.0 與4.0 進行除法運算的結果:AH=4040h,AL=0000h。這是用浮點數格式表示的數3(=12/4)。至此加、減、乘、除四種運算都運行完畢。

m. 如果程序運行不正確,請檢查源程序是否有誤,必要時可以在源程序中多插入斷點語句。程序在執行到斷點語句時自動暫停,此時可以通過檢查各個寄存器中的值以及內存單元中的值來判斷程序執行是否正確。

三.在 CCS 的C54xx simulator 上調試觀察實驗結果

浮點加法斷點一:

7 浮點加法斷點二:

浮點加法斷點三:

8 浮點減法

浮點數乘法

9 浮點數除法

四 心得體會

通過學習C54X的浮點數的算術運算,以及實驗結果的觀察,使我了解了浮點數運算的原理,學習并掌握用TMS320C54X來進行浮點數的各種算術運算的算法實現。 實驗四用定時器實現數字振蕩器

10 實驗四 用定時器實現數字振蕩器

4.1 實驗目的

在數字信號處理中,會經常使用到正弦/余弦信號。通常的方法是將某個頻率的正弦/余弦值預先計算出來后制成一個表,DSP 工作時僅作查表運算即可。在本實驗中將介紹另一種獲得正弦/余弦信號的方法,即利用數字振蕩器用疊代方法產生正弦信號。本實驗除了學習數字振蕩器的DSP 實現原理外,同時還學習C54X 定時器使用以及中斷服務程序編寫。另外,在本實驗中我們將使用匯編語言和C 語言分別完成源程序的編寫。

4.2 實驗要求

本實驗利用定時器產生一個 2kHz 的正弦信號。定時器被設置成每25uS 產生一次中斷(等效于采樣速率為40K)。利用該中斷,在中斷服務程序中用疊代算法計算出一個SIN值,并利用CCS 的圖形顯示功能查看波形。

4.3 實驗原理

1) 數字振蕩器原理

設一個傳遞函數為正弦序列 sinkωT,其z 變換為 H(z)=

其中,A=2cosωT, B=-1, C=sinωT。設初始條件為0,求出上式的反Z 變換得:

y[k]=Ay[k-1]+By[k-2]+Cx[k-1] 2) C54X 的定時器操作

C54X 的片內定時器利用CLKOUT 時鐘計數,用戶使用三個寄存器(TIM,PRD,TCR)來控制定時器,參見表4-1。在表4-2 中列出了定時器控制寄存器的各個比特位的具體定義。‘VC5402 的另一個定時器(定時器1)的控制寄存器分別為:0x30(TIM1),0x31(PRD1),0x32(TCR1)。

3) C54X 中斷的使用

在 C54X 中用戶可以通過中斷屏蔽寄存器IMR 來決定開放或關閉一個中斷請求。圖4-1 給出了C5402 的IMR 寄存器的各個比特位的定義。

圖 4-1 ‘C5402 的IMR 寄存器

其中,HPINT 表示HPI 接口中斷,INT3-INT0 為外部引腳產生的中斷,TXINT 和TRINT 為TDM 串口的發送和接收中斷,BXINT0 和BRINT0 為BSP 串口的發送和接收中斷,TINT0 為定時器0 中斷。在中斷屏蔽寄存器IMR 中,1 表示允許CPU 響應對應的中斷,0 表示禁止。當然要CPU 響應中斷,ST1 寄存器中的INTM 還應該為0(允許所有的中斷)。

本實驗的初始化程序讀取中斷向量表的啟始地址,然后設置PMST 的高9 位,以便DSP 能正確響應中斷,代碼如下:

ld #0,dp ;設置DP 頁指針 ssbx intm ;關閉所有中斷

11 ld #vector, a ;讀出中斷向(地址vector 在中斷向量表程序中定義) and #0FF80h, a ;保留高9 位(IPTR) andm #007Fh, pmst ;保留PMST 的低7 位 or pmst, a ;

stlm a, pmst ;設置PMST(其中包括IPTR)

4.4 實驗內容

本實驗需要使用 C54X 匯編語言或C 語言實現數字振蕩器,并通過CCS 提供的圖形顯示窗口觀察出信號波形以及頻譜。實驗分下面幾步完成:

1) 根據確定數字振蕩器的頻率,確定系數。 2) 啟動 CCS,新建工程文件。

3) 選擇 Project 菜單中的Options 選項,或使用鼠標右鍵單擊工程文件名(如sinewave.pjt)并選擇build options 項來修改或添加編譯、連接中使用的參數。選擇Linker 窗口,在“Output Filename”欄中寫入輸出OUT 文件的名字,如sine.out,你還可以設置生成的MAP 文件名。

4) 完成編譯、連接,正確生成OUT 文件。

5) 選 View→Graph→Time/Frequency„打開圖形顯示設置窗口。 6) 在匯編源程序的中斷服務程序(_tint)中的“nop”語句處設置斷點。 7) 用右鍵單擊圖形顯示窗口,并選擇“Proporties”項以便修改顯示屬性。

12 8) 清除所有斷點,關閉除波形顯示窗口外的所有窗口,并關閉工程文件。 9) 完成編譯、連接,正確生成OUT 文件。

10)打開 C 源程序(timer.c)窗口,在中斷服務程序(函數tint())的“con_buf=0;”語句處增加一個斷點。同樣打開圖形顯示窗口,并將“Start Address”改為buf;“Acquisition Buffer Size”改為“Display Data Size”改為128,“DSP DataType”為“32-bit floating point”

11)選擇 Debug→Animate,運行程序,觀察輸出波形。

第三篇:dsp實驗報告心得體會

TMS320F2812x DSP原理及應用技術實驗心得體會

1. 設置環境時分為軟件設置和硬件設置,根據實驗的需要設置,這次實驗只是軟件仿真,可以不設置硬件,但是要為日后的實驗做準備,還是要學習和熟悉硬件設置的過程。

2. 在設置硬件時,不是按實驗書上的型號選擇,而是應該按照實驗設備上的型號去添加。

3. 不管是硬件還是軟件的設置,都應該將之前設置好的刪去,重新添加。設置好的配置中只能有一項。

4. CCS可以工作在純軟件仿真環境中,就是由軟件在PC機內存中構造一個虛擬的DSP環境,可以調試、運行程序。但是一般無法構造DSP中的外設,所以軟件仿真通常用于調試純軟件算法和進行效率分析等。 5. 這次實驗采用軟件仿真,不需要打開電源箱的電源。

6. 在軟件仿真工作時,無需連接板卡和仿真器等硬件。

7. 執行write_buffer一行時。如果按F10執行程序,則程序在mian主函數中運行,如果按F11,則程序進入write_buffe函數內部的程序運行。 8. 把str變量加到觀察窗口中,點擊變量左邊的“+”,觀察窗口可以展開結構變量,就可以看到結構體變量中的每個元素了。

9. 在實驗時,顯示圖形出現問題,不能顯示,后來在Graph Title 把Input的大寫改為input,在對volume進行編譯執行后,就可以看到顯示的正弦波圖形了。 10. 在修改了實驗2-1的程序后,要重新編譯、連接執行程序,并且必須對.OUT文件進行重新加載,因為此時.OUT文件已經改變了。如果不重新加載,那么修改執行程序后,其結果將不會改變。

11. 再觀察結果時,可將data和data1的窗口同時打開,這樣可以便于比較,觀察結果。

12. 通過這次實驗,對TMS320F2812x DSP軟件仿真及調試有了初步的了解與認識,因為做實驗的時候都是按照實驗指導書按部就班的,與真正的理解和掌握還是有些距離的。但是這也為我們日后運用這些知識打下了基礎,我覺得實驗中遇到的問題,不要急于問老師或者同學,先自己想辦法分析原因,想辦法解決,這樣對自身的提高更多吧。通過做實驗,把學習的知識利用起來,也對這門課程更加有興趣了。

組員:葉孝璐 馮煥芬 鄭瑋儀 龐露露

2012年4月10號

第四篇:dsp——期末復習總結

Dsp原理及應用

1.簡述DSP芯片的主要特點。 答:

(1)采用哈佛結構。Dsp芯片普遍采用數據總線和程序總線分離的哈佛結構或者改進的哈佛結構,比傳統處理器的馮諾依曼結構有更快的指令執行速度。

(2)采用多總線結構??赏瑫r進行取指令和多個數據存取操作,并由輔助寄存器自動增減地址進行尋址,使CPU在一個機器周期內可多次對程序空間和數據空間進行訪問,大大地提高了dsp的運行速度。

(3)采用流水線技術。每條指令可通過片內多功能單元完成取指、譯碼、取操作數和執行等多個步驟,實現多條指令的并行執行。

(4)配有專用的硬件乘法-累加器。 在一個指令周期內可完成一次乘法和一次加法。 (5)具有特殊的dsp指令。如:c54x中的FIRS和LMS指令,專門用于完成系數對稱的FIR濾波器和LMS算法。

(6)硬件配置強。具有串行口、定時器、主機借口、DMA控制器、軟件可編程等待狀態發生器等片內外設,還配有中斷處理器、PLL、片內存儲器、測試接口等單元電路,可以方便地構成一個嵌入式自封閉控制的處理系統。 (7)省電管理和低功耗。 (8)運算精度高。

2.TI公司的DSP產品目前有哪三大主流系列?各自的應用領域是什么? 答:

(1) TMS320C2000系列,稱為DSP控制器,集成了flash存儲器、高速A/D轉換器以及可靠的CAN模塊及數字馬達控制的外圍模塊,適用于三相電動機、變頻器等高速實時工控產品等需要數字化的控制領域。

(2) TMS320C5000系列,這是16位定點DSP。主要用于通信領域,如IP電話機和IP電話網關、數字式助聽器、便攜式聲音/數據/視頻產品、調制解調器、手機和移動電話基站、語音服務器、數字無線電、小型辦公室和家庭辦公室的語音和數據系統。

(3) TMS320C6000系列,采用新的超長指令字結構設計芯片。其中2000年以后推出的C64x,在時鐘頻率為1.1GHz時,可達到8800MIPS以上,即每秒執行90億條指令。其主要應用領域為:1.數字通信:完成FFT、信道和噪聲估計、信道糾錯、干擾估計和檢測等;2.圖像處理:完成圖像壓縮、圖像傳輸、模式及光學特性識別、加密/解密、圖像增強等。

3.簡述TMS320C54x的DARAM與其它存儲器有什么區別?

答:DARAM由一些分塊組成。每個DARAM塊在單周期內能被訪問2次。 4.請詳細描述馮·諾依曼結構和哈佛結構,并比較它們的不同。 答:

(1)馮諾依曼結構,采用單存儲空間,即程序指令和數據共用一個存儲空間,使用單一的地址和數據總線,取指令和取操作數都是通過一條總線分時進行。當進行高速運算時不但不能同時進行取指令和取操作數,而且還會造成數據傳輸通道的瓶頸現象,工作速度較慢。 (2)哈佛結構采用雙存儲空間,程序存儲器和數據存儲器分開,有各自獨立的程序總線和數據總線,可獨立編址和獨立訪問,可對程序和數據進行獨立傳輸,使取指令操作、指令執行操作、數據吞吐并行完成,大大提高了數據處理能力和指令的執行速度,非常適合于實時的數字信號處理。

5、TMS320C54x 系統,有哪幾種尋址方式?每種尋址方式寫一條指令。 答:

(1)立即尋址:LD

#80H,A

;立即數指令;

(2)絕對尋址:

MVKD 2000H, *AR5

;數據存儲器數據?數據存儲器

;2000H為數據存儲器地址

(3)累加器尋址:READA 2000H

;程序存儲器數據?數據存儲器

;累加器A中存放的是程序存儲器地址

;2000H是數據存儲器地址 (4)直接尋址:ADD 20H, B

;

操作數地址=DP左移7位+20H , CPL=0 操作數地址=SP

+20H , CPL=1 (5)間接尋址:LD *AR2+, A

;

(6)存儲器映像寄存器尋址:LDM 39H, A

;數據存儲器數據?累加器A

;SPSD0?累加器A (7)堆棧尋址:PSHM ST0 6. 請描述FIRS指令的功能。 答:

FIRS Xmem,Ymem,pmad

;有限沖激響應(FIR)濾波器指令

;pmad?PAR ;如果 RC>0 ;B+AH x (PAR)?B ;((Xmem) +(Ymem))<<16 ?A ;PAR+1? PAR ;RC-1 ?RC FIRS指令實現一個對稱的有限沖激響應(FIR)濾波器。首先Xmem和Ymem相加后的結果左移16位放入累加器A中。然后累加器A的高端(32~16位)和由pmad尋址得到的Pmem相乘,乘法結果與累加器B相加并存放在累加器B中。在下一個循環中,pmad加1.一旦循環流水線啟動,指令成為單周期指令。

7. FFT蝶形運算對輸入序列倒序采用何種尋址方式?AR0中應存放什么值? 答:

(1)間接尋址中的位倒序尋址方式。FFT運算主要實現采樣數據從時域到頻域的轉換,要求采樣點輸入是倒序時,輸出是順序;若輸入是順序,則輸出是倒序,采用位倒序尋址方式正好符合FFT算法的要求。

(2)AR0存放的整數值為FFT點數的一半。 8. 簡述主機接口(HPI)的通訊過程。 答:

TMS320C54X的主機接口(HPI)是一個8位并行接口,通過8根外部數據線HD(0~7)實現DSP與其他總線或CPU進行通信。當TMS320C54X與主機傳送數據時,HPI能自動地將外部接口連續傳來的8位數組成16位數,并傳送至TMS320C54X。當主機使用HPI寄存器執行數據傳輸時,HPI控制邏輯自動執行對TMS320C54X內部的雙尋址RAM的訪問,以完成數據處理。 9. 進行塊重復操作要用到哪幾個寄存器?塊重復可否嵌套? 答:

RPT:循環執行一條指令

RPTB:循環執行一段指令,即塊循環指令 (1)進行塊重復操作的循環次數由塊循環計數器(BRC)確定,需要利用兩個寄存器:塊重復起始地址寄存器(RSA)、塊重復結束地址寄存器(REA)。 (2)由于使用了不同的寄存器,因此可以實現循環嵌套。

10. TMS320C54x的CPU主要由哪幾個部分構成?它們的功能是什么? 答:

(1)40位算術邏輯運算單元ALU:可完成寬范圍的算術、邏輯運算;

(2)2個40位的累加器A和B:可以作為ALU或MAC的目標寄存器存放運算結果,也可以作為ALU或MAC的一個輸入;

(3)支持—16~31位移位范圍的桶形移位寄存器:用于累加器或數據區操作數的定標,將輸入數據進行0~31位的左移和0~16位的右移;

(4)乘法-累加單元MAC:可在一個流水線周期內完成1次乘法運算和1次加法運算; (5)比較。選擇和存儲單元CSSU:用于完成Viterbi算法中的加法/比較/選擇(ACS)操作;

(6)指數編碼器EXP:用于支持指數運算指令的專用硬件,可以在單周期內執行EXP指令,求累加器中指數的指數值;

(7)CPU狀態和控制寄存器:包括ST0、ST1和PMST,這些寄存器都是存儲器映像寄存器,可以很方便對它們進行數據操作:1.將它們快速地存放到數據存儲器;2.由數據存儲器對它們進行加載;3.用子程序或中斷服務程序保存和恢復處理器的狀態。

11. 已知中斷向量TINT=13H,中斷向量地址指針IPTR=111H,求中斷向量地址是多少?

12. DSP的仿真器的作用是什么? 答:

(1) 下載程序;

(2) 樣機資源可視化,應用程序調試;

(3) 控制樣機運行方式:單步執行、執行到斷點或者全速執行。

第五篇:dsp實驗指導書尉

電氣工程學院

《DSP技術及應用》

實驗指導書

尉學軍編寫

適用專業:電子信息工程

貴州大學 二OO 八年八月

前言

《數字信號處理》實驗是理論教學的深化和補充,具有較強的實踐性,是一門重要的專業必修課,可作為通信類、電子類專業學生的選修課。所開設的實驗以具體實例為實驗內容,讓學生深刻理解DSP芯片的特點,培養學生應用DSP設計解決實際問題的能力。通過上機與實驗,理解實驗原理及實驗方案,掌握正確的操作規程,掌握5410USB EVM實驗箱的正確使用方法。掌握CCS軟件的使用,熟練掌握DSP的匯編語言的編寫和程序調試,掌握DSP的中斷技術和定時器的初始化方法以及應用,以及利用串口進行數據采集。并要求學生利用北京聞亭5410USB EVM實驗箱進行數字式信號發生器和濾波器的設計。

作者在此設計了11個實驗,其中4個驗證性實驗,6個設計性實驗,1個綜合性實驗。在開設實驗過程中,可以根據大綱選作部分實驗。

目錄

1、實驗一:CCS的安裝與simulate的使用?????????????????????????????????????????????????????3

2、實驗二:匯編語言基本算術運算????????????????????????????????????????????????????????????????7

3、實驗三:程序的控制和轉移??????????????????????????????????????????????????????????????????????10

4、實驗四:數字式正弦信號發生器???????????????????????????????????????????????????????????????14

5、實驗五:FIR數字濾波器 ?????????????????????????????????????????????????????????????????????????21

6、實驗六:IIR數字濾波器 ?????????????????????????????????????????????????????????????????????????27

7、實驗七: 圖象的伽瑪增強?????????????????????????????????????????????????????????????? ??????????35

8、實驗八: 快速傅立葉變換(FFT)的實現??????????????????????????????????????????????????????42

9、實驗九: 控制XF引腳周期性變化?????????????????????????????????????????????????????????????49

10、實驗十: 多通道緩沖串口的使用?????????????????????????????????????????????????????????????54

11、實驗十一: DTMF算法設計和DSP實現?????????????????????????????????????????????????????62

12、 實驗報告基本內容要求????????????????????????????????????????????????????????????????????????66

13、實驗報告格式??????????????????????????????????????????????????????????????????????????????????????????68

14、參考文獻?????????????????????????????????????????????????????????????????????????????????????????????????70

實驗一: CCS的安裝與simulate的使用

實驗學時:2 實驗類型:驗證 實驗要求:必修

一、實驗目的

學會CCS的安裝和設置, 熟悉程序的開發流程, 初步掌握Simulator的使用方法.

二、實驗內容

安裝CCS軟件,并利用CCSsetup進行設置 對一個簡單程序進行調試

三、實驗原理、方法和手段

利用軟件對指令進行仿真分析。

四、實驗組織運行要求

根據本實驗的特點、要求和具體條件,采用教師簡單講解,學生自己動手操作的形式。

五、實驗條件

計算機一臺

六、實驗步驟

1、CCSset 的設置

CCS設置程序是用于建立CCS集成開發環境與目標板或simulator之間通信的接口.CCS是一個開放的環境,通過設置不同的驅動完成對不同環境的支持.本教案以CCS2.0為例說明CCS下的驅動設置方法.

假設安裝路徑為: d: i下,對CCS的 設置如下:

(1) 雙擊桌面上的”setup ccs 2 (c5000)”,開始運行程序,回出現如圖1-1所示的界面; 3

圖1-1 CCS的首界面 (2) 單擊”CLOSE”按紐關閉對話框. (3) 在“Available Board/Simulator Types”欄選擇 “54xx simulator”在“Board Propertis”對話框中點擊按紐“next”,一直到“Finish”如圖1-2所示。

圖1-2 選擇仿真板界面

此處對要仿真的方式進行選擇,是進行軟件仿真(Simulator)還是硬件仿真(Eimulator),并可以選擇要仿真的板子的型號,在此我們選擇軟件仿真.用的是C54xx Simulator. (4) 在菜單File中選擇”Start Code Composer Studio”,啟動CCS 5000.

設置完畢

2、一個簡單DSP程序的調試

(1) 創建工程

運行CCS 5000(54XX Simulaor/CPU)

在Project菜單中選擇New項,將彈出Project Creation的窗口

圖 1-3 創建工程界面

將新建的工程存入E盤,CCS將建立一個名為*.pjt的工程,此文件保存了工程的設置信息及工程中的文件引用情況.

(2)將文件添加到工程

從Files->new菜單中選擇Source File,輸入源程序.這里請大家輸入以下的源程序.將程序存為*.asm的程序 .title "wx1.asm" .mmregs STACK .usect "STACK",10H .bss a,4 .bss x,4 .bss y,1 .def start .data table: .word 1,2,3,4 .word 8,6,4,2 .text start: STM #0,SWWSR STM #STACK+10H,SP STM #a,AR1 RPT #7 MVPD table,*AR1+ LD #1,DP CALL SUM end: B end SUM: STM #a,AR3 STM #x,AR4 RPTZ A,#3 MAC *AR3+,*AR4+,A STL A,@y 5

RET .end 從Project菜單中選取 Add Files to Project,將剛才編寫的程序添加到本工程. 雙擊的Source右邊的”+”,可以觀察到剛才所添加的源文件. (3) 生成和運行程序

執行菜單Project->Rebuild All,對文件進行編譯,匯編,鏈接,Output窗口將顯示編譯,匯編,鏈接的信息,錯誤提示等.最后生成*.out文件.編譯通過時會出現兩個警告.

圖1-4 Output窗口

執行菜單Project->Load Program,將剛才所生成的*.out文件加載到DSP中,CCS將會自動打開一個反匯編窗口,顯示加載程序的反匯編指令.

(4)觀察程序結果:

分別點擊菜單Viex->Memory和Registers可以觀察程序執行后存儲器的變化,程序執行的結果以及寄存器值的變化情況

七、思考題

1. 按照實驗要求寫出實驗報告;將程序顯示的結果粘貼到實驗報告里面.

2. 程序調試過程中,出現什么錯誤,什么原因造成的,怎樣改正的?

3. 熟悉CCS其他菜單的功能,如何設置斷點進行程序調試?

八、實驗報告

在實驗分析過程中,要對寄存器的變化以及存貯器的分配有仔細的分析,實驗報告要將程序結果,存儲器和寄存器的結果抓下來。

九、其它說明

1. 學生實驗時,應嚴格準守實驗室規則、安全制度和學生實驗守則;

2. 認真學習實驗操作技能,嚴格按指導書和實驗指導教師的指導操作有關規儀器設備,不要做與本實驗無關的事情;

3. 做好實驗預習、實驗記錄,并按要求按時完成實驗報告。

實驗二:匯編語言基本算術運算

實驗學時:2 實驗類型:驗證 實驗要求:必修

一、實驗目的

進一步熟悉CCS進行程序編譯,調試的步驟. 掌握進行算術運算的常用指令,以及偽指令的作用. 掌握匯編語言進行整數運算,小數運算以及雙操作數運算.浮點運算的方法.注意雙操作數運算所允許使用的輔助寄存器.

二、實驗內容

加減法和乘法運算 小數運算

三、實驗原理、方法和手段

利用軟件對指令進行仿真分析。

四、實驗組織運行要求

根據本實驗的特點、要求和具體條件,采用教師簡單講解,學生自己動手操作的形式。

五、實驗條件

計算機一臺

六、實驗步驟

1、計算 z=x+y-w

.tiltle “example.asm” .mmregs STACK .usect “stack”,10H

.bss x,1 .bss y,1 .bss w,1 .bss z,1 .def start .data table: .word 10,26,23 .text Start: STM #0,SWWSR STM #STACK+10H,SP

7 STM #x,AR1 RPT #2 MVPD table,*AR1+ CALL SUMB end: B end SUMB: LD @x,A ADD @y,A SUB @w,A LD #1,DP STL A,@z RET .end

2、乘加運算

.tiltle “example.asm” .mmregs STACK .usect “stack”,10H

.bss a,4 .bss x,4 .bss y,1 .def start .data table .word 1,2,3,4 .word 8,6,4,2

.text start: STM #0,SWWSR STM #STACK+10H,SP STM #x,AR1 RPT #7 MVPD table,*AR1+ CALL SUM end: B end SUM: STM #a,AR3 STM #x,AR4 RPTZ A,#3 MAC *AR3+,*AR4+,A STL A,@Y RET .end

3、 小數運算

.tiltle “example.asm” .mmregs STACK .usect “stack”,10H .bss a,4 .bss x,4

.bss y,1 .def start .data table .word 1*32768/10 .word 2*32768/10 .word -3*32768/10 .word 4*32768/10 .word 8*32768/10 .word 6*32768/10 .word -4*32768/10 .word -2*32768/10 start: SSBX FRCT STM #a,AR1 RPT #7 MVPD table,*AR1+ STM #a,AR3 STM #x,AR4 RPTZ A,#3 MAC *AR3+,*AR4+,A STL A,@Y end: B end .end 觀察程序結果: 分別點擊菜單Viex->Memory和Registers可以觀察程序執行后存儲器的變化,程序執行的結果以及寄存器值的變化情況.

七、思考題

1. 按照實驗要求寫出實驗報告;將程序顯示的結果粘貼到實驗報告里面. 2. 程序調試過程中,出現什么錯誤,什么原因造成的,怎樣改正的? 3. 在小數運算的過程中,小數大于1,比如a2=1.2,程序如何修改.

八、實驗報告

要求學生按本實驗指導書后附的實驗報告格式和要求的內容寫出實驗報告,實驗報告應包括實驗預習、實驗記錄和實驗報告等三部分內容。

九、其它說明

1. 學生實驗時,應嚴格準守實驗室規則、安全制度和學生實驗守則;

2. 認真學習實驗操作技能,嚴格按指導書和實驗指導教師的指導操作有關規儀器設備,不要做與本實驗無關的事情;

3. 做好實驗預習、實驗記錄,并按要求按時完成實驗報告。

實驗三:程序的控制和轉移

實驗學時:2 實驗類型:驗證 實驗要求:必修

一、實驗目的

了解堆棧的使用方法,掌握指令的重復操作,程序的跳轉,調用和返回. 掌握條件算符組合時候應注意的三點; 掌握*.cmd文件,特別是偽指令MEMORY,SECTION的作用.

二、實驗內容

程序的轉移和調用,重復執行,堆棧的使用

三、實驗原理、方法和手段

利用軟件對指令進行仿真分析。

四、實驗組織運行要求

根據本實驗的特點、要求和具體條件,采用集中講解和學生動手的形式。

五、實驗條件

安裝CCS 的電腦一臺

六、實驗步驟

程序調試步驟參考實驗一

1、 程序的轉移和調用 .title “example.asm” .mmregs STACK .usect “stack”,10H; .bss x,5 .bss y,1 .def start .data table: .word 10,30,4,5,6 .text start: STM #0,SWWSR STM #STACK+10H,SP ;SP= STM #x,AR1; AR1= RPT #4 MVPD table,*AR1+ ;AR1=

LD #0,A CALL SUM end: B end SUM: STM #x, AR3 STM #4,AR2 loop: ADD *AR3+,A BANZ loop,*AR2- STL A,@y; AR2= , AR3= ,A= RET .end 將以上文件存為*.ASM格式. 以下是*.CMD文件: *.obj ;注意:此處文件名要與上面的*.ASM文件的名字要一致. -o *.out -m *.map -e start MEMORY { PAGE 0: EPROM: org=0E000H len=0100H VECS : org=0FF80H len=0004H PAGE 1: SPRAM: org=0060H len=0020H DARAM: org=0080H len=0100H } SECTIONS { .text :>EPROM PAGE 0 .data :>EMROM PAGE 0

.bss :>SPRAM PAGE 1 STACK :>DARAM PAGE 1 .vectors :>VECS PAGE 0 } 2) 堆棧段的初始化

.title “wxample3.asm” .mmregs size .set 100 stack .usect “STK”,10H .bss length,10H .def start .text start: STM #0,SWWSR STM #stack+size,SP 11

LD #-8531,A STM #length,AR1 MVMM SP,AR7 loop: STL A,*AR7- BANZ loop,*AR1- .end CMD文件 example.obj -o example.out -m example.map -e start MEMORY { PAGE 0: EPROM :ORG=0E000H,LEN=0100h VECS: ORG=0FF80H,LEN=0004H PAGE 1: SARAM: ORG=0060H,LEN=0010H; DARAM: ORG=0070H,LEN=0100H } SECTIONS { .text :>EPROM PAGE 0 .data :>EPROM PAGE 0 .bss :>SARAM PAGE 1 .STACK :>DARAM PAGE 1 }

3、 重復操作

下面程序實現對數組進行初始化以后再對每個元素加1 .title “example.asm”

.mmregs stack .usect “STACK”,10H .bss x,5 .def start .text start: STM #x,AR1 LD #2,A ;將每個數組初始化為2 RPT #4 STL A,*AR1+ LD #1,16,A STM #4,BRC STM #X,AR4 PRTB next-1 12

ADD *AR4,16,B,A STH A,*AR4+ next: LD #0,B end: B end .end

七、思考題

1. 按照實驗要求寫出實驗報告;將程序顯示的結果粘貼到實驗報告里面. 2. 程序調試過程中,出現什么錯誤,什么原因造成的,怎樣改正的? 3. 簡要寫出*.cmd文件,特別是偽指令MEMORY,SECTION的作用 4. 試將程序1的運行結果填寫的相應的橫線上。

八、實驗報告

要求學生按本實驗指導書后附的實驗報告格式和要求的內容寫出實驗報告,實驗報告應包括實驗預習、實驗記錄和實驗報告等三部分內容。

九、其它說明

1. 學生實驗時,應嚴格準守實驗室規則、安全制度和學生實驗守則;

2. 認真學習實驗操作技能,嚴格按指導書和實驗指導教師的指導操作有關規儀器設備,不要做與本實驗無關的事情;

3. 做好實驗預習、實驗記錄,并按要求按時完成實驗報告。

實驗四:數字式正弦信號發生器

實驗學時:2 實驗類型:設計型 實驗要求:必修

一、實驗目的

掌握正弦信號發生器的算法; 學會用斷點進行程序調試.

二、實驗內容

利用DSP設計一個正弦信號發生器

三、實驗原理、方法和手段

在高等數學中,正弦函數和余弦函數可以展開為泰勒級數,其表達式為: x3x5x7 sinx=x-+- +„ 3!5!7!x2x4x6 cosx=1-+- +„ 2!4!6! 如果要計算一個角度的正弦和余弦,可以取泰勒級數的前5項進行近似計算. 上兩個式子可以化為: x2x2x2x2 sinx=x(1- (1-(1-(1-)))) 2*34*56*78*9x2x2x2x2 cosx=1-(1-(1- (1- ))) 23*45*67*8 然后利用這兩個式子,計算出0

o___

45(間隔為0.5)的正弦和余弦值.

o___

oo 再利用sin2x=2sinxcos公式,計算0 最后通過復制取反,獲得0

o___

o

90的正弦值.

o

359的正弦值.

四、實驗組織運行要求

根據本實驗的特點、要求和具體條件,采用集中講授和學生動手的形式。

五、實驗條件

安裝CCS軟件的電腦一臺

六、實驗步驟

程序調試步驟參考實驗一

1、源程序

.mmregs .def start .ref d_xs,d_sinx,d_xc,d_cosx,sinx,cosx sin_x: .usect "sin_x",360 STACK .usect "STACK",10H PA0 .set 0 k_theta .set 286 start: .text STM #STACK+10H,SP STM k_theta,AR0 STM 0,AR1 STM #sin_x,AR6 STM #90,BRC RPTB loop1-1 LDM AR1,A LD #d_xs,DP STL A,@d_xc STL A,@d_xs CALL sinx CALL cosx LD #d_sinx,DP LD @d_sinx,16,A MPYA @d_cosx STH B,1,*AR6+ MAR *AR1+0 ;計算0—45度的正弦值 loop1: STM #sin_x+89,AR7 STM #88,BRC RPTB loop2-1 LD *AR7-,A STL A,*AR6+ ;計算45-89度的正弦值 loop2: STM #179,BRC STM #sin_x,AR7 RPTB loop3-1 LD *AR7+,A NEG A STL A,*AR6+ ;計算90-179度的正弦值 loop3: STM #sin_x,AR6 STM #1,AR0 STM #360,BK ;計算180-359度的正弦值

loop4: PORTW *AR6+0%,PA0 B loop4

sinx: sinx子程序 .def d_xs,d_sinx .data table_s .word 01C7H .word 030BH .word 0666H .word 1556H d_coef_s .usect "coef_s",4 d_xs .usect "sin_vars",1 d_square_xs .usect "sin_vars",1 d_temp_s .usect "sin_vars",1 d_sinx .usect "sin_vars",1 d_l_s .usect "sin_vars",1 .text SSBX FRCT STM d_coef_s,AR5 RPT #3 MVPD #table_s,*AR5+ STM #d_coef_s,AR3 STM #d_xs,AR2 STM #d_l_s,AR4 STM #7FFFH,d_l_s SQUR *AR2+,A ST A,*AR2 ||LD *AR4,B MASR *AR2+,*AR3+,B,A MPYA A STH A,*AR2 MASR *AR2-,*AR3+,B,A MPYA *AR2+ ST B,*AR2 || LD *AR4,B MASR *AR2-,*AR3+,B,A MPYA *AR2+ ST B,*AR2 ||LD *AR4,B MASR *AR2-,*AR3+,B,A MPYA d_xs STH B,d_sinx RET

cosx: ; cosx子程序 .def d_xc,d_cosx .data table_c .word 0249H .word 0444H .word 0aabH .word 4000H d_coef_c .usect "coef_c",4 d_xc .usect "cos_vars",1 d_square_xc .usect "cos_vars",1 d_temp_c .usect "cos_vars",1 d_cosx .usect "cos_vars",1 c_l_c .usect "cos_vars",1 .text SSBX FRCT STM d_coef_c,AR5 RPT #3 MVPD #table_c,*AR5+ STM #d_coef_c,AR3 STM #d_xc,AR2 STM #c_l_c,AR4 STM #7FFFH,c_l_c SQUR *AR2+,A ST A,*AR2 ||LD *AR4,B MASR *AR2+,*AR3+,B,A MPYA A STH A,*AR2 MASR *AR2-,*AR3+,B,A MPYA *AR2+ ST B,*AR2 || LD *AR4,B MASR *AR2-,*AR3+,B,A SFTA A,-1,A NEG A MPYA *AR2+ MAR *AR2+ RETD ADD *AR4,16,B STH B,*AR2 RET .end *.CMD 文件 sinx.obj 17

-o sin.out -m sin.map -e start MEMORY { PAGE 0: EPROM: org=0E000H,len=1000H VECS: org=0FF80H,len=0080H PAGE 1: SPRAM: org=0060H,len=0020H DARAM1: org=0080H,len=0010H DARAM2: org=0090H,len=0010H DARAM3: org=0200H,len=0200H }

SECTIONS { .text :>EPROM PAGE 0 .data :>EPROM PAGE 0 STACK :>SPRAM PAGE 1 sin_vars :>DARAM1 PAGE 1 coef_s :>DARAM1 PAGE 1 cos_vars :>DARAM2 PAGE 1 coef_c :>DARAM2 PAGE 1 sin_x : align (512){}>DARAM3 PAGE 1 }

2、程序調試過程中,可以采用利用斷點進行調試,方法如下: 1)利用斷點對話框進行設置. 2)使用工具條上的按紐進行設置, 利用工具條上的按紐,可以快速設置斷點: 在反匯編窗口中,將光標移到需要設置斷點的語句行上,然后單擊工具條上的設置斷點按紐(有一個手),則在該語句行上設置一個斷點. 3) 在反匯編窗口直接進行設置. 在反匯編窗口,用鼠標直接雙擊要設置的斷點的指令行,即可完成斷點的設置. 執行的時候可以選擇動畫運行. 在執行前先設置好斷點,然后,沒執行一次操作命令,就會從當前位置執行到下一個斷點處.連續執行操作命令就可以實現動畫操作. 使用調試菜單”DEBUG”中的”Animate”命令,或者單擊調試工具條上的動畫執行按 18

紐,用戶就可以進行動畫操作.

3、觀察波形

觀察存儲器和寄存器的內容在實驗一中進行了介紹.在此不做贅述了.現在介紹CCS圖形工具的使用方法. CCS開發環境提供了多種強大的圖形顯示工具,可以將內存中的數據以各種圖形的方式顯示給用戶,幫助擁護直觀的了解數據的意義. CCS提供了四大類九種圖形顯示方式: 1) 時頻圖(Time_frequency) 單曲線圖(Single_time) 對數據不做處理,直接繪制顯示緩沖區數據的幅度_時間曲線

雙曲線圖(Double_time) 在一個圖象中顯示兩條信號的幅度_時間曲線 FFT幅度(FFT Magnitude) 對顯示緩沖器數據進行FFT變換,顯示幅度_頻率圖

復數FFT(Complex FFT) 對復數數據的實部和虛部分別進行FFT變換,在一幅圖中顯示兩條幅度_頻率曲線. FFT幅度和相位(FFT Magnitude and Phase) 在一幅圖中顯示幅度_頻率曲線和相位_頻率曲線. FFT多楨顯示(略) 2) 星座圖(Constellation) 顯示信號的相位分布 3) 眼圖(Eye Diagram) 顯示信號碼間的干擾情況 4) 圖像顯示(Image) 顯示YUV和RGB圖像

圖形顯示步驟: 在”View”菜單中,選擇”Graph”選項,彈出命令子菜單, 在該菜單中選擇”Time/Frequency”,

在彈出的對話框中,將”Display Type”選擇為”Single_time”,

”Start Addtress”定為”0200H”, 將”PAGE”定為”data”

“Display Data Size”定為”0200H”

點擊”OK”來觀察圖象. 19

圖4-1 產生的正弦波形

七、思考題

按照實驗要求寫出實驗報告;將程序顯示的結果粘貼到實驗報告里面. 如何設置斷點進行程序調試? 要產生周期性的三角波,或者鋸齒波,程序如何實現?

八、實驗報告

要求學生按本實驗指導書后附的實驗報告格式和要求的內容寫出實驗報告,實驗報告應包括實驗預習、實驗記錄和實驗報告等三部分內容。

九、其它說明

1. 學生實驗時,應嚴格準守實驗室規則、安全制度和學生實驗守則;

2. 認真學習實驗操作技能,嚴格按指導書和實驗指導教師的指導操作有關規儀器設備,不要做與本實驗無關的事情;

3. 做好實驗預習、實驗記錄,并按要求按時完成實驗報告。

實驗五:FIR數字濾波器

實驗學時:2 實驗類型:設計

實驗要求:選修

一、實驗目的

了解FIR的MATLAB設計方法

掌握FIR的DSP實現方法,熟練掌握循環尋址指令.

二、實驗內容

設計一個31階的低通FIR濾波器,其截止頻率為0.6。

三、實驗原理、方法和手段

FIR濾波器的差分方程: N?1 (5-1) i?0 其中bi為濾波器的系數,N為濾波器的階次,x(n)為輸入,y(n)為輸出. FIR濾波器的MATLAB設計

MATLAB中的工具箱(Toolbox)包含了許多實用程序。它提供了多種FIR濾波器設計方法。

下面以標準頻率響應設計法fir1和任意頻率響應設計法fir2為例說明其使用方法

1、fir1函數

使用fir1函數可設計標準的低通、高通、帶通和帶阻濾波器。

語法: b=fir1(n,Wn) b=fir1(n,Wn,„ftype?) b=fir1(n,Wn,Window) b=fir1(n,Wn,„ftype?,Window) 其中n為 濾波器的階次,Wn為截止頻率,ftype為濾波器的類型,window為采用的窗函數的類型,默認為H amming類型. 1) 采用漢明窗設計低通FIR濾波器

使用b=fir1(n,Wn)可得到低通濾波。0? Wn ?1, Wn=1相當于0.5fs。

格式:

b=fir1(n,Wn) (2) 采用漢明窗設計高通FIR濾波器

21 y(n)??bix(n?i)

在b=fir1(n,Wn,„ftype?)中,當ftype=high時,可設計高通濾波器。

格式:

b=fir1(n,Wn,„high?) (3) 采用漢明窗設計帶通FIR濾波器

在b=fir1(n,Wn)中,當Wn=[ W1 W2 ]時,可得到帶通濾波器,其通帶為W1

格式:

b=fir1(n,[ W1 W2 ]) (4) 采用漢明窗設計帶阻FIR濾波器

在b=fir1(n,Wn,„ftype?)中,當ftype= stop,Wn=[ W1 W2 ]時,fir1函數可得到帶阻濾波器。 格式:

b=fir1(n,[ W1 W2 ],„stop?) 【例1】 采用Hamming窗設計一個48階FIR帶通濾波器,通帶為0.35 < w < 0.65。 采用fir1函數的程序格式:

b=fir1( 48,[ 0.35 0.65 ]); freqz(b,1,512) 【例2】設計一個FIR高通濾波器,使其具有30dB波紋的Chebyshev窗,其階數為34,截止頻率為0.48。

解:采用fir1函數設計高通濾波器的程序格式為 Window = chebwin(35,30);

b=fir1( 34,0.48,„high?,Window) ; freqz(b,1,512) 注意:用fir1函數設計高通和帶阻濾波器時,所使用的階數n應為偶數,當輸入的階數n為奇數時,fir1函數會自動將階數增加1形成偶數。 2. fir2函數

用來設計有任意頻率響應的各種加窗FIR濾波器。 語法:

b=fir2(n,f,m)

b=fir2(n,f,m,Window) b=fir2(n,f,m,npt)

b=fir2(n,f,m,npt,Window) b=fir2(n,f,m,npt,lap)

b=fir2(n,f,m,nptt,lap,Window) 說明:

22

參數n為濾波器的階數;

參數f為頻率點矢量,且f?[0,1],f=1對應于0.5fs。矢量f按升序排列,且第一個元素必須為0,最后一個必須為1,并可以包含重復的頻率點;

參數m為幅度點矢量,在矢量m中包含了與f相對應的期望得到濾波器幅度;

參數Window用來指定所使用的窗函數類型,其默認值為漢明(Hamming)窗;

參數npt用來指定fir2函數對頻率響應進行內插的點數;

參數lap用來指定fir2函數在重復頻率點附近插入的區域大小。

【例3】 設計一個31階的低通FIR濾波器,其截止頻率為0.6。

解:采用fir2函數的程序格式:

在MATLAB 的命令窗口輸入一下指令 f = [ 0 0.6 0.6 1 ]; m = [ 1 1 0 0 ]; b=fir2(29,f,m)

會得到下面的結果: b = Columns 1 through 10 0.0000 0.0017 -0.0016 -0.0023 0.0059 -0.0001 -0.0127 0.0112 0.0151 -0.0337 Columns 11 through 20 0.0003 0.0634 -0.0569 -0.0893 0.2996 0.5996 0.2996 -0.0893 -0.0569 0.0634 Columns 21 through 30 0.0003 -0.0337 0.0151 0.0112 -0.0127 -0.0001 0.0059 -0.0023 -0.0016 0.0017 Column 31 0.0000

四、實驗組織運行要求

教師簡單講解,學生調試程序,教師輔導

五、實驗條件

安裝NATLAB和CCS的電腦一臺

六、實驗步驟

實驗步驟同實驗一: 請大家輸入以下程序:

.title “fir.asm” .mmregs .def start h .usect "h",31

23

y .usect "y",1 xn .usect "xn",31 x1 .usect "x1",1 PA2 .set 2 PA1 .set 1 .data table: .word 0*32768/10000, 17 *32768/10000 .word -16*32768/10000, -23*32768/10000 .word 59*32768/10000 , -1*32768/10000 .word -127*32768/10000,112*32768/10000 .word 151*32768/10000,-337*32768/10000 .word 3*32768/10000 ,634*32768/10000 .word -569*32768/10000,-893*32768/10000 .word 2996*32768/10000 , 5996*32768/10000 .word 2996*32768/10000 , -893*32768/10000 .word -569*32768/10000 , 634*32768/10000 .word 3*32768/10000, -337*32768/10000 .word 151*32768/10000, 112*32768/10000 .word -127*32768/10000, -1*32768/10000 .word 59*32768/10000 , -23*32768/10000 .word -16*32768/10000, 17*32768/10000 .text start: SSBX FRCT STM #h,AR1; RPT #30 MVPD #table,*AR1+ STM #xn,AR2 RPTZ A,#30 STL A,*AR2+ STM #xn+30,AR3 STM #h+30,AR4 STM #31,BK STM -1,AR0 LD #x1,DP PORTR PA1,@x1 LD @x1,A LD #xn,DP STL A,@xn FIR: RPTZ A,#30 MAC *AR3+0%,*AR4+0%,A STH A,@y PORTW @y,PA2 PORTR PA1,@x1 LD @x1,A 24

STL A,*AR3+0% B FIR .end 假如已經從端口PA1讀到的數據,放在IN.dat文件中,經過濾波后,從端口輸出的數據放在OUT.dat中. IN.dat文件中的內容如下: 1651 1 bf 0 0 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 其余略

OUT.dat文件為空白. 首先將生成的*.out 文件加載入系統中,在反匯編窗口,設置探測點,如下:

圖5-1 輸入數據加載斷點設置

然后在FILE菜單中選擇出數據、加載到輸入、輸出斷口。

最后觀察濾波前后的頻譜圖分別如下:

功能,會彈出如下對話框,可以分別將輸入數據輸 25

七、思考題

試用此參數設計一個高通濾波器,并用DSP實現。

八、實驗報告

要求學生按本實驗指導書后附的實驗報告格式和要求的內容寫出實驗報告,實驗報告應包括實驗預習、實驗記錄和實驗報告等三部分內容。

九、其它說明

1. 學生實驗時,應嚴格準守實驗室規則、安全制度和學生實驗守則;

2. 認真學習實驗操作技能,嚴格按指導書和實驗指導教師的指導操作有關規儀器設備,不要做與本實驗無關的事情;

3. 做好實驗預習、實驗記錄,并按要求按時完成實驗報告。

26

實驗六:IIR數字濾波器

實驗學時:2 實驗類型:設計

實驗要求:選修

一、實驗目的

了解IIR濾波器的原理及使用方法

了解使用MATLAB語言設計IIT濾波器的方法

掌握DSP對IIR對濾波器的設計及編程方法

熟悉在CCS環境下對IIR濾波器的調試方法

二、實驗內容

要求設計一個采樣頻率為1200Hz,截止頻率為200Hz的高通濾波器. 輸入信號頻率為100Hz和300Hz的合成信號,目的是同過所設計的濾波器的將100Hz的信號濾除掉,余下300Hz的信號成分,達到濾波效果.

三、實驗原理、方法和手段

IIR數字濾波器的輸入x(k)和輸出y(k)的關系可以用如下常系數線性差分方程及其Z變換描述,即

y(k)= (6-1) bx(k?i)?ay(k?i)?i?0Mi?i?1Ni

系統的傳遞函數為

b0?b1z?...?bnz H(Z)= (6-2)

?1?N1?a1z?1?...?anz?M

四、實驗組織運行要求

教師簡單講解,學生調試程序,教師全程輔導

五、實驗條件

安裝CCS和MATLAB的電腦一臺

六、實驗步驟

1、 MATLAB的濾波器設計

在MATLAB中使用濾波器設計工具箱(FDA)來設計濾波器,首先打開MATLAB,在命令窗口輸 27

入FDAtool, 將出現濾波器設計工具箱. 下圖是打開的濾波器設計的主要界面,通過輸入有關參數可以設計各種濾波器,包括濾波器的類型,階數,截止頻率(Fpass),帶寬,紋波系數(Apass),采樣頻率(Fs) 等有關參數.

6-1 MAILAB設計IIR濾波器界面

上圖所設計是IIR型的3階契比雪夫1型高通濾波器的采樣頻率為1200Hz,截止頻率為200Hz,圖中中間顯示的是數據為設計好的濾波器的參數. 通過這個工具箱可以觀察濾波器的頻率特性,沖激響應特性,階躍響應,零極點示意圖

2、 用MATLAB 產生輸入信號: t=(1:256)/1200; x=32768*(sin(2*pi*100*t)+sin(2*pi*300*t))/2 此時會產生如下結果: x = 1.0e+004 * 28

Columns 1 through 12 2.4576 1.4189 0 1.4189 2.4576 0 -2.4576 -1.4189 0 -1.4189 -2.4576 -0 (會產生256點周期為12的輸入信號,因此在此只給出一個周期的輸入信號)

3、濾波器的匯編語言設計: 在編寫濾波器之前,首先確定濾波器的參數,從上面的設計中得出濾波器的系數,為了防止小數運算的溢出,將各個系數除以8,得到新的數據: 分子:0.04045,-0.1213375,0.1213375,-0.04045 分母:1 ,-0.1151875,0.080275,0.080275,-0.0030875 針對以上參數,編寫匯編語言如下: .mmregs .ref filter_start .def _main ;定義主函數入口 K_DATA_SIZE .set 256 ;定義數據個數 K_BUFFER_SIZE .set 8 K_STACK_SIZE .set 256 ;堆棧大小

K_A .set 3 ;A的個數 K_B .set 4 ;B的個數 K_CIR .set K_BUFFER_SIZE STACK .usect "stack",K_STACK_SIZE SYSTEM_STACK .set K_STACK_SIZE+STACK DATA_DP .usect "filter_vars",0 filterdata .usect "filter_vars",K_DATA_SIZE bufferdatay .usect "filter_vars",K_BUFFER_SIZE*2 bufferdatax .usect "filter_vars",K_BUFFER_SIZE*2 .data .global inputdata inputdata .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0

.word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0

29

.word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189,24576,0,-24576,-14189,0,-14189,-24576,0 .word 24576,14189,0,14189 .text .asg AR2,ORIGIN .asg AR3,INPUT .asg AR4,FILTER .asg AR5,OUTPUT _main: SSBX FRCT SSBX INTM LD #DATA_DP,DP STM #STACK,SP CALL filter_start NOP NOP NOP loop B loop

.def b1,b2,b3,b4,a1,a2,a3 .def filter_start b1 .set 052dh b2 .set -0f87h b3 .set 0f87h b4 .set -052dh a1 .set -0ebeh a2 .set 0a46h a3 .set -0065h

.text filter_start STM #inputdata,ORIGIN STM #bufferdatax,INPUT STM #bufferdatay,FILTER STM #filterdata,OUTPUT

STM #K_DATA_SIZE-3-1,BRC 30 STM #K_CIR,BK STM #1, AR0 RPTB filter_end-1 MVDD *ORIGIN+,*INPUT RPT #K_B-1-1 MAR *INPUT-0% MPY *INPUT+0%,#b4,B LD B,A MPY *INPUT+0%,#b3,B ADD B,A MPY *INPUT+0%,#b2,B ADD B,A MPY *INPUT+0%,#b1,B ADD B,A MPY *FILTER+0%,#a3,B ADD B,A MPY *FILTER+0%,#a2,B ADD B,A MPY *FILTER+0%,#a1,B ADD B,A STH A,*FILTER-0% STH A,*OUTPUT+ MAR *FILTER-0% filter_end: NOP RET .end

其*.CMD命令文件如下:

iir.obj -o iir.out -m iir.map -e _main MEMORY { PAGE 0: PARAM: org=3000h,len=4000h PAGE 1: DARAM: org=100h,len=4000h } SECTIONS

31

{ .text :> PARAM PAGE 0 stack :> DARAM PAGE 1 filter :> DARAM PAGE 1 .bss :> DARAM PAGE 1 .data :> DARAM PAGE 1 } 編譯,調試程序,生成了執行文件*.out,然后載入*.out文件,運行. 4) 運行后,觀察輸入數據的時域和頻域的波形如下:

圖 6-2 濾波前信號的時域圖

32

圖 6-3 濾波前信號的頻域圖

圖 6-4 濾波后信號的時域圖

圖 6-5 濾波后信號的頻域圖

33

七、思考題

試設計一個低通濾波器,濾除300Hz的信號.其它要求同實驗

八、實驗報告

要求學生按本實驗指導書后附的實驗報告格式和要求的內容寫出實驗報告,實驗報告應包括實驗預習、實驗記錄和實驗報告等三部分內容。

九、其它說明

1. 學生實驗時,應嚴格準守實驗室規則、安全制度和學生實驗守則;

2. 認真學習實驗操作技能,嚴格按指導書和實驗指導教師的指導操作有關規儀器設備,不要做與本實驗無關的事情;

3. 做好實驗預習、實驗記錄,并按要求按時完成實驗報告。

34

實驗七:圖象的伽瑪增強

實驗學時:2 實驗類型:設計

實驗要求:選修

一、實驗目的

了解伽瑪(Gamma)矯正的原理

掌握如何從文件讀入數據到內存

掌握在CCS下圖象的 輸入和輸出

二、實驗內容

本實驗要求對一個已經準備好的圖象能夠進行伽瑪矯正,γ值為1.54,設計一個程序,用查表的方式對圖象進行矯正,比較伽瑪矯正前后的效果.

三、實驗原理、方法和手段

伽瑪矯正實質上就是矯正亮度,在灰度圖中就是灰度矯正.這個過程是簡單的,不需要實時處理.可以通過查表來進行,創建一個查找需要用的空間很少.伽瑪矯正的計量單位用γ(γ通常是大于1)表示.如果灰度Iin的值介于0和255之間,伽瑪矯正公式為: Iout=(Iin/max gray)1/ γ*max gray (7-1)

max gray=255; 此表可用MATLAB先計算好.

四、實驗組織運行要求

教師簡單講解,學生調試程序,教師全程輔導

五、實驗條件

安裝CCS和MATLAB的電腦一臺

六、實驗步驟

項目的編譯步驟如前所述,在此不多講了; 1.向工程添加以下兩個源程序 1) gamma.c 源程序如下: #include #include #define TRUE 1 35

#define FALSE 0 #define BUFSIZE 4096 /* the buffer size is 64*64=4096 */ /* Global declarations */ int in_buffer[BUFSIZE]; /* processing data buffers */ int out_buffer[BUFSIZE]; /* Functions */ static int gamma(int *input, int *output); static void dataIO(void); /* Functions */ static int gamma(int *input, int *output); static void dataIO(void); void main() { int *input = &in_buffer[0]; int *output = &out_buffer[0]; puts("the 3rd experiment started "); /* loop forever */ while(TRUE) { /* * Read input data using a probe-point connected to a host file. * Write output data to a graph connected through a probe-point. */ // read the input image data. dataIO();

puts("processing "); /* Processing Gamma Calibration*/ gamma(input, output);

// write the output image. // the output file is result.dat. dataIO(); } } /* ======== processing gamma calibration======== * * FUNCTION: apply gamma calibration to enhance the brightness of dark are in an image. * * PARAMETERS: address of input and output buffers. * * RETURN VALUE: TRUE. */ static int gamma(int *input, int *output) { int i; 36

/* the given gamma value is 0.65.*/ /* please try other gamma values. */ int LUT[256]={0, 7, 11, 14, 17, 20, 22, 25, 27, 29, 31, 33, 35, 37, 39, 40, 42, 44, 46, 47, 49, 50, 52, 53, 55, 56, 58, 59, 61, 62, 63, 65, 66, 68, 69, 70, 71, 73, 74, 75, 76, 78, 79, 80, 81, 83, 84, 85, 86, 87, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98,100,101,102, 103,104,105, 106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121, 122,123,124,125,126,127,128,129,130,131,131,132,133,134,135, 136,137,138,139,140,141,141,142,143,144,145,146,147,148,149, 149,150,151,152,153,154,155,155,156,157,158,159,160,160,161, 162,163,164,165,165,166,167,168,169,169,170,171,172,173,173, 174,175,176,177,177,178,179,180,181,181,182,183,184,185,185, 186,187,188,188,189,190,191,191,192,193,194,194,195,196,197, 197,198,199,200,200,201,202,203,203,204,205,206,206,207, 208,208,209,210,211,211,212,213,213,214,215,216,216,217,218, 218,219,220,221,221,222,223,223,224,225,225,226,227,228, 228,229,230,230,231,232,232,233,234,234,235,236,236,237, 238,238,239,240,240,241,242,242,243,244,244,245,246,246, 247,248,248,249,250,250,251,252,252,253,254,254,255}; /*replace the brightness with a calibrated value.*/ for(i=0;i

return; }

37

2) 其CMD文件如下: -m volume.map MEMORY { PAGE 0: EPROG: origin = 0x3000, len = 0x1000 VECT: origin = 0xff80, len = 0x80 PAGE 1: USERREGS: origin = 0x60, len = 0x1c BIOSREGS: origin = 0x7c, len = 0x4 IDATA: origin = 0x80, len = 0x2f80 } SECTIONS { .vectors: {} > VECT PAGE 0 .sysregs: {} > BIOSREGS PAGE 1 .trcinit: {} > EPROG PAGE 0 .gblinit: {} > EPROG PAGE 0 frt: {} > EPROG PAGE 0 .text: {} > EPROG PAGE 0 .cinit: {} > EPROG PAGE 0 .pinit: {} > EPROG PAGE 0 .sysinit: {} > EPROG PAGE 0 .bss: {} > IDATA PAGE 1 .far: {} > IDATA PAGE 1 .const: {} > IDATA PAGE 1 .switch: {} > IDATA PAGE 1 .sysmem: {} > IDATA PAGE 1 .cio: {} > IDATA PAGE 1 .MEM$obj: {} > IDATA PAGE 1 .sysheap: {} > IDATA PAGE 1 .stack: {} > IDATA PAGE 1 } 同時將ti:c5400ctgtoolslib目錄下的rts.lib文件加到工程下,給文件是C語言開發的DSP應用程序的運行支持庫. 3. 編譯,鏈接和運行程序

編譯成功后,可以通過View_Watch Windows,或者單擊工具欄上的窗口

圖標.選擇觀測 38

圖7-1,觀測到的向量 4.將要校正的圖象從文件讀入到內存:

1) 執行菜單命令File_Data_Load,將打開如圖所示的對話框,將要校正的圖象tire.dat讀入到內存.

圖7-2 讀圖第一步

點擊?打開?,將會出現如下一個對話框:

圖7-3 讀圖第二步

由前圖知道in-buffer(校正前的圖片在內存中定義的地址)為0x00A5,長度為4096即0x1000, 5. 顯示校正前和校正后的圖象

39

程序運行后執行View_Graph下的Image命令

圖7-4 讀圖設置圖

圖7-5 校正之前的圖

圖7-6 校正之后的圖

40

七、思考題

圖形增強還有什么算法?如何實現?

八、實驗報告

要求學生按本實驗指導書后附的實驗報告格式和要求的內容寫出實驗報告,實驗報告應包括實驗預習、實驗記錄和實驗報告等三部分內容。

九、其它說明

1. 學生實驗時,應嚴格準守實驗室規則、安全制度和學生實驗守則;

2. 認真學習實驗操作技能,嚴格按指導書和實驗指導教師的指導操作有關規儀器設備,不要做與本實驗無關的事情;

3. 做好實驗預習、實驗記錄,并按要求按時完成實驗報告。

41

實驗八:FIR數字濾波器

實驗學時:2 實驗類型:設計

實驗要求:選修

一、實驗目的

了解FFT的原理和算法

掌握DSP中FFT的設計和編程方法

熟悉FFT的調試方法

二、實驗內容

本實驗要求使用FFT變換求一個時域的頻域特定,并從這個頻域求出該信號的頻率值,然后使用DSP匯編語言實現對FFT的DSP的編程.

三、實驗原理、方法和手段

1、FFT基本數學理論

對于有限長的離散數字信號{x(n)},0≦n≦N-1,它的頻譜數學值{X(n)}可由離散傅氏變換(DTF)求得.DTF定義為: X(k)= k=0,1,…..N-1 (8-1) x(n)e?j(2?/N)nk?n?0n?1

令WM=e-j(2∏/N)nk 然而對于相當大的N值(比如1024)來說,直接計算它的DFT所需要的計算量很大.因此我們采用優化的FFT算法,它是一個組合以后的算法,原始的2N個點的實輸入序列組合為一個N點的復序列,然后對復序列進行N點的FFT,最后再將N點復數輸出拆分為2N點的 復數序列,這2N點的復數序列與原始的2N點實數輸入序列是一致。

FFT的基本思想是:將原來的N點序列分為較短的序列,這些序列的DFT可以簡單的組合起來得到原來的DFT。例如,若N為偶數,將原有的N點序列分為兩個(N/2)點的序列,那么計算N點的DFT將需要約(N/2)*2=N/2,是直接采用DFT運算量的一半。上述方法反復使用,在組合和拆分的操作中,FFT的算法量均減半。

2、FFT算法 1) 碼位倒置

42

2

2 FFT的碼位倒置實際上是將輸入的數據進行位倒序,以便在輸出時候得到正確的序列,以N=8 為例說明位倒序的原理。舍輸入的序列為x[n], N=8,其自然序列為:0,1,2,3,4,5,6,7。其一次按奇偶分開,得到兩組M/2點的DFT,其序號為:

0,2,4,6| 1,3,5,7,對每一組再看奇偶分開,得到: 0,4|2,6|1,5|3,7 對于這種運算,我們可以采用DSP的間接尋址的位倒序尋址來實現。 2) W因子的生成和分布規律

在FFT中,乘法主要來自旋轉因子,因為W=cos(2πr/N)-jsin(2πr/N), 所以在對W

r

r相乘時,必須產生相應的正,余弦函數。在編程序時候,正,余弦函數產生的方法一般有兩種:一種是在每一步直接產生,另一種是在程序開始前預先計算出來將W,將r=0,1,….N-1這N個獨立的值存放在數組中,等于直接建立一個表,在程序執行的過程中,可直接查表得到,提高運算速度,但要占用更多的內存。 W的一般規律為:

r

r在第m級: ,r=0,1,2,…….2 2m?1wrm

四、實驗組織運行要求

教師簡單講解,學生調試程序,教師全程輔導

五、實驗條件

安裝CCS和MATLAB的電腦一臺

六、實驗步驟

1 主函數 (文件名為*.asm) 從主函數中可以看出FFT的基本過程和步驟,以及碼位倒置,產生三角因子,碟形運算和計算功率譜密度。

.title "zxy_fft5k_program" .mmregs .global _c_int00 .include "vc54xnt.h" .include "cfft256coff.h" .include "cfft256fn.h" STACK .usect "stack",stack_size SYSTEM_STACK .set STACK+stack_size .sect "vectors" reset: BD _c_int00 STM #SYSTEM_STACK,SP .space 31*4*16 .text 43

_c_int00: NOP CALL c54x_init ; Initialize CPU and clear A and B CALL bit_rev ;Here AR7 --> fft_data , others is free

NOP

CALL fft_task

NOP

CALL power

NOP main_start:

B main_start .end 2 初始化CPU ;文件名為: vc54xnt.h stack_size .set 200h K_FFT_SIZE .set 256

.text c54x_init: ;CPU initialize ;

STM #0b,CLKMD ;TstStatu: LDM CLKMD,A ;Switch to DIV mode ;

AND #01b,A ;

BC TstStatu,ANEQ

STM #9FF7h,CLKMD ;CPU Clock Feg.:100MHz

STM #00A0h,PMST

STM #8FFFh,SWWSR ;IO wait for 7 clk

STM #8802h,BSCR ;Clockout=50MHz

LD #0h,DP ;Data Page Points at NO. 0

LD #0h,A

LD #0h,B

RET

3.cfft256coff.h 函數

cfft256coff.h 函數包括輸入的數據和FFT要用到的各種參數的定義,其中 w11112w4w8w16w111132w64w128w256分別為L =cosw12(2π/2)-jsin(2π/2)=-1-j0 =cosw14(2π/4)-jsin(2π/4)=0-j =cosw18(2π/8)-jsin(2π/8)=0.707-j0.707 =cosw116(2π/16)-jsin(2π/16)=0.9239-j0.3827 =cosw132(2π/32)-jsin(2π/32)=0.9808-j0.1951 =cosw164(2π/64)-jsin(2π/64)=0.9952-j0.0980 44

分別,

w =cos(2π/256)-jsin(2π/256)=0.9997-j0.0246 w =cos(2π/128)-jsin(2π/128)=0.9988-j0.0491 12812561 將上述系數分別乘以32768得到DSP的Q15格式的小數.

要進行FFT變換的數據是一個周期內采樣20個點的正弦信號,共采集 了256點。

4. cfft256fn.h函數

此頭文件里包含位碼倒置,計算功率譜密度、FFT碟形運算三個子程序。

以上2個程序太長,因此在這里不顯示,大家可以在課程論壇里下載這兩個程序。 5. Cmd 文件

/* Filename:cfft256.cmd*/ -m cfft256.map MEMORY { PAGE 0: PM0: o=0x80 , l=0x80 PM1: o=0x100 , l=0x1000 PAGE 1: DM0: o=0x2000 , l=0x2000 } SECTIONS { vectors: PAGE 0 load=PM0 .text: PAGE 0 load=PM1 .data: PAGE 1 load=DM0

45

圖8-1 觀察圖形設置對話框 .bss : PAGE 1 load=DM0 .bss : PAGE 1 load=DM0 stack: PAGE 1 load=DM0 } 6.觀察程序運行結果

觀察輸入數據的波形和頻譜

觀察圖形首先對對話框做如圖8-1所示的設置。

圖8-2 輸入信號的波形和頻譜圖 2 察看位碼倒置后的圖形:

點擊View-Disassembly,在Disassembly窗口點右鍵,選擇start_address,輸入bit_rev_end,在它的下一條語句設置斷點然后執行Debug_restart.然后觀察位碼倒置后的波形。如圖8-3所示

3 觀察進行FFT變換后的波形如圖8-4所示

如果將上圖的Dsplay Type欄中該為FFT Magnitude,就等于作了依次FFT反變換,得到如圖所示的結果. 如圖8-5所示

46

圖8-3 位倒碼以后的波形圖

圖8-4 FFT以后的波形圖

47

圖8-5 FFT變換后的頻譜圖

七、思考題

探測點有何作用?如何設置探測點?

八、實驗報告

要求學生按本實驗指導書后附的實驗報告格式和要求的內容寫出實驗報告,實驗報告應包括實驗預習、實驗記錄和實驗報告等三部分內容。

九、其它說明

1. 學生實驗時,應嚴格準守實驗室規則、安全制度和學生實驗守則;

2. 認真學習實驗操作技能,嚴格按指導書和實驗指導教師的指導操作有關規儀器設備,不要做與本實驗無關的事情;

3. 做好實驗預習、實驗記錄,并按要求按時完成實驗報告。

48

實驗九:控制XF引腳周期性變化

實驗學時:2 實驗類型:設計

實驗要求:選修

一、實驗目的

學習定時器的初始化步驟

掌握定時中斷原理和中斷調用的流程

掌握中斷向量表的設置

二、實驗內容

本實驗要求利用中斷系統和定時期設計一個周期為2ms的方波,并通過CCS圖像觀測器觀測出來。

三、實驗原理、方法和手段

中斷是由外部設備向CPU傳送數據,或者由外部設備向CPU提出數據產生的。具體是指當某個事件發生時,暫停當前的操作,轉向中斷服務程序,執行完后再返回繼續原來的操作。這使得DSP能夠處理多個任務。CPU執行中斷服務程序(ISR)步驟如下: 1 保護現場,將PC值壓入棧頂;

2 載入中斷矢量表,將中斷矢量表地址送入PC; 3執行中斷矢量表,程序將進入ISR入口; 4 執行ISR,直至遇到返回指令; 5 回復現場,將棧頂值返回PC; 6 繼續主程序。

定時器初始化初始化步驟: 1 關閉定時期,TCR中的TSS=1。 2 加載PRD。

3 啟動定時器,初始化TDDR,TSS=0,TBB=1。 4 打開可屏蔽中斷.

四、實驗組織運行要求

教師簡單講解,學生調試程序,教師全程輔導

五、實驗條件

49

本文來自 99學術網(www.gaojutz.com),轉載請保留網址和出處

上一篇:觀后感范文800字高中下一篇:感恩母親的作文600字

91尤物免费视频-97这里有精品视频-99久久婷婷国产综合亚洲-国产91精品老熟女泄火