dsp課程設計---正弦波信號發(fā)生器報告_第1頁
已閱讀1頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  DSP原理及應用</b></p><p><b>  課程設計</b></p><p>  設計題目:正弦波信號發(fā)生器</p><p><b>  學校:</b></p><p><b>  學院:</b></p>

2、<p><b>  專業(yè)班級:</b></p><p><b>  姓名:</b></p><p><b>  學號:</b></p><p><b>  同組人:、</b></p><p><b>  設計題目</b>

3、</p><p><b>  正弦波信號發(fā)生器</b></p><p><b>  設計目的</b></p><p>  學會使用CCS(Code Composer Studio)集成開發(fā)環(huán)境軟件,在此集成開發(fā)環(huán)境下完成工程項目創(chuàng)建,程序編寫,編譯,鏈接,調試以及數據的分析。同時完成一個正弦波信號發(fā)生器的程序的編寫,并在集

4、成開發(fā)環(huán)境下進行模擬運行,觀察結果。</p><p><b>  設計內容</b></p><p>  編寫一個產生正弦波信號的程序,在CCS軟件下進行模擬運行,觀察輸出結果。</p><p><b>  設計原理</b></p><p>  正弦波信號發(fā)生器已被廣泛地應用于通信、儀器儀表和工業(yè)控制

5、等領域的信號處理系統(tǒng)中。通常有兩種方法可以產生正弦波,分別為查表法和泰勒級數展開法。查表法是通過查表的方式來實現正弦波,主要用于對精度要求不很高的場合。泰勒級數展開法是根據泰勒展開式進行計算來實現正弦信號,它能精確地計算出一個角度的正弦和余弦值,且只需要較小的存儲空間。本次課程設計只要使用泰勒級數展開法來實現正弦波信號。</p><p>  1. 產生正弦波的算法</p><p>  在高

6、等數學中,正弦函數和余弦函數可以展開成泰勒級數,其表達式為</p><p>  若要計算一個角度x的正弦和余弦值,可取泰勒級數的前5項進行近似計算。</p><p>  由上述兩個式子可以推導出遞推公式,即</p><p>  sin(nx)=2cos(x)sin[(n-1)x]-sin[(n-2)x]</p><p>  cos(nx)=2

7、cos(x)sin[(n-1)x]-cos[(n-2)x]</p><p>  由遞推公式可以看出,在計算正弦和余弦值時,不僅需要已知cos(x),而且還需要sin[(n-1)x]、sin[(n-2)x]和cos[(n-2)x]。</p><p><b>  2. 正弦波的實現</b></p><p> ?、庞嬎阋粋€角度的正弦值</p&g

8、t;<p>  利用泰勒級數的展開式,可計算一個角度x的正弦值,并采用子程序的調用方式。在調用前先在數據存儲器d_xs單元中存放x的弧度值,計算結果存放在d_sinx單元中。</p><p>  實現計算一個角度的正弦值的程序片段如下:</p><p><b>  sinx:</b></p><p>  .def d_xs,d

9、_sinx </p><p><b>  .data</b></p><p>  table_s .word 01C7H ;C1=1/(8*9)</p><p>  .word 030BH ;C2=1/(6*7)</p><p>  .word 0666H

10、 ;C3=1/(4*5)</p><p>  .word 1556H ;C4=1/(2*3)</p><p>  d_coef_s .usect "coef_s",4</p><p>  d_xs .usect "sin_vars",1</p><p&g

11、t;  d_squr_xs .usect "sin_vars",1</p><p>  d_temp_s .usect "sin_vars",1</p><p>  d_sinx .usect "sin_vars",1</p><p>  d_l_s .usect

12、"sin_vars",1</p><p><b>  .text</b></p><p>  SSBX FRCT</p><p>  STM #d_coef_s,AR5 ;move coeffs table_s</p><p><b>  RPT #3&

13、lt;/b></p><p>  MVPD #table_s,*AR5+</p><p>  STM #d_coef_s,AR3</p><p>  STM #d_xs,AR2</p><p>  STM #d_l_s,AR4</p><p>  ST #7FFFH,d_l_s<

14、;/p><p>  SQUR *AR2+,A ;A=x^2</p><p>  ST A,*AR2 ;(AR2)=x^2</p><p>  ||LD *AR4,B ;B=1</p><p>  MASR *AR2+,*A

15、R3+,B,A ;A=1-x^2/72,T=x^2</p><p>  MPYA A ;A=T*A=x^2(1-x^2/72)</p><p>  STH A,*AR2 ;(d_temp)=x^2(1-x^2/72)</p><p>  MASR *AR2

16、-,*AR3+,B,A </p><p>  ;A=1-x^2/42(1-x^2/72);T=x^2(1-x^2/72)</p><p>  MPYA *AR2+ ;B=x^2(1-x^2/42(1-x^2/72))</p><p>  ST B,*AR2 &

17、lt;/p><p>  ;(d_temp)=x^2(1-x^2/42(1-x^2/72))</p><p>  ||LD *AR4,B ;B=1</p><p>  MASR *AR2-,*AR3+,B,A </p><p>  ;A=1-x^2/20(1-x^2/42(1-x^2/7

18、2))</p><p>  MPYA *AR2+ </p><p>  ;B=x^2(1-x^2/20(1-x^2/42(1-x^2/72)))</p><p>  ST B,*AR2 ;(d_temp)=B</p><p>  ||LD *AR4,B

19、 ;B=1</p><p>  MASR *AR2-,*AR3,B,A </p><p>  ;A=1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72)))</p><p>  MPYA d_xs ;B=x(1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72))))</

20、p><p>  STH B,d_sinx ;sin(theta)</p><p><b>  RET</b></p><p> ?、朴嬎阋粋€角度的余弦值</p><p>  利用余弦函數展開的泰勒級數的前五項計算一個角度的余弦值,可采用子程序的調用方式來實現。調用前先將x弧度值放在數據

21、存儲器d_xc單元中,計算結果存放在d_cosx單元中。</p><p>  實現計算一個角度的余弦值的程序片段如下:</p><p>  cosx: </p><p>  .def d_xc,d_cosx</p><p>  d_coef_c .usect "coef_c",4</p>

22、<p><b>  .data</b></p><p>  table_c .word 0249H ;C1=1/(7*8)</p><p>  .word 0444H ;C2=1/(5*6)</p><p>  .word 0AABH ;C3=1/(3*4)&l

23、t;/p><p>  .word 4000H ;C4=1/2</p><p>  d_xc .usect "cos_vars",1</p><p>  d_squr_xc .usect "cos_vars",1</p><p>  d_temp_c .use

24、ct "cos_vars",1</p><p>  d_cosx .usect "cos_vars",1</p><p>  c_l_c .usect "cos_vars",1</p><p><b>  .text</b></p><

25、;p>  SSBX FRCT</p><p>  STM #d_coef_c,AR5 ;move coeffs table_c</p><p><b>  RPT #3</b></p><p>  MVPD #table_c,*AR5+</p><p>  STM #d_coef_

26、c,AR3</p><p>  STM #d_xc,AR2</p><p>  STM #c_l_c,AR4</p><p>  ST #7FFFH,c_l_c</p><p>  SQUR *AR2+,A ;A=x^2</p><p>  ST A,*

27、AR2 ;(AR2)=x^2</p><p>  ||LD *AR4,B ;B=1</p><p>  MASR *AR2+,*AR3+,B,A ;A=1-x^2/56,T=x^2</p><p>  MPYA A ;A=T*A=x^

28、2(1-x^2/56)</p><p>  STH A,*AR2 ;(d_temp)=x^2(1-x^2/56)</p><p>  MASR *AR2-,*AR3+,B,A ;A=1-x^2/30(1-x^2/56)</p><p>  ;T=x^2(1-x^2/56)</p><p>

29、;  MPYA *AR2+ ;B=x^2(1-x^2/30(1-x^2/56))</p><p>  ST B,*AR2 </p><p>  ;(d_temp)=x^2(1-x^2/30(1-x^2/56))</p><p>  ||LD *AR4,B

30、 ;B=1</p><p>  MASR *AR2-,*AR3+,B,A </p><p>  ;A=1-x^2/12(1-x^2/30(1-x^2/56))</p><p>  SFTA A,-1,A ;-1/2</p><p><b>  NEG A</b>&

31、lt;/p><p>  MPYA *AR2+ ;B=-x^2/2(1-x^2/12(1-x^2/30(1-x^2/56)))</p><p>  MAR *AR2+</p><p><b>  RETD</b></p><p>  ADD *AR4,16,B ;B=-x^2/2(1

32、-x^2/12(1-x^2/30(1-x^2/56)))</p><p>  STH B,*AR2 ;cos(theta)</p><p><b>  RET</b></p><p><b>  ⑶正弦波的實現</b></p><p>  利用計算一個角度的正弦值

33、和余弦值程序可實現正弦波。其實現步驟如下:</p><p>  第一步:利用sin_start和cos_start子程序,計算(間隔為)的正弦和余弦值;</p><p>  第二步:利用sin(2x)=2sin(x)cos(x)公式,計算的正弦值(間隔為);</p><p>  第三步:通過復制,獲得的正弦值;</p><p>  第四步:將

34、的正弦值重復從PA口輸出,便可得到正弦波。</p><p>  產生正弦波的程序片段如下:</p><p><b>  .mmregs</b></p><p>  .def start</p><p>  .def d_xs,d_sinx,d_xc,d_cosx,sinx,cosx</p><

35、p>  sin_x: .usect "sin_x",360</p><p>  STACK: .usect "STACK",10H</p><p>  k_theta .set 286 ;theta=pi/360(0.5deg)</p><p><b>

36、;  start:</b></p><p><b>  .text</b></p><p>  STM #STACK+10H,SP</p><p>  STM k_theta,AR0</p><p>  STM 0,AR1</p><p>  STM #sin_x,AR

37、6</p><p>  STM #90,BRC</p><p>  RPTB loop1-1</p><p>  LDM AR1,A</p><p>  LD #d_xs,DP</p><p>  STL A,@d_xs</p><p>  STL A,@d_xc&

38、lt;/p><p>  CALL sinx ;d_sinx=sin(x)</p><p>  CALL cosx ;d_cosx=cos(x)</p><p>  LD #d_sinx,DP</p><p>  LD @d_sinx,16,A ;A=sin(x)</p

39、><p>  MPYA @d_cosx ;B=sin(x)*cos(x)</p><p>  STH B,1,*AR6+ ;AR6----2*sin(x)</p><p>  MAR *AR1+0</p><p>  loop1: STM #sin_x+89, AR7 ;sin91(deg.

40、)-sin179(deg.)</p><p>  STM #88,BRC</p><p>  RPTB loop2-1</p><p>  LD *AR7-,A</p><p>  STL A,*AR6+</p><p>  loop2: STM #179,BRC ;sin1

41、80(deg.)-sin359(deg.)</p><p>  STM #sin_x,AR7</p><p>  RPTB loop3-1</p><p>  LD *AR7+,A</p><p><b>  NEG A</b></p><p>  STL A,*AR6+<

42、;/p><p>  loop3: STM #sin_x,AR6 ;generate sin wave</p><p>  STM #1,AR0</p><p>  STM #360,BK</p><p>  B loop3</p><p>  產生正弦波鏈接命令文件的程序片段如下:&l

43、t;/p><p><b>  MEMORY</b></p><p><b>  {</b></p><p><b>  PAGE 0:</b></p><p>  EPROM: org=0E000H, len=1000H</p><p>  VECS:

44、 org=0FF80H, len=0080H</p><p><b>  PAGE 1:</b></p><p>  SPRAM: org=0060H, len=0020H</p><p>  DARAM1: org=0080H, len=0010H</p><p>  DARAM2: org=0090H,

45、 len=0010H</p><p>  DARAM3: org=0200H, len=0200H</p><p><b>  }</b></p><p><b>  SECTIONS</b></p><p><b>  {</b></p><p>

46、;  .text :> EPROM PAGE 0</p><p>  .data :> EPROM PAGE 0</p><p>  STACK :> SPRAM PAGE 1</p><p>  sin_vars :> DARAM1 PAGE 1</p><

47、p>  coef_s :> DARAM1 PAGE 1</p><p>  cos_vars :> DARAM2 PAGE 1</p><p>  coef_c :> DARAM2 PAGE 1</p><p>  sin_x : align(512) {} > DARAM3

48、 PAGE 1</p><p>  .vectors :> VECS PAGE 0</p><p><b>  }</b></p><p>  在實際應用中,正弦波是通過D/A口輸出的。選擇每個正弦周期中的樣點數、改變每個樣點之間的延遲,就能夠產生不同頻率的波形,也可以利用軟件改變波形的幅度以及起始相位。</

49、p><p><b>  總體方案設計</b></p><p><b>  1. 總體實現方案</b></p><p>  我們知道一個角度為x的正弦和余弦函數,都可以展開為泰勒級數,且其前五項可以看為:</p><p>  本程序的編程思想是這樣的,正弦波的波形可以看為由無數點組成,這些點與軸的每一個角

50、度值相對應,那么我們可以利用DSP處理器處理大量重復計算的優(yōu)勢來計算,軸每一點對應的y軸的值(在x軸取360個點來進行逼近),由于程序的編制采用小數形式,其弧度大于1的正弦值得不到,這就對正弦波的產生造成了障礙??捎捎谡也ǖ奶厥獾膶ΨQ形式給程序的編制找到了出口。的弧度為0.7854<1,即 之間的任意正弦、余弦值可以利用匯編程序得到N又可以利用公式:得到之間的正弦值。而之間的正弦曲線與之間的正弦曲線通過這條軸左右對稱,那么就可以

51、得到的正弦值,而的正弦曲線的相反數通過這條軸與左右對稱。這樣的正弦值也得到了。一個周期內完整的正弦波就得到了。正弦波產生的流程圖如下:</p><p><b>  2. 具體實現步驟</b></p><p>  本課程設計需要使用C54X匯編語言產生正弦波,并通過 CCS的圖形顯示工具觀察波形。設計分以下幾步完成:</p><p>  啟動 C

52、CS,操作如下:</p><p>  1.建立新的工程文件:點擊Project→New,保存文件名為sinx.pjt。</p><p>  2.建立匯編源程序:點擊File→New→Source File菜單命令,打開一個空白文檔,將匯編源程序逐條輸入后,單擊Flie→Save菜單命令,文件類型保存為(*.asm),單擊“保存”按鈕,以上匯編程序被存盤。</p><p&

53、gt;  3.建立連接命令文件:點擊File→New→Source File菜單命令,打開一個空白文檔,將鏈接命令文件逐條輸入后,單擊Flie→Save菜單命令,文件類型保存為(*.cmd),單擊“保存”按鈕,以上鏈接命令文件被存盤。</p><p>  4.選擇 Project 菜單中的Add File to Project 選項,將匯編源程序sin.asm和鏈接定位sin.cmd文件依次添加到工程文件中。&l

54、t;/p><p>  5.選擇 Project 菜單中的 Options 選項,并選擇 build options 項來修改或添加編譯、連接中使用的參數。選擇Linker 窗口,在“Output Filename”欄中寫入輸出 OUT 文件的名字,如 sin.out,還可以設置生成的 map文件名。 </p><p>  6.完成匯編,編譯和鏈接,正確產生.out文件:點擊Project菜單中

55、的Rebuild all,請注意在監(jiān)視窗口顯示的匯編,編譯和鏈接的相關信息。如果沒有錯誤,將產生sin.out文件;如果有錯,在監(jiān)視窗口以紅色字體顯示出錯誤行,用鼠標雙擊該行,光標跳將至源程序相應的出錯行。修改錯誤后,重新匯編鏈接。</p><p>  7.在 Project 選項中打開sin.pjt 文件,使用 Build 選項完成編譯、連接。</p><p>  8.使用 File 菜

56、單中的 Load Program 將 OUT 文件裝入。然后選擇 Debug→Run,程序執(zhí)行過程中可以使用 Debug →Halt 暫停程序的執(zhí)行。</p><p>  9.選擇 View -> Graph -> Time/Frequency菜單打開一個圖形顯示窗口。將 “Start Address”項改為地址sin_x,將“Acquisition Buffer Size”項設置為360,將“Dis

57、play Data Size”項設置為360,將“DSP Data Type”改為“16-bit signed integer” 。</p><p>  即將Graph Property Dialog對話框改為見下圖:</p><p>  這樣,將在圖形顯示窗口中顯示從sin_x(首地址)開始的360個點的 16 位有符號整數的圖形。</p><p><b&g

58、t;  主要參數</b></p><p>  1. sin(theta)=x(1-x^2/2*3(1-x^2/4*5(1-x^2/6*7(1-x^2/8*9))))</p><p>  2. cos(theta)=1-x^2/2*3(1-x^2/4*5(1-x^2/6*7(1-x^2/8*9)))</p><p>  3. sin(2*theta)=2*

59、sin(theta)*cos(theta)</p><p><b>  源程序</b></p><p>  1. 產生正弦波程序清單sin.asm:</p><p>  .title "sin.asm" ;為匯編文件取名為“sin.asm”</p><p>  .mmregs

60、 ;定義存儲器映像寄存器</p><p>  .def _c_int00</p><p>  .ref sinx,d_xs,d_sinx,cosx,d_xc,d_cosx;定義標號</p><p>  sin_x: .usect "sin_x",360 ;為"sin_x"保留360個存儲空間

61、</p><p>  STACK: .usect "STACK",10 ;為堆棧保留10個存儲空間</p><p>  k_theta .set 286 ;theta=pi/360(0.5deg)</p><p>  PA0 .set 0</p><p>&l

62、t;b>  _c_int00 </b></p><p>  .text ;定義文本程序代碼段</p><p>  STM #STACK+10,SP ;設置堆棧指針</p><p>  STM k_theta,AR0 ;AR0-->K_theta(increment)</p&g

63、t;<p>  STM 0,AR1 ;(AR1)=X(rad)</p><p>  STM #sin_x,AR6 ;AR6- - >sin(x)</p><p>  STM #90,BRC ;form sin0(deg.)—sin90(deg)</p><p> ?。恢貜蛨?zhí)行塊

64、語句(下條語句開始至loop1-1 )91次</p><p>  RPTB loop1-1 </p><p>  LDM AR1,A</p><p>  LD #d_xs,DP ;DPd_xs</p><p>  STL A,@d_xs ;(A)低16位→d_x

65、s</p><p>  STL A,@d_xc ;(A)低16位→d_xc</p><p>  CALL sinx ;調用sinx程序</p><p>  CALL cosx ;調用conx程序</p><p>  LD #d_sinx,DP

66、;DP d_sinx</p><p>  LD @d_sinx,16,A ;A=sin(x)</p><p>  MPYA @d_cosx ;B= sin(x)*cos(x)</p><p>  STH B,1,*AR6+ ;AR6- - >2*sin(x)*cos(x)</p><

67、p>  MAR *AR1+0 ;修改輔助寄存器AR1</p><p>  loop1: STM #sin_x+89,AR7 ;sin91(deg.)- -sin179(deg.)</p><p>  STM #88,BRC ;重復執(zhí)行下條指令至loop2-1</p><p>  RPTB

68、 loop2-1 ;處90次</p><p>  LD *AR7-,A ;((AR7)) →A,然后AR7減去1</p><p>  STL A,*AR6+ ;(A) 低16位→AR6</p><p>  loop2: STM #179,BRC ;sin180(deg.)-

69、 -sin359(deg.)</p><p> ??;(BRC)=179,重復執(zhí)行180次</p><p>  STM #sin_x,AR7 ;AR7指向sin_x首地址</p><p>  RPTB loop3-1 ;</p><p>  LD *AR7+,A ;((AR7))

70、 →A,然后AR7加1</p><p>  NEG A ;累加器變負</p><p>  STL A,*AR6+ ;A低16位→AR6</p><p>  loop3: STM #sin_x,AR6 ;generate sin wave AR6指向sin_x</p>&

71、lt;p>  STM #1,AR0 ;AR 01</p><p>  STM #360,BK ;BK360</p><p>  loop4: PORTW *AR6+0%,PA0 ;PA0=*AR6+0%,向PA0輸出數據</p><p>  B loop4 ;&

72、lt;/p><p><b>  sinx:</b></p><p>  .def d_xs,d_sinx ;定義標號d_xs,d_sinx</p><p>  .data ;定義數據代碼段</p><p>  table_s .word 01c7h

73、 ;c1=1/(8*9)</p><p>  .word 030bh ;c1=1/(6*7)</p><p>  .word 0666h ;c1=1/(4*5)</p><p>  .word 1556h ;c1=1/(2*3)</p><p>  d_coef_s .

74、usect "coef_s",4 ;為"coef_s"保留4個存儲空間</p><p>  d_xs .usect "sin_vars",1 ;為d_xs中sin_vars保留1個存儲空間</p><p>  d_squr_xs .usect "sin_vars",1

75、 ;為d_squr_xs中sin_vars保留1個存儲空間</p><p>  d_temp_s .usect "sin_vars",1 ;為d_temp_s中sin_vars保留1個存儲空間</p><p>  d_sinx .usect "sin_vars",1 ;為d_sinx中sin_vars保留1個

76、存儲空間</p><p>  c_l_s .usect "sin_vars",1 ;為d_xs中sin_vars保留1個存儲空間</p><p>  .text ;定義代碼開始段</p><p>  SSBX FRCT ;設置FRCT=1以解決冗余符號

77、位</p><p>  STM #d_coef_s,AR5 ;AR5指向d_coef_s首地址</p><p>  RPT #3 ;重復下條指令4次</p><p>  MVPD #table_s,*AR5+ ;table_s中的數復制到AR5指向的單元</p><p>

78、  STM #d_coef_s,AR3 ;AR3指向d_coef_s首地址</p><p>  STM #d_xs,AR2 ;AR2指向d_xs首地址</p><p>  STM #c_l_s,AR4 ;AR4指向c_l_s首地址</p><p>  ST #7FFFh,c_l_s

79、 ;7FFFh →c_l_s</p><p>  SQUR *AR2+,A ;AR2指向累加器A中的數值求其平方</p><p>  ST A,*AR2 ;(A)左移16位→AR2</p><p>  ||LD *AR4,B ;(AR4)左移16位→B</p>

80、<p>  MASR *AR2+,*AR3+,B,A ;從累加器A中減去(AR2)*(AR3)</p><p>  MPYA A ;操作數與累加器A中高位相乘</p><p>  STH A,*AR2 ;(A)高16位→AR2</p><p>  MASR *AR

81、2-,*AR3+,B,A ;從累加器A中減去(AR2)*(AR3)</p><p>  MPYA *AR2+ ;AR2指向的數與累加器A的高16位相乘</p><p>  ST B,*AR2 ;(B)左移16位→AR2</p><p>  ||LD *AR4,B ;(A

82、R4)左移16位→B</p><p>  MASR *AR2-,*AR3+,B,A ;從累加器A中減去(AR2)*(AR3)</p><p>  MPYA *AR2+ ;與累加器A中高16位相乘</p><p>  ST B,*AR2 ;(B)左移16位→AR2</p>&l

83、t;p>  ||LD *AR4,B ;(AR4)左移16位→B MASR *AR2-,*AR3+,B,A ;從累加器A中減去(AR2)*(AR3)</p><p>  MPYA d_xs ;d_xs指向的操作數與累加器A中高16位相乘</p><p>  STH B,d_sin

84、x ;(B)高16位→d_sinx</p><p>  RET ;返回</p><p><b>  cosx:</b></p><p>  .def d_xc,d_cosx ;定義標號d_xc,d_cosx</p><p>  d_coef

85、_c .usect "coef_c",4 ;為coef_c保留4個存儲空間</p><p>  .data ;定義數據代碼段</p><p>  table_c .word 0249h ;c1=1/(7*8)</p><p>  .word 04

86、44h ;c2=1/(6*5)</p><p>  .word 0aabh ;c3=1/(3*4)</p><p>  .word 4000h ;c4=1/2</p><p>  d_xc .usect "cos_vars",1 ;為d_x

87、c中cos_vars保存1個存儲單元</p><p>  d_squr_xc .usect "cos_vars",1 ;為d_squr_xc中cos_vars保存1個存儲單元</p><p>  d_temp_c .usect "cos_vars",1 ;為d_temp_c中cos_vars保存1個存儲單元</p&

88、gt;<p>  d_cosx .usect "cos_vars",1 ;為d_cosx中cos_vars保存1個存儲單元</p><p>  c_l_c .usect "cos_vars",1 ;為c_l_c中cos_vars保存1個存儲單元</p><p>  .text

89、 ;定義文本代碼段</p><p>  SSBX FRCT ;FRCT=1以清除冗余符號位</p><p>  STM #d_coef_c,AR5 ;AR5指向d_coef_c首地址</p><p>  RPT #3 ;重復下條指令4次</p>

90、;<p>  MVPD #table_c,*AR5+ ;把table_c中的數復制到中AR5</p><p>  STM #d_coef_c,AR3 ;AR3指向d_coef_c首地址</p><p>  STM #d_xc,AR2 ;AR2 指向d_xc首地址</p><p>  STM

91、 #c_l_c,AR4 ;AR4指向c_l_c首地址</p><p>  ST #7FFFh,c_l_c ;7FFFh→c_l_c</p><p>  SQUR *AR2+,A ;求X的平方存放在累加器A中</p><p>  ST A,*AR2 ;(A)左移16位

92、→AR2</p><p>  ||LD *AR4,B ;(AR4)左移16位→B</p><p>  MASR *AR2+,*AR3+,B,A ;A=1-x^2/56,T=x^2</p><p>  MPYA A ;A=T*A=x^2(1-x^2/56)</p><p

93、>  STH A,*AR2 ;(d_temp)= x^2(1-x^2/56)</p><p>  MASR *AR2-,*AR3+,B,A ;A=1-x^2/30(1-x^2/56),</p><p>  T= x^2(1-x^2/56)</p><p>  MPYA *AR2+ ;B

94、=x^2(1-x^2/30(1-x^2/56))</p><p>  ST B,*AR2 ;(d_temp)= x^2(1-x^2/30(1-x^2/56))</p><p>  ||LD *AR4,B ;B=1</p><p>  MASR *AR2-,*AR3+,B,A ;A= 1-x^2

95、/12(1-x^2/30(1-x^2/56))</p><p>  SFTA A,-1,A ;-1/2</p><p>  NEG A ;</p><p>  MPYA *AR2+ ;B=1-x^2/2(1-x^2/12(1-x^2/30</p>&

96、lt;p> ??;(1-x^2/56)))</p><p>  MAR *AR2+ ;</p><p>  RETD ;</p><p>  ADD *AR4,16,B ;B=1-x^2/2(1-x^2/12(1-x^2/30</p><p

97、> ??;(1-x^2/56)))</p><p>  STH B,*AR2 ;cos(theta)</p><p>  RET ;</p><p>  .end ;</p><p>  2. *.cmd文件描述輸入文

98、件和輸出文件,說明系統(tǒng)中有哪些可用存儲器、程序段、堆棧及復位向量和中斷向量等安排在什么地方。其中MEMORY段就是用來規(guī)定目標存儲器的模型,通過這條指令,可以定義系統(tǒng)中所包含的各種形式的存儲器,以及它們占據的地址范圍;SECTIONS段說明如何將輸入段組合成輸出段以及在可執(zhí)行文件中定義輸出段、規(guī)定輸出段在存儲器中的位置等。正弦波程序鏈接命令文件sin.cmd:</p><p><b>  MEMORY&

99、lt;/b></p><p><b>  {</b></p><p><b>  PAGE 0:</b></p><p>  EPROM: org = 0E000h, len = 1000h</p><p>  VECS: org = 0FF80h,

100、 len = 0080h</p><p><b>  PAGE 1:</b></p><p>  SPRAM: org = 0060h, len = 0020h</p><p>  DARAM1: org = 0080h, len = 0010h</p><p> 

101、 DARAM2: org = 0090h, len = 0010h</p><p>  DARAM3: org = 0200h, len = 0200h</p><p><b>  }</b></p><p>  SECTIONS </p><p><b>  

102、{</b></p><p>  .text :>EPROM PAGE 0 </p><p> ?。晃谋敬a段其實地址為0E000h,長度為1000h</p><p>  .data :>EPROM PAGE 0 ;數據代碼段其實地址為0D000h</p><p>  STACK

103、:>SPRAM PAGE 1 ;堆棧起始地址為0060h,長度為0020h</p><p>  sin_vars :>DARAM1 PAGE 1 ;標號為sin_vars段的起始地址為0080</p><p><b>  ;長度為0010h</b></p><p>  coef_s :>DARAM1

104、 PAGE 1 ;標號為coef_s段的起始地址為0070h</p><p><b> ??;長度為0010h</b></p><p>  cos_vars :>DARAM2 PAGE 1 ;標號為cos_vars段的起始地址為0090h</p><p><b>  ;長度為0010h</b></p>

105、;<p>  coef_c :>DARAM2 PAGE 1 ;標號為coef_c段的起始地址為0080h</p><p><b> ?。婚L度為0020h</b></p><p>  sin_x : align(512) {} > DARAM3 PAGE 1</p><p>  .vectors

106、:>VECS PAGE 0</p><p><b>  }</b></p><p>  3. 復位向量文件sin_v.asm:</p><p>  .title "sin_v.asm"</p><p>  .ref _c_int00</p><

107、;p>  .sect ".vectors"</p><p>  B _c_int00</p><p><b>  .end</b></p><p><b>  設計仿真結果及分析</b></p><p>  在ccs集成環(huán)境中實現正弦波能夠起

108、到防止干擾的作用,同時也大大地減小了波形的線性失真。同時我們也能從中看出ccs能夠精確地對各個角度進行計算得出相應的正弦值,幅度和頻率易于調節(jié),波形也較為穩(wěn)定,抗干擾能力較強。</p><p>  最重要的是這種設計方案簡單可行,新穎實用,具有很高的實踐和推廣價值。</p><p><b>  分析:</b></p><p>  通過不斷的發(fā)現

109、錯誤、改正錯誤和調試,最終得到了所希望的圖象,即正弦波信號。</p><p><b>  設計總結</b></p><p>  在本次課程設計過程中我遇到一些課堂中從未有過的問題,通過網絡查找和同學交流,大大促進了實訓進程。并在過程中進一步提高自身的創(chuàng)作、創(chuàng)新水平,扎實基礎,擴展所學。</p><p>  課設過程中經常遇到問題,通過自己在網上

110、查找資料和在老師的幫助下,一步一步地解決了問題,最終解決了問題得到了結果,使我獨立解決問題的能力得到了很大的提高。并且此次課程設計,基于課程理論知識和網上資料,使我對數字信號處理課程有了更深一步的了解和掌握,對利用CCS軟件編程的數字信號處理方法有了進一步的了解。在理論課的基礎上進行實驗實習,是對本門課程的深入學習和掌握,在以后的工作學習中,數字信號的處理都是采用計算機仿真的方很大的幫助。雖然《DSP原理及應用》這門課程的課時很短,但是

溫馨提示

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

評論

0/150

提交評論