DSP第二次實驗報告

2021-03-04 05:09:37 字數 3275 閱讀 2178

dsp技術與應用實驗

報實驗四、正弦訊號發生器

一、 實驗目的

1. 掌握利用dsp產生正弦訊號的原理

2. 熟悉子程式呼叫的程式結構以及堆疊的使用

3. 掌握ccs的圖形輸出操作

二、 實驗裝置

1. 整合開發環境code ***poser studio(簡稱ccs)

2. 實驗**sin.s54、和lab.gel

三、實驗內容

1. 閱讀理解多項式逼近正弦的文件

2. 閱讀和理解sin.s54

3. 除錯正弦波發生器

4. 加入斷點,並選取圖形觀測,利用動畫及時更新

5. 試利用迭代的方法來實現正弦訊號發生器

四、實驗結果和提示

1. ,為第一象限內的弧度值。因為,所以只需將第二,三,四象限內的弧度值轉換到第一象限即可計算出相應的正弦函式值。

由於有限精度,規定弧度值從,其中=0x7fff,/2=0x4000,=0x8000。利用級數展開產生正弦波,必須在呼叫計算子程式之前備份好累加器a中的當前弧度值,以便計算結束後實現增量。正弦波的頻率可以通過增幅的大小來進行控制,如果假定程式迴圈一次為乙個時間單位,則正弦波的週期為65536/步長,頻率為週期倒數。

自動增長時要注意當超過後必須調整到的範圍內才能呼叫計算子程式,即若。

2. 需要使用臨時資料時,必須用frame語句留出所需空間,使用結束後要將堆疊指標還原以防堆疊記憶體洩漏。要注意的是frame的下一條指令不能使用直接定址。

3. 注意事項:利用累加器寫乘法暫存器t(stlm)之後的下一條指令不能使用t;條件轉移指令xc在指令訪問階段判斷條件,該條件必須在先於xc指令的2個指令之前產生;條件轉移指令bc是在指令執行階段判斷條件,不存在這方面的問題。

具體細節請參見《數字訊號處理系統的應用和設計》3.6節和4.5節。

4. 圖形觀測時選擇選單view->graph->time/frequency,然後設定如下圖:

確定並設定好斷點後(斷點位置要設定對,幾個地方都可以,可多嘗試幾次)使用debug->animate就可以觀察到動畫輸出的結果如圖:

頻率變化

幅值變化

初相位變化

從圖中可以觀察到正弦波的週期。改變的增量步長觀察不同頻率的正弦波輸出有何不同。start address中分別用sin_out、ar6、0x2000等測試,觀察正弦波的不同,記錄圖形資料並比較,同時比較兩種執行方式在斷點形式下的區別。

5. 得到正弦訊號迭代公式:,因為為常數,所以為常數,則利用此公式迭代計算每次只需一次乘法和一次加法。

6. 嘗試不用斷點,而用探針probe point的方式顯示並觀察圖形。同樣需要比較兩種執行方式在探針形式下有無區別。

7. 在斷點及動畫執行方式實現正弦波顯示的情況下,查詢到儲存器中對應儲存正弦波資料實時更新的資料單元。

五、實驗心得

通過這次實驗,我理解多項式逼近正弦的方法和sin.s54;除錯正弦波發生器;加入斷點,不斷嘗試用不同的斷點,比如b,和frame的不同,並選取圖形觀測,利用動畫及時更新;是為了掌握利用dsp產生正弦訊號的原理;熟悉子程式呼叫的程式結構以及堆疊的使用;掌握ccs的圖形輸出操作。這次實驗我學到了很多,實踐與理論的一次經典結合。

在本次試驗中學會了設定斷點以及怎樣連線探針,通過兩次試驗覺得自己的動手能力有所提高。

一、實驗目的

1. 學習使用實時執行庫;

2. 熟悉用c和彙編混合程式設計的方法;

3. 掌握混合程式設計的除錯方法。

二、實驗環境

1. 整合開發環境code ***poser studio 2.0(簡稱ccs)

2. 實驗程式mix.c,mix.

h(由程式自動載入,可不加,後同),有c的混合程式設計需要有庫檔案),c5402.gel(要有,有c的混合程式設計要用gel初始設定。選晶元時設定已自帶,可不新增;如無則加)

三、實驗步驟

1. 改設定:build option子選單linker中basic項autoinit model 改為load-time initialization或run-time initialization(不同的設定,sp初始值將不同。

no initialization也可以,但效果不如前兩個好)。

2. 為使效果更明顯,遮蔽前兩條printf( )語句(可與第三條對比,編譯後將出現警告,可忽略),編譯專案檔案得到.out程式。

另外裝載程式前,在edit->memory->fill中,對data memory從0x0000到0xffff用全0x1111或0x2222等填充(注意:填充後必須對gel檔案重新load一次)。然後裝載程式,了解在混合程式設計環境下變數、函式的定義方法以及專案檔案的編譯方法。

3. 開啟view memory,用sp值(debug_>go main後的值)作為開始察看位址,從主程式main開始用single step方式除錯程式,觀察程式的執行過程。尤其是在c程式中呼叫彙編子函式以及返回的過程,注意當前sp和pc的變化。

4. 看懂**,比較結果,並畫出程式流程圖;

[c程式**]

#include

#include "mix.h"

int mix_func_c(int *wl, int *wr, int val) // c函式

return val_min; //最小值作為程式的返回值

}void main()

min_a** = mix_func(wl, wr, val); // 彙編最小值

printf("val = %d\n", min_a**); //輸出

min_c = mix_func_c(wl, wr, val); // c 最小值

printf("val = %d\n", min_c); //輸出

return;

}[匯程式設計序**]

.mmregs

;int mix_func(int *wl, int *wr, int val)

;;; return val_min;

;} ld *sp(arg_val), a

mvmm sp, ar2ar2=tmp

stm #8-1, brc

rptb ***pare_loop-1

ld *ar2+, b

min a

***pare_loop:

;比較???

frame #off_p

popm st1

ret四、程式流程圖:

四、實驗結果分析

1. 實時執行庫

實時執行庫提供了標準c中的大部分函式,幫助建立c語言的環境,同時也提供一些基本的除錯手段,如printf( )等。

DSP第二次上機實驗報告

一 實驗目的 1 加深對快速傅利葉變換的理解。2 掌握fft 演算法及其程式的編寫。3 掌握演算法效能評測的方法。二 實驗原理 略三 實驗內容 1 編制自己的fft 演算法。演算法參見附件的.m檔案 2 選取實驗1 中的典型訊號序列驗證演算法的有效性 三角波序列 將8點三角波序列使用自己的fft演算...

數學建模第二次實驗報告

第二次作業 要求 第二次作業主要是考察學生對matlab基礎知識掌握情況,尤其是迴圈語句,每名同學都有八個小題,根據具體情況給出分值。1 用起泡法對10個數由小到大排序,即將相鄰兩個數比較,將小的調到前頭。2 有乙個4 5矩陣,程式設計求出其最大值及其所處位置。3 程式設計求。4 一球從100公尺高...

Linux網路程式設計第二次實驗報告

姓名 學號 2012211 班級 2012211 作業截圖如下 客戶端程式截圖 服務端程式如下 客戶端執行結果如下 服務端執行結果如下 程式執行結束後,開啟txt文件結果正確,如下 第一次開啟 第二次開啟 過程中遇到的問題 1.問題 命令的識別不知道應該怎麼樣便捷且成功的識別 辦法 通過和同學交流,...