第一篇:dsp 期末作業
Yibin University
DSP期末學科設計報告
題 目 第五章5-
18、5-19 院 別 物理與電子工程學院 專 業 電子信息科學與技術
學生姓名 梁 杰 學 號 110303038 班級 11 級 3 班
年1月日
2014 6
一、實驗目的
1、了解巴特沃斯方法
2、掌握脈沖響應不變法設計數字低通濾波器
3、熟悉各種濾波器特點
二、實驗原理
1、脈沖不變法原理
脈沖響應不變法是實現模擬濾波器數字化的一種直觀而常用的方法。它特別適合于對濾波器的時域特性有一定要求的場合。
脈沖響應不變法的核心原理是通過對連續函數ha(t)等間隔采樣得到離散序列ha(nT)。令h(n)= ha(nT),T為采樣間隔。它是一種時域上的轉換方法。一個模擬濾波器的傳遞函數可以用有理分式表達式表示為:
M01MNaN01a?as?...?as H(s)???...?bbsbs通過反拉普拉斯變換我們就可以得到它的沖激相應:
h(t)?L[Ha?1a(s)]
脈沖響應不變法就是要保證脈沖響應不變,即:
h(n)?ha(nT)
對上式的沖激相應序列h(n)作Z變換,就可以得到數字濾波器的傳遞函數:
H(z)?ZT[ha(nT)]
一般來說,H(s)的分母多項式階次總是大于分子多項式的階次。假定H(s)aa的沒有多重極點,則式就可分解為:
Ha(s)??i?1NA
s?sii式中si,Ai均為復數,si是H(s)的極點。其拉氏變換為
aha(t)??Aiei?1Nsi.Tnu(n)
一般來說,Ha(s)的分母多項式階次總是大于分子多項式的階次。數字濾波器的傳遞函數H(z)經過合并簡化,成為一般形式的有理分式傳遞函數
c0?c1z?1?...?cLz?L H(z)?
d0?d1z?1?...?dNz?N
在討論采樣序列z變換與模擬信號拉氏變換之間關系的有關章節中,我們已經知道
1H(z)|z?esT?TK????H??a(s?j2?K)T按照z=eST的關系,每一個s平面上寬度為2?/T的水平條帶將重迭映射到z平面上。因此脈沖響應不變法將s平面映射到z平面,不是一個簡單的一一對應的關系。對于高采樣頻率(T小)的情況,數字濾波器在頻域可能有極高的增益。為此我們采用
H(z)??TAi
SIT?11?ezi?1NIN
h(n)?Tha(nT)??TAieSTnu(n)
i?1在脈沖響應不變法設計中,模擬頻率與數字頻率之間的轉換關系是線性的(???*T)。同時,它可以保持脈沖響應不變,h(t)=ha(nT)。因此,這一方法往往用于低通時域數字濾波器設計及相應的模擬系統數字仿真設計。
2、雙線性變換法設計數字濾波器原理
將S平面j?軸壓縮變換到s1平面j?軸上的-?/T到?/T一段,可以采用以下變換關系:
??T? ??tan?1?
?2??1???T,??0變換到?1?0,可將上式寫成 這樣????變換到
j??eej?1T2?1T2?e?e?j?1T2?1T2j?j
令j??s,j?1?s1,解析延拓到整個s平面和s1平面,可得
s?ees1T2s1T2?e?e?s1T2s1T2?
再將s1平面通過以下變換關系映射到z平面,即
z?es1T
從而得到s平面和z平面的單值映射關系為
1?z?1s? 1?z?1z?1?s 1?s 一般來說,為了使模擬濾波器的某一頻率與數字濾波器的任一頻率有對應關系,可引入待定常數c,??T???ctan?1?
?2?1?e?s1Ts?c ?s1T1?es1Tz?e將代入到上式,可得
1?z?1s?c
1?z?1z?c?s c?s在MATLAB中,雙線性Z變換可以通過bilinear函數實現,其調用格式為:
[Bz,Az]=bilinear(B,A,Fs); 其中B,A為模擬濾波器傳遞函數G(s)的分子分母多項式的系數向量,而Bz,Az為數字濾波器的傳遞函數H(z)的分子分母多項式的系數向量。
三、實驗內容 1、5-18題用脈沖響應不變法設計一個三階巴特沃思數字低通濾波器,截止頻率fc=1kHz,設采樣頻率fs=6.28kHz。
根據解題思路,編寫源程序如下:
%截止頻率wc=1Kz,采樣頻率fs=6.283 KHz fs=6.283*1000;wc=2*pi*1000;[B,A]=butter(3,wc,'s');
[num,den]=impinvar(B,A,fs);
[db,mag,pha,grd,w]=freqz_m(num,den);f=0.5*fs*w/pi;
plot(f,db,'-');grid;
xlabel('以HZ為單位的頻率');ylabel('對數幅度/db');title('巴特沃斯低通濾波器');
圖
一、實驗1仿真結果圖 2、5-20題用雙曲線變換法設計一個滿足下面指標的數字帶阻巴特沃思濾波器;通帶上下邊帶各為0-95Hz和105-500Hz,通帶波動3dB,阻帶為99-101Hz,阻帶衰減13dB,取樣頻率為1kHz。
根據題意及解題思路,程序設計如下:
Rp=3;Rs=13;T=0.001;fp1=95;fp2=105;fs1=99;fs2=101;
wp1=2*pi*fp1*T;wp2=2*pi*fp2*T;ws1=2*pi*fs1*T;ws2=2*pi*fs2*T;wp3=(2/T)*tan(wp1/2);wp4=(2/T)*tan(wp2/2);ws3=(2/T)*tan(ws1/2);ws4=(2/T)*tan(ws2/2);wp=[wp3,wp4];ws=[ws3,ws4];
[n,wn]=buttord(wp,ws,Rp,Rs,'s');
[z,p,k]=buttap(n);[b,a]=zp2tf(z,p,k);w0=sqrt(wp3*wp4);Bw=wp4-wp3;[b1,a1]=lp2bs(b,a,w0,Bw);[bz,az]=bilinear(b1,a1,1/T);
subplot(2,1,1);plot(w/pi/T/2,db);grid
xlabel('以HZ為單位的頻率');ylabel('對數幅度/db');title('帶阻巴特沃斯濾波器');
subplot(2,1,2);plot(w/pi,db);grid
xlabel('以PI為單位的頻率');ylabel('對數幅度/db');title('帶阻巴特沃斯濾波器');
圖
二、實驗2仿真結果圖
四、思考與總結
1、在設計過程中我思考了兩種方案
①從歸一化模擬低通原型出發,先在模擬域內經頻率變換成為所需類型的模擬濾 波器;然后進行雙線性變換,由S域變換到Z域,而得到所需類型的數字濾波器。
②先進行雙線性變換,將模擬低通原型濾波器變換成數字低通濾波器;然后在Z域內經數字頻率變換為所需類型的數字濾波器。
以上兩種方案都可以,我最后選擇了第一種方案進行設計,即先在模擬域內經頻率變換成為所需類型的模擬濾波器;然后進行雙線性變換,由S域變換到Z域,而得到所需類型的數字濾波器。因為高通,帶通濾波器的設計方法是先將要設計的濾波器的技術特性指標通過頻率轉換成模擬低通濾波器的技術指標,再根據這些性能指標設計出低通濾波器的傳遞函數,為了設計程序的簡潔,故選擇了方案一。
2、仿真過程遇到的問題
①帶通濾波器的仿真結果雖然符合其帶通特性,但要求得到的性能指標存在較大誤差,由于時間緊迫,將在課后進一步尋找原因及解決方案。
②一個線性是不變系統的典型表達式有狀態空間型、傳遞函數型、零極增益型、極點留數型共四種,在開始的設計過程中我發現在把零極點增益型向傳遞函數型的轉換過程中多用了一步,即先把零極點增益型轉換為狀態空間型,進行相應的頻率變換和雙線性變換后,再由狀態空間型轉換為傳遞函數型,進而繪制出其頻率響應圖,但是經仿真分析后發現,性能并不理想,所以并沒有采用。
③實驗開始仿真沒有對響應的函數進行定義,在網上查找響應的定義函數,最后找到響應的函數定義。定義程序如下: %freqz的修正函數 產生以絕對值的幅度響應以及相對dB標尺的幅度響應,相位響應和群時延響應 %------------
% db = relative magnitude in dB computed over 0 to pi radians % mag = absolute magnitude computed over 0 to pi radians % pha = phase response in radians over 0 to pi radians % grd = group delay over 0 to pi radians % w = 501 frequency samples between 0 to pi radians % b = numerator polynomial of H(z)(for FIR : b=h)
% a = denominator polynomial of H(z)(for FIR :a=[1])%
[Hh,w] =freqz(b,a,1000,'whole');
Hh =(Hh(1:1:500))';w =(w(1:1:500))';mag =abs(Hh);
db =20*log10((mag+eps)/max(mag));pha =angle(Hh);
grd =grpdelay(b,a,w);
五、心得體會
本次其實就是對本期的一個綜合考察,在平時的學習中我學習了關于本次課程設計的一些內容,對于MATLAB軟件在數字濾波器的設計中的一些函數也有初步的了解,通過這一周多的時間更是讓自己在這個方面的學習更上了一層樓,使自己在這方面的學習深度有所提高。
本次用雙線性變換法和脈沖響應不變法對巴特沃斯低通、帶阻濾波器的設計,要求我能夠用所學理論知識對巴特沃斯低通通濾波器進行設計,并能夠對設計的濾波器的頻率特性進行分析。在設計過程中,首先,我通過查找資料等途徑,對關于所要設計的題目進行更加全面深入的學習,認真分析其中的原理,弄明白設計的思路;其次,根據自己選擇的性能指標要求,結合自己通過學習掌握的知識和資料進行程序設計,根據自己提出的方案利用軟件實現;最后,運行程序,分析所得結果是否符合自己的設計要求,對結果進行分析,實現由理論到實踐,再由實踐結果驗證理論的過程。
總的來說,這次課程設計讓我對MATLAB有了更深刻的了解,對數字濾波器的設計流程有了大致的了解,掌握了一些設計濾波器的基本方法,提高了理論用于實踐的能力,掌握了更多專業相關的使用知識與技能。同時,也暴露了我很多的不足,在以后的學習中,將進一步發揚優點,克服缺點。
最后祝老師寒假愉快!
第二篇:dsp作業
.c圖
實驗二
#define UINT unsigned int UINT i,*p,*n;void main(void){
p=(UINT *)0x0300;
for(i=0;i<20;i++)
{
if(*p==0x8888)
n=p;
p++;
} }.cmd圖
MEMORY {
PAGE 0: PROG:
origin = 1a00h, length = 2580h
vectors: origin = 3f80h, length = 80h
PAGE 1: DATA:
origin = 0200h, length = 1800h }
SECTIONS {
.text
> PROG PAGE 0
.cinit > PROG PAGE 0
//.switch > PROG PAGE 0
vect
> vectors PAGE 0
.data
> DATA PAGE 1
.bss
> DATA PAGE 1
.const > DATA PAGE 1
.sysmem > DATA PAGE 1
.stack > DATA PAGE 1 } xf高低電平等時間循環變化截圖如下所示:
找出由地址0x0300~0x0320中存儲數據為0x8888的地址截圖如下所示:
心得體會:
經過這次實驗,理解了對地址0x0300~0x0320中存儲數據為0x8888的尋找和設置。
第三篇:DSP大作業
無限沖激響應濾波器(IIR)算法
姓名:張曉 指導老師:陳恩慶 專業名稱:通信 學號:20102460434
2014年3月18日
無限沖激響應濾波器(IIR)算法
摘要:21世紀是數字化的時代,隨著信息處理技術的飛速發展,數字信號處理技術逐漸發展成為一門主流技術。相對于模擬濾波器,數字濾波器沒有漂移,能夠處理低頻信號,頻率特性可做成非常接近于理想的特性,且精度可以達到很高,容易集成等。這些優勢決定數字濾波器的應用越來越廣泛。數字濾波器是數字信號處理中最重要的組成部分之一,被廣泛應用于語音圖像處理、數字通信、譜分析、模式識別、自動控制等領域。本課題通過軟件設計IIR數字濾波器,并對所設計的濾波器進行仿真:應用DSP集成開發環境—CCS調試程序,用TMS320F2812實現IIR數字濾波。具體工作包括:對IIR數字濾波器的基本理論進行分析和探討。應用DSP集成開發環境調試程序,用TMS320F2812來實現IIR數字濾波。通過硬件液晶顯示模塊驗證試驗結果,并對相關問題進行分析。
關鍵詞:數字濾波器;DSP;TMS320F2812;無限沖激響應濾波器(IIR)。
引言
隨著數字化飛速發展,數字信號處理技術受到了人們的廣泛關注,其理論及算法隨著計算機技術和微電子技術的發展得到飛速發展,被廣泛應用于語音圖像處理、數字通信、譜分析、模式識別、自動控制等領域。數字信號處理由于運算速度快,具有可編程的特性和接口靈活的特點,使得它在許多電子產品的研制、開發和應用中,發揮著重要的作用。采用DSP芯片來實現數字信號處理系統是當前發展的趨勢。
在數字信號處理中,數字濾波占有極其重要的地位。數字濾波是語音和圖像處理、模式識別、譜分析等應用中的一個基本處理算法。在許多信號處理應用中用數字濾波器替代模擬濾波器具有許多優勢。數字濾波器容易實現不同幅度和相位頻率特性指標。用DSP芯片實現數字濾波除具有穩定性好、精度高、不受環境影響外,還具有靈活性好的特點。用可編程DSP芯片實現數字濾波可通過修改濾波器的參數十分方便的改變濾波器的特性。
原理:
1. 無限沖激響應數字濾波器的基礎理論。
利用模擬濾波器成熟的理論及其設計方法來設計IIR數字低通濾波器是常用的方法。設計過程是:按照數字濾波器技術指標要求一個過渡模擬低通濾波器Ha(s),再按照一定的轉換關系將Ha(s)轉換成數字低通濾波器函數H(z)。由此可見,設計的關鍵問題就是要找到這種關系,將s平面的Ha(s)轉換成z平面上的H(z)。
將系統函數Ha(s)從s平面轉換到z平面的方法有多種,但工程上常用的是脈沖響應不變法和雙線性變換法。在課題中我們采用雙線性變換法設計IIR數字低通濾波器。
通過采用非線性頻率壓縮的方法,將整個模擬頻率軸壓縮到??/T之間,再用 Z=esT轉換到z平面上。設Ha(s),s=j?,經過非線性頻率壓縮后用Ha(s1),S1=j?1表示,這里用正切變換實現頻率壓縮: ??21tan(?1T)T2由上式得到: ?/T之間的轉換。實現了s平面上整個虛軸完全壓縮到S1平面上虛軸的?21?e?j?T1 j?= T1?e?j?T1代人s=j?,S1=j?1,得到:
21?e?s1T S?T1?e?s1T再通過z=e1從S1平面轉換到Z平面得到 sT21?z?1 S?T1?z?12?sT z?2?sT上面兩式即稱為雙線性變換。
2.模擬濾波器原理(巴特沃斯濾波器、切比雪夫濾波器、橢圓濾波器、貝塞爾濾波器)。3.數字濾波器系數的確定方法。4.根據要求設計低通 IIR 濾波器
要求:低通巴特沃斯濾波器在其通帶邊緣 1kHz 處的增益為-3dB,12kHz 處的阻帶衰減 為 30dB,采樣頻率 25kHz。設計:
(1)確定數字低通濾波器的技術指標:
通帶邊緣頻率 fp1Hz、待求阻帶邊緣頻率 fs1Hz 和待求阻帶衰減-20log?sdB。模擬邊緣頻率為:fp1=1000Hz,fs1=12000Hz 阻帶邊緣衰減為:-20log?s=30dB
(2)將數字低通濾波器的技術指標轉換成響應的模擬低通濾波器的技術指標。
用?=2πf/fs 把由 Hz 表示的待求邊緣頻率轉換成弧度表示的數字頻率,得到?p1 和
? s1。
?p1=2πfp1/fs=2π1000/25000=0.08π弧度?s1=2πfs1/fs=2π12000/25000=0.96π弧度-計算預扭曲模擬頻率以避免雙線性變換帶來的失真。由 w=2fs tan(Ω/2)求得 wp1 和 ws1,單位為弧度/秒。
wp1=2fs tan(?p1/2)=6316.5 弧度/秒 ws1=2fs tan(?s1/2)=794727.2 弧度/秒
-由已給定的阻帶衰減-20log?s確定阻帶邊緣增益?s。
因為-20log?s=30,所以log?s=-30/20,?s=0.03162 計算所需濾波器的階數:
1?1)?s(0.03162)2n≥==0.714 ?s1794727.22log()2log()?p16316.5log(?1)1log(因此,一階巴特沃斯濾波器的傳輸函數為:
H(s)=wp1/(s+wp1)=6316.5/(s+6316.5)由雙線性變換定義s=2fs(z-1)/(z+1)得到數字濾波器的傳輸函數為:
6316.50.1122(1?z?1)H(z)= ??1z?11?0.7757z50000?6316.5z?1因此差分方程為:y[n]=0.7757y[n-1]+0.1122x[n]+0.1122x[n-1] 硬件框圖:
一個DSP系統可分為最小系統設計和外圍接口設計,DSP在必要的工作環境下才能正常工作。DSP最小系統包括復位、時鐘和電源電路。
液晶顯示模塊PcTMS320F2812信號源發生模塊時鐘電路電源電路復位電路 軟件流程圖:
調試過程與步驟:
一、軟件實現
1、實驗準備
—設置軟件仿真模式 —啟動CCS
2、打開工程、瀏覽程序。
3、編譯并下載程序
4、打開窗口:*選擇菜單View—>Graph->Time/Frequency…,進行如下設置
出現窗口如下:
選擇菜單View->Graph->Time/Frequency…,進行如下設置:
出現窗口:
5、清除顯示:在以上打開的窗口中單擊鼠標右鍵,選擇彈出菜單中“Clear Display”功能。
6、設置斷點:在程序iir.c中有注釋“/*請在此句上設置軟件斷點*/”的語句上設置軟件斷點
7、運行并觀察結果
(1)選擇“Debug”菜單中的“RUN”項,或按F5鍵運行程序。
(2)觀察“IIR”窗口中時域圖形:觀察濾波效果。實驗結果:
本次調試過程中出現了不少問題,但在輔導老師的指導下順利完成IIR數字濾波實驗。軟件調試結果如下圖示:
輸入波形為一個低頻率的正弦波與一個高頻率的余弦波疊加而成。如圖:
通過觀察頻域和時域圖,得知:輸入波形中的低頻波形通過了濾波器,而高頻部分則被衰減。附IIR算法相對應的匯編程序: ……………………………….IIR: ADDB
SP,#4 MOVB
AH,#0 MOVB
AL,#0 MOVL
*-SP[4],ACC MOVW
DP,#0xFE00 MOV
@0,#0 MOV
AL,@0 CMPB
AL,#2 SB
L7,GEQ L6: SETC
SXM MOVL
XAR4,#0x3F8016 MOV
ACC,@0 << 1 ADDL
@XAR4,ACC MOVL
ACC,*+XAR4[0] MOVL
*-SP[2],ACC MOVL
XAR4,#0x3F8012 MOV
ACC,@0 << 1 ADDL
@XAR4,ACC MOVL
ACC,*+XAR4[0] LCR
FS$$MPY MOVL
*-SP[2],ACC MOVL
ACC,*-SP[4] LCR
FS$$ADD MOVL
*-SP[4],ACC SETC
SXM MOVW
DP,#0xFE00 MOV
ACC,@0 << 1 MOVL
XAR4,#0x3F801E ADDL
@XAR4,ACC MOVL
ACC,*+XAR4[0] MOVL
XAR4,#0x3F801A MOVL
*-SP[2],ACC MOV
ACC,@0 << 1 ADDL
@XAR4,ACC MOVL
ACC,*+XAR4[0] LCR
FS$$MPY MOVL
*-SP[2],ACC MOVL
ACC,*-SP[4] LCR
FS$$ADD MOVL
*-SP[4],ACC MOVW
DP,#0xFE00 INC
@0 MOV
AL,@0 CMPB
AL,#2 SB
L6,LT L7: MOVL
ACC,*-SP[4] SUBB
SP,#4 LRETR
………………………………..二、IIR算法硬件實現
1、實驗準備
(1)連接實驗設備
(2)準備信號源進行AD輸入
①用信號線連接實驗箱左側信號源的波形輸出A端口和“A/D輸入”模塊的“ADCINO”插座注意插頭要插牢、到底。這樣,信號源波形輸出A的輸出波形即可送到ICETEK—F2812A板的AD輸入通道0。
②用同樣方法連接實驗箱左側信號源的輸出B端口和“A/D輸入”的“ADCIN1”相連。③設置波形輸出A:
—向內側按波形頻率選擇按鈕,直到標有正弦波的指示燈亮。
—上下調節波形頻率選擇按鈕,直到標有100—1KHZ的指示燈亮。
—調節幅值調整旋鈕,將波形輸出A的幅值調到適當位置。④設置波形輸出B:
—向內側按波形頻率選擇按鈕,直到標有正弦波的指示燈亮。
—上下調節波形頻率選擇按鈕,直到標有1K-10KHZ的指示燈亮。
—調節幅值調整旋鈕,將波形輸出A的幅值調到適當位置。
注意:由于模數輸入信號未經任何轉換就進入 DSP,所以必須保證輸入的模擬信號的幅度在 0-3V 之間。必須用示波器檢測信號范圍,保證最小值 0V 最大值 3 V,否則容易損壞DSP 芯片的模數采集模塊。
2、設置 Code Composer Studio 2.21 在硬件仿真(Emulator)方式下運行請參看本書第三部分、第一章、四、2。
3、啟動 Code Composer Studio 2.21 選擇菜單 Debug->Reset CPU。
4、打開工程文件
5、編譯、下載程序,選擇菜單 Debug->Go Main,使程序運行到 main 函數入口位置。
6、觀察窗口
-打開源程序 IIR.c,查看源代碼。
7、運行程序觀察結果
按 CTR 控制板的 K6 鍵,實現濾波顯示,K7 鍵實現混頻顯示,按 K8 實現鍵 A、B 兩信 號源分屏顯示。
8、觀察動態效果,調節信號源輸出,觀察濾波器輸出 改變信號源輸入的波形、頻率參數,觀察動態效果。
9、退出 CCS。
硬件調試結果若下圖(手機拍照):
按K6鍵:
按K7鍵:
按K8鍵:
結果分析:
通過無限沖激響應濾波器(IIR)算法的硬件實現與軟件實現IIR算法相對比,所設計的IIR濾波器收到較好的效果,完成了設計要求。
心得體會:
在指導老師認真負責的態度下,我順利而又成功地完成了關于DSP芯片TMS320F2812的八個實驗,并從中獲益匪淺。記得在學期的開始王忠勇老師就給我們指出DSPs芯片及DSP系統與信息類專業的一些課程有許多聯系,同時又有許多特點。剛開始學習時,我并沒有完全理解這些話的意義。但隨著課程學習逐漸接近尾聲,與此同時開始的實踐實驗,自己從中取得了一些成績,理論水平得到了一定程度的提高,同時也暴露出一些問題。
正是因為DSP設計多門課程的相關知識,這就需要我們在課程的學習過程中,需要經常回顧一些基礎理論知識,經過認真思考與分析,達到解決問題的目的。在這個過程中,不僅復習了以前的一些知識,并通過理論聯系實際,對相關知識點有了更深層次的認識。從課前復習相關實驗內容、原理到課題論文的完成,此過程我受益匪淺。在這個過程中,我復習了數字濾波器的原理和設計方法,對DSP編程有了更深的認識和掌握了一定的編程能力。此外,在畫原理圖時,學習了MathType和Microsoft Office Visio 2007等軟件的操作方法。通過本課題的設計,我在多方面得到了鍛煉。
另外,在實驗過程中,團隊協作的精神得以充分的體現。當遇到困難的時候,同學與同學之間,同學與指導老師之間有了很好的交流和溝通,這也是實驗能夠認真完成的一重要因素。
此外,要感謝指導老師們,這些實驗是在他們認真負責的態度下完成的。他們在我們實驗過程中給我們在軟件操作和相關理論、算法上給了我們耐心的指導。正是在這種環境下,才能使我們在這個過程收獲最大化。從他們身上我懂得了做事嚴謹認真、勤于動腦,勤于實踐的工作態度,這使我在今后的生活中所要努力的方向。
參考文獻
【1】 高西全 丁玉美編著。數字信號處理。西安電子科技大學出版社(第三版)。【2】 王忠勇 陳恩慶編著。DSP原理與應用技術。電子工業出版社,2009.10
第四篇:西工大DSP大作業
實驗1 基于CCS的簡單的定點DSP程序
一、實驗要求
1、自行安裝CCS3.3版本,配置和運行CCS
2、熟悉CCS開發環境,訪問讀寫DSP的寄存器AC0-AC3,ARO-AR7, PC, T0-T3
3、結合C5510的存儲器空間分配,訪問DSP的內部RAM
4、編寫一個最簡單的定點DSP程序,計算下面式子 y=0.1*1.2+35*20+15*1.6
5、采用定點DSP進行計算,確定每個操作數的定點表示方法, 最后結果的定點表示方法,并驗證結果
6、對編寫的程序進行編譯、鏈接、運行、斷點執行、單步抽 并給出map映射文件
二、實驗原理
DSP芯片的定點運算---Q格式(轉)2008-09-03 15:47 DSP芯片的定點運算
1.數據的溢出:
1>溢出分類:
上溢(overflow): 下溢(underflow)
2>溢出的結果:
Max Min
Min Max unsigned char 0 255 signed char-128 127 unsigned int 0 65535 signed int-32768 32767
上溢在圓圈上按數據逆時針移動;下溢在圓圈上順時鐘移動。
例:signed int :32767+1=-32768;-32768-1=32767
unsigned char:255+1=0;
0-1=255
3>為了避免溢出的發生,一般在DSP中可以設置溢出保護功能。當發生溢出時,自動將結果設置為最大值或最小值。
2.定點處理器對浮點數的處理:
1>定義變量為浮點型(float,double),用C語言抹平定點處理器和浮點處理器 的區2>放大若干倍表示小數。比如要表示精度為0.01的變量,放大100倍去運算,運算3>定標法:Q格式:通過假定小數點位于哪一位的右側,從而確定小數的精度。
Q0:小數點在第0位的后面,即我們一般采用的方法 Q15 小數點在第15位的后面,0~14位都是小數位。轉化公式:Q=(int)(F×pow(2,q))
F=(float)(Q×pow(2,-q))
3. Q格式的運算
1>定點加減法:須轉換成相同的Q格式才能加減
2>定點乘法:不同Q格式的數據相乘,相當于Q值相加
3>定點除法:不同Q格式的數據相除,相當于Q值相減
4>定點左移:左移相當于Q值增加
5> 定點右移:右移相當于Q減少
4.Q格式的應用格式
實際應用中,浮點運算大都時候都是既有整數部分,也有小數部分的。所以要選擇一個適當的定標格式才能更好的處理運算。一般用如下兩種方法:
1> 使用時使用適中的定標,既可以表示一定的整數復位也可以表示小數復位,如 對于2812的32位系統,使用Q15格式,可表示-65536.0~65535.999969482區間內的數據。
三、實驗步驟
1.雙擊Simulator。,啟動CCS的仿真平臺的配著選項。選擇C5410 Device
2.點擊project菜單欄的new選項,新建一個LAB的工程注意存儲的路徑。
3.把下圖中用到的文件拷到工程文件目錄的文件路徑下。
4.在ccs平臺中將用到的程序導入到平臺中,點擊project—>add file to project。選擇多個文件時,可以按住ctrl鍵。
5.將程序中的start改為_main,INT_2改為_int_2。然后點擊保存。
源程序代碼
***************************************************** * * *****************************************************.title “example.asm”
;為匯編源程序取名.mmregs
;定義存儲器映象寄存器
STACK
.usect
“STACK”,10h
;分配10個單元的堆??臻g.bss
a,4
;為系數a分配4個單元的空間.bss
x,4
;為變量x分配4個單元的空間.bss
y,1
;為結果y 分配1個單元的空間.def
_c_int00
;定義標號_c_int00
example.asm
y=0.1*x1.2+35*20+15*x1.6
.data
;定義數據代碼段
table:.word
1,2,3,4
;在標號table開始的8個單元中
.word
8,6,4,2
;為這8個單元賦初值.text
;定義文本代碼段 _c_int00 : STM #0,SWWSR
STM
#STACK+10h,SP
STM
#a,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
;軟件等待狀態寄存器置0,不設等待
;設置堆棧指針初值
;AR1 指向 a的地址
;從程序存儲器向數據存儲器
;重復傳送 8個數據
;調用 SUM 實現乘法累加和的子程序
;循環等待
;將系數a的地址賦給AR3
;將變量x的地址賦給AR3
;將A清0,并重復執行下條指令4次
;執行乘法并累加,結果放在A中
;將A的低字內容送結果單元y
;結束子程序
;結束全部程序
Map文件
*****************************************************************************
TMS320C55x COFF Linker PC Version 3.83
****************************************************************************** >> Linked Mon May 31 11:03:33 2010
OUTPUT FILE NAME:
MEMORY CONFIGURATION
name
origin
length
used
attr
fill
-----------------------------------------------------------PAGE 0: EPROM
0000e000
00000100 0000001d RWIX
vecs
0000ff80
00000004 00000000 RWIX PAGE 1: SPRAM
00000060
00000020 0000000b RWIX
DARAM
00000080
00000100 0000001a RWIX
SECTION ALLOCATION MAP
output
attributes/ section
page
origin
length
input sections--------------------------------
----------------.text
0
0000e000
0000001d
0000e000
0000001d
LAB4A.obj(.text)
.bss
00000060
0000000b
UNINITIALIZED
四、心得體會
經過這次實驗,我更加熟悉CCS開發環境,訪問讀寫DSP的寄存器AC0-AC3,ARO-AR7, PC, T0-T3。
實驗2 CCS下的FFT算法程序設計
一、實驗目的
CCS下的FFT算法程序設計
二、實驗要求
提供一個CCS下的C語言例程,在CCS下,仿照例程,任選雨中FIR濾波、IIR濾波、FFT算法,采用C語言完成代碼的編寫、編譯、鏈接、下載和運行,輸入數據,濾波器系數任選,并給出運算結果。1)目的
2)工程文件的構成,并附圖 3)打印源代碼 4)打印編譯成功的信息 5)打印map文件 6)程序下載的截圖過程
三)運行結果
三、實驗步驟
1、在ccs平臺中將用到的程序導入到平臺中,點擊project—>add file to project。選擇多個文件時,可以按住ctrl鍵。
2.將所有的程序段中的start改為_main,將fft.Asm中的 K_FFT_SIZE.set 32;N K_LOGN.set 5;LOG(N)改為
K_FFT_SIZE.set 64;N K_LOGN.set 6;LOG(N)
3、對源文件進行編譯(注意先對每個.asm文件先進行編譯,以防止程序有錯誤),沒有錯誤時進行鏈接。
4.點擊菜單file?load program。裝載.out文件
四、實驗結果
五、源程序代碼
***************************************************************** 函數原型:void FFT(struct compx *xin,int N)函數功能:對輸入的復數組進行快速傅里葉變換(FFT)輸入參數:*xin復數結構體組的首地址指針,struct型
*****************************************************************/ void FFT(struct compx *xin){ int f,m,nv2,nm1,i,k,l,j=0;struct compx u,w,t;nv2=FFT_N/2;//變址運算,即把自然順序變成倒位序,采用雷德算法 nm1=FFT_N-1;for(i=0;i while(k<=j)//如果k<=j,表示j的最高位為1 { j=j-k;//把最高位變成0 k=k/2;//k/2,比較次高位,依次類推,逐個比較,直到某個位為0 } j=j+k;//把0改為1 } { int le,lei,ip;//FFT運算核,使用蝶形運算完成FFT運算 f=FFT_N;for(l=1;(f=f/2)!=1;l++)//計算l的值,即計算蝶形級數;for(m=1;m<=l;m++)// 控制蝶形結級數 { //m表示第m級蝶形,l為蝶形級總數 l=log(2)N le=2<<(m-1);//le蝶形結距離,即第m級蝶形的蝶形結相距le點 lei=le/2;//同一蝶形結中參加運算的兩點的距離 u.real=1.0;//u為蝶形結運算系數,初始值為1 u.imag=0.0;w.real=cos(PI/lei);//w為系數商,即當前系數與前一個系數的商 w.imag=-sin(PI/lei);for(j=0;j<=lei-1;j++)//控制計算不同種蝶形結,即計算系數不同的蝶形結 { for(i=j;i<=FFT_N-1;i=i+le)//控制同一蝶形結運算,即計算系數相同蝶形結 { ip=i+lei;//i,ip分別表示參加蝶形運算的兩個節點 t=EE(xin[ip],u);//蝶形運算,詳見公式 xin[ip].real=xin[i].real-t.real;xin[ip].imag=xin[i].imag-t.imag;xin[i].real=xin[i].real+t.real;xin[i].imag=xin[i].imag+t.imag;} u=EE(u,w);//改變系數,進行下一個蝶形運算 } } } } Map文件 ****************************************************************************** TMS320C55x COFF Linker PC Version 3.3 ****************************************************************************** >> Linked Sat May 30 23:48:27 2015 OUTPUT FILE NAME: MEMORY CONFIGURATION name origin length used attr fill-----------------------------------------------------------PAGE 0: EPROM 0000e000 00000100 00000019 RWIX PAGE 1: SPRAM 00000060 00000020 0000000a RWIX DARAM 00000080 00000100 00000000 RWIX SECTION ALLOCATION MAP output attributes/ section page origin length input sections------------------------------------------------.text 0 0000e000 00000012 0000e000 00000012 LAB2B.obj(.text) .data 0 0000e012 00000005 0000e012 00000005 LAB2B.obj(.data) .vectors 0 0000e017 00000002 0000e017 00000002 VECTORS.obj(.vectors) .bss 1 00000060 0000000a UNINITIALIZED 00000060 0000000a LAB2B.obj(.bss) GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name address name------------00000060.bss 0000e012.data 0000e000.text 00000060 ___bss__ ffffffff ___cinit__ 0000e012 ___data__ 0000e017 ___edata__ 0000006a ___end__ 0000e012 ___etext__ ffffffff ___pinit__ 0000e000 ___text__ 00000000 __lflags UNDEFED _c_int00 0000e000 _main ffffffff cinit 0000e017 edata 0000006a end 0000e012 etext ffffffff pinit GLOBAL SYMBOLS: SORTED BY Symbol Address address name------------00000000 __lflags 00000060 ___bss__ 00000060.bss 0000006a ___end__ 0000006a end 0000e000.text 0000e000 ___text__ 0000e000 _main 0000e012.data 0000e012 etext 0000e012 ___data__ 0000e012 ___etext__ 0000e017 edata 0000e017 ___edata__ ffffffff pinit ffffffff ___pinit__ ffffffff ___cinit__ ffffffff cinit UNDEFED _c_int00 [19 symbols] 六、心得體會 經過這次實驗,我更加熟悉CCS開發環境,CCS下的C語言例程下的 FFT算法,采用C語言完成代碼的編寫、編譯、鏈接、下載和運行的方法。 C54x,C55x,C6000芯片的比較 簡介 DSP是一種特別適合于進行數字信號處理運算的微處理器,主要用于實時2快速實現個二中數字信號處理的算法。在二十世紀八十年代以前,由于受實現方法的限制,數字信號處理的理論還不能得到廣泛的應用。直到二十世紀八十年代初,世界上第一塊單片可編程DSP的誕生,才將理論運用到實際當中。 DSP芯片的發展非常迅速,硬件結構方面主要是向多處理器的并行處理結構,便于外部數據交換的串行總線傳輸,大容量片上RAM和ROM,程序加密,增加I/O驅動能力,外圍電路內裝化,低功耗等方面發展。 C54x,C55x,C6000是DSP系統常用的芯片,下面就他們的硬件結構,運算性能,指令系統,應用場景上的區別進行分析。(1)C54x: ? 硬件結構 C54x主要有CPU,內部總線控制,特殊功能寄存器,數據存儲器,數據存儲器RAM,程序存儲器ROM等構成。CPU: ? 內部總線結構 C54x有8組16位總線:1組程序總線,3組數據總線和4組地址總線,可在一個指令周期內產生兩個數據存儲地址,實現流水線并行數據處理。? 特殊功能寄存器 該芯片共有26個特殊功能寄存器,用來對片內各功能模塊進行管理,控制,監視。它們位于具有特殊功能的RAM區。存儲器 可訪問的最大存儲空間為64k的程序,64k的數據以及64k的I/O空間。片內ROM,可配置為程序存儲器和數據存儲器。? 指令系統 支持單指令重復和塊指令重復操作 支持存儲器塊傳送指令 支持32位長操作數的讀指令 具有能并行存儲和并行加載的算術指令 支持條件存儲指令及中斷快速返回指令 1)算術運算指令 2)邏輯運算指令 3)程序控制指令 4)加載和存儲指令 ? 速度 5.0V電壓的器件,其速度可達到40MIPS,指令周期時間為25ns。3.3V電壓器件,其速度可達到80MIPS,指令周期時間為12.5ns。2.5V電壓的器件,其速度可達到100MIPS,指令周期時間為10ns。1.8V電壓的器件,其速度可達到200MIPS,指令周期時間為10ns ? 應用 該芯片具有很高的處理速度和廣泛的應用適應性,采用模塊化的設計,功耗小,常用于擴頻通信,移動通信,語音識別,發動機控制,超聲設備等等。(2)C55x TMS320C55x在C54x的基礎上發展起來的新一代低功耗,高性能數字信號處理器。 1)軟件具有C54x兼容模式; 2)工作時鐘大大超過了C54x系列處理器; 3)CPU內部通過增加功能單元增強了DSP的運算能力 具有更高的性能和更低的功耗,在無線通信,個人數字系統以及高效率的多通道數字壓縮語音電話中得到廣泛應用。? 硬件結構 1)主要由CPU,存儲器,和片上設備構成。 2)兩個乘法累加器,在一個單周期執行雙乘法操作;40位的算術邏輯單元和一個16位的算術邏輯單元,實現高精度算術和邏輯操作,對主ALU完成簡單的邏輯運算; 3)4個累加器,可以保留計算結果,減少對存儲單元的訪問;算術邏輯單元具有并行處理能力。 4)具有3根讀總線,2根寫總線,6根地址總線,16位的數據字長,輔助寄存器字長為3個字節,8個輔助寄存器,統一的程序/數據存儲空間,4個數據寄存器。 ? 指令系統 1)算術指令系統 2)位操作指令 3)擴展輔助寄存器操作指令 4)邏輯運算指令 5)移動指令 6)程序控制指令 ? 速度 與C54x相比,處理速度明顯提高,功耗明顯降低。300MHz的C55x比120MHz的C54x處理速度提高了5倍,功耗降到C54x的1/6。 ? 應用 C55x應用在高功效的設施,要求提高信道密度,但又有嚴格的功耗和空間限制。適合于剛剛推出使用的3G手機,用于因特網的音頻,視頻,數據的移動產品等??梢匝娱L電池的壽命,將數字蜂窩電話,便攜式聲音播放器,數碼相機的電池使用時間,從小時延長到天。(3)C6000 ? 硬件結構 TMS320C6000產品是美國TI公司于1997年推出的dsp芯片,該DSP芯片定點、浮點兼容,其中,定點系列是TMS320C62xx系列,浮點系列是TMS320C67xx系列,2000年3月,TI發布新的C64xx內核,主頻為1.1GHz,處理速度9000MIPS,在圖像處理和流媒體領域得到了廣泛的應用。 C6000片內有8個并行的處理單元,分為相同的兩組。DSP的體系結構采用超長指令字結構,單指令字長為32位,指令包里有8條指令,總字長達到256位。執行指令的功能單元已經在編譯時分配好,程序運行時通過專門的指令分配模塊,可以將每個256為的指令包同時分配到8個處理單元,并有8個單元同時運行。芯片最高時鐘頻率為300MHz(67xx系列),且內部8個處理單元并行運行時,其最大處理能力可達到1600MIPS。? 指令系統 1)程序轉移類指令 2)算術運算類指令 3)邏輯即位域操作指令 4)搬移類指令 5)LOAD/STORE類指令 6)C6000公共指令 ? 應用 C6000系列的高速處理能力以及其出色的對外接口能力,使得它在雷達聲吶,醫療儀器和圖像處理等領域具有非常大的應用潛力。 運算速度比傳統的快很多,因此在軍事投稿信,電子對抗,雷達系統和制導武器等應用比較廣泛。第五篇:DSP大作業