DSP正弦函數(shù)計(jì)算程序的編寫(xiě)_第1頁(yè)
DSP正弦函數(shù)計(jì)算程序的編寫(xiě)_第2頁(yè)
DSP正弦函數(shù)計(jì)算程序的編寫(xiě)_第3頁(yè)
DSP正弦函數(shù)計(jì)算程序的編寫(xiě)_第4頁(yè)
DSP正弦函數(shù)計(jì)算程序的編寫(xiě)_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上摘要泰勒級(jí)數(shù)展開(kāi)法作為一種數(shù)學(xué)方法,在科研和平時(shí)的數(shù)據(jù)處理方面應(yīng)用的很廣泛。尤其是在通信、儀器儀表和工業(yè)控制等領(lǐng)域應(yīng)用更為廣泛。在科技高速發(fā)展的今天,對(duì)函數(shù)的計(jì)算不僅要求有很高的精度,還對(duì)計(jì)算的時(shí)間又很高的要求,必須在很短的時(shí)間內(nèi)完成數(shù)據(jù)的處理,否則根本不能完成大批量數(shù)據(jù)的實(shí)時(shí)性計(jì)算和處理。介于DSP芯片運(yùn)算速度快的特點(diǎn),用DSP芯片完成這些算法已越來(lái)越受到重視。產(chǎn)生正弦波,分別是查表法和泰勒級(jí)數(shù)展開(kāi)法。查表法應(yīng)用于精度要求不很高的場(chǎng)合,而泰勒級(jí)數(shù)展開(kāi)法是一種比查表法更為有效的方法。它能精確的計(jì)算出一個(gè)角度的正弦和余弦值,且占用的儲(chǔ)存空間較小,體現(xiàn)了它的優(yōu)越性。關(guān)鍵詞

2、: DSP 泰勒級(jí)數(shù) 正弦波專(zhuān)心-專(zhuān)注-專(zhuān)業(yè)目錄1、正余弦信號(hào)發(fā)生器的實(shí)現(xiàn)原理1.1、正弦波信號(hào)發(fā)生器泰勒級(jí)數(shù)展開(kāi)法是根據(jù)泰勒展開(kāi)式進(jìn)行計(jì)算來(lái)實(shí)現(xiàn)正弦信號(hào),它能精確地計(jì)算出一個(gè)角度的正弦和余弦值,且只需要較小的存儲(chǔ)空間。本次主要用泰勒級(jí)數(shù)展開(kāi)法來(lái)實(shí)現(xiàn)正弦波信號(hào)。 正弦函數(shù)和余弦函數(shù)可以展開(kāi)成泰勒級(jí)數(shù),其表達(dá)式: 取泰勒級(jí)數(shù)的前5項(xiàng),得近似計(jì)算式:遞推公式: sin(nx) = 2cos(x)sin(n-1)x-sin(n-2)x cos(nx) = 2cos(x)sin(n-1)x-cos(n-2)x 由遞推公式可以看出,在計(jì)算正弦和余弦值時(shí),需要已知cos(x)、sin(n-1)x、sin(

3、n-2)x和cos(n-2)x。2、正弦波的實(shí)現(xiàn)2.1、計(jì)算一個(gè)角度的正弦值計(jì)算一個(gè)角度x的正弦值,可利用泰勒級(jí)數(shù)的展開(kāi)式,采用子程序的調(diào)用方式來(lái)實(shí)現(xiàn)。在調(diào)用前先在數(shù)據(jù)存儲(chǔ)器d_xs單元中存放x的弧度值,計(jì)算結(jié)果存放在d_sinx單元中。程序中要用到一些存儲(chǔ)單元存放數(shù)據(jù)和變量,存儲(chǔ)單元的分配如下:d_xs:x; d_squr_xs: x2 d_temp_s:暫存; d_sinx:計(jì)算結(jié)果sinx c_1_s:7FFFh (數(shù)值1);d_coef_s :泰勒系數(shù)存儲(chǔ)單元分配圖:xd_xsd_squr_xsd_temp_sd_sinxc_1_sd_coef_stable_sc1=1/(8*9) x

4、2c2=1/(6*7)c3=1/(4*5)sinxc4=1/(2*3)(7FFFH)(c1=01c7H)(c2=030BH)(c3=0666H)(c4=1556H)數(shù)據(jù)存儲(chǔ)器 程序存儲(chǔ)器表1計(jì)算正弦值存儲(chǔ)單元分配程序清單sinx.asm: .title “sinx.asm” .mmregs .def start .ref sin_start,d_xs,d_sinx STACK: .usect “STACK”,10start: STM #STACK+10,SP LD #d_xs,DP ST #6487H,d_xs CALL sin_start end: B end sin_start: .def

5、 sin_start d_coef_s .usect “coef_s”,4 .data table_s: .word 01C7H ;c1=1/(8*9) .word 030BH ;c2=1/(6*7) .word 0666H ;c3=1/(4*5) .word 1556H ;c4=1/(2*3) d_xs .usect “sin_vars”,1 d_squr_xs .usect “sin_vars”,1 d_temp_s .usect “sin_vars”,1 d_sinx .usect “sin_vars”,1 c_1_s .usect “sin_vars”,1 .text SSBX FRC

6、T STM #d_coef_s,AR4 RPT #3 MVPD #table_s,*AR4+ STM #d_coef_s,AR2 STM #d_xs,AR3 STM #c_1_s,AR5 ST #7FFFH,c_1_s SQUR *AR3+,A ;求x的平方值 ST A,*AR3 ;x平方值存入(AR3) | LD *AR5,B;B=1 MASR *AR3+,*AR2+,B,A ;A=1-x2/72,T=x2 MPYA A;A=T*A STH A,*AR3 ;(d_temp_s)= x2(1-x2/72) MASR *AR3-,*AR2+,B,A ;A=1-x2/42(1-x2/72);T=x

7、2(1-x2/72) MPYA *AR3+ ;B= x2(1- x2/42(1- x2/72)) ST B,*AR3 ;(d_temp_s)= x2(1- x2/42(1- x2/72) | LD *AR5,B ;B=1 MASR *AR3-,*AR2,B,A ;A=1-x2/20(1-x2/42(1-x2/72) MPYA *AR3+ ;B=x2(1-x2/20(1-x2/42(1-x2/72) ST B,*AR3 ;(d_temp_s)= | LD *AR5,B ;B=1 MASR *AR3-,*AR2,B,A ;A=1-x2/6(1-x2/20(1-x2/42(1-x2/72) MPYA

8、 d_xs ;B=x(1-x2/6(1-x2/20(1-x2/42(1-x2/72) STH B,d_sinx ;sin(theta) RET .end2.2、計(jì)算一個(gè)角度的余弦值計(jì)算余弦值與計(jì)算正弦值相同。存儲(chǔ)單元分配圖:xd_xcd_squr_xcd_temp_cd_cosxc_1_cd_coef_ctable_sc1=1/(7*8) x2c2=1/(5*6)c3=1/(3*4)cosxc4=1/2(7FFFH)(c1=00249H)(c2=0444H)(c3=0AABH)(c4=4000H)數(shù)據(jù)存儲(chǔ)器 程序存儲(chǔ)器表2 計(jì)算余弦值存儲(chǔ)單元分配程序清單cosx.asm:.title “cos

9、x.asm”.mmregs.def _c_int00.ref cos_start,d_cosxSTACK: .usect “STACK”,10_c_int00: STM # STACK+10,sp LD #d_xc,DP ST #6487h,d_xc CALL cos_startend: B endcos_start: .def cos_startd_coeff .usect “coef_c”,4 .dataTable .word 0249h; c1=1/(7*8).Word 0444h; c2=1/(5*6).Word 0aahh; c3=1/(3*4).word 4000h; c4=1/2

10、d_x .usect “cos_vars”,1d_squr_x .usect “cos_vars”,1d_temp .usect “cos_vars”,1d_cosx .usect “cos_vars”,1c_1 .usect “cos_vars”,1 .text SSBX FRCT STM #d_coef_c,AR4 Rpt #3 MVPD #table_c,*AR4+ STM #d_coef_c,AR2 STM #d_xc,AR3 STM #c_1_c,AR5 ST #7FFFH,c_1_c SQUR *AR3+.A;求x的平方值 ST A,*AR3;x平方值存入(AR3) | LD *A

11、R5,B;B=1 MASR *AR3-,*AR2+,B,A;A=1-x2/56,T=x2 MPYA A;A=T*A STH A,*AR3;(d_temp_c)=x2(1-x2/56) MASR *AR-,*AR3+,B,A;A=1-x2/30(1-x2/56);T=x2(1-x2/56) MPYA *AR3+;B= x2(1- x2/30(1- x2/56)) ST B,*AR3 ;(d_temp_s)= x2(1- x2/30(1- x2/56) |LD *AR5,B;B=1 MASR *AR3-,*AR2,B,A;;A=1-x2/12(1-x2/30(1-x2/56) SFTA A,-1,

12、A;-1/2 NEG A MPYA *AR3+;B=-x2/2(1-x2/12(1-x2/30(1-x2/56) MAR *AR2+ RETD ADD *AR5,16,B;B=1-x2/2(1-x2/12(1-x2/30(1-x2/56) STH B,*AR3 RET .end3、 正弦波的實(shí)現(xiàn)利用計(jì)算一個(gè)角度的正弦值和余弦值程序公式可實(shí)現(xiàn)正弦波,步驟如下:第一步:利用sin_start 和cos_start子程序,計(jì)算0o45o(間隔為0.5o)的正弦和余弦值。第二步:利用sin(2x)=2sin(x)cos(x),計(jì)算0-90o的正弦值(間隔為1o).第三步:通過(guò)復(fù)制,獲得0-359o的正

13、弦值。第四步:將0-359o的正弦值重復(fù)從PA口輸出,便可得到正弦波。程序清單sin.asm:.title “sinx_asm”.mmregs.def start.ref d_xs,sinx,d_sinx,d_xc,cosx,d_coxsin_x:.usect“sin_x”,360STACK.usect“STACK”,10k_theta.286;theta=pi/360PA0.set0Start:.textSTM#STACK+10,SPSTM#0,AR0;AR0=x=0STMk_theta,AR1;設(shè)置增量STM#sin_x,AR7;AR7指向sin_xSTM#90,BRC;設(shè)置重復(fù)次數(shù),計(jì)算

14、sin0-sin9RPTBloop-1LDMAR0,ALD#d_xs,DPSTLA,d_xsSTLA,d_xcCALLsin_startCALLcos_startLD#d_sinx,DPLDd_sinx,16,A;求得sinx加載累加器AMPYAd_cosx;計(jì)算sinx*cosx,結(jié)果存BSTHB,1,*AR7+;計(jì)算2*sinx*cosx,結(jié)果存AR7MAR*AR0+0Loop1:STM#sin_x+89,AR6;AR6指向sin_x+89STM #88,BRC;設(shè)置重復(fù)次數(shù),計(jì)算sin91至sin197RPTBloop2-1LD*AR6-,ASTLA,*AR7+Loop: STM #17

15、9,BRC;設(shè)置重復(fù)次數(shù),計(jì)算sin180至sin359STM#sin_x,AR6;AR6指向sin_xRPTBloop3-1LD*AR6+,ANEGASTLA,*AR7+Loop3_:STM#sin_x,AR7;AR7指向sin_xSTM #1,AR1STM#360,BK;設(shè)置緩沖區(qū)長(zhǎng)度Loop4:PORTW*AR7+0%,PA0 ;輸出正弦值Bloop4;循環(huán)輸出,產(chǎn)生正弦波.end4、鏈接文件鏈接命令文件是將鏈接的信息放在一個(gè)文件中,這在多次使用同樣的鏈接信息時(shí),可以方便地調(diào)用。在命令文件中可使用兩個(gè)十分有用的偽指令MEMORY和SECTIONS,用來(lái)指定實(shí)際應(yīng)用中的存儲(chǔ)器結(jié)構(gòu)和地址的映

16、射。在命令行中不能使用這兩個(gè)偽指令,命令文件為ASC文件,可包含一下內(nèi)容:(1)輸入文件名,用來(lái)指定目標(biāo)文件、存檔庫(kù)或其他命令文件。注意,當(dāng)命令文件調(diào)用其他文件時(shí),該調(diào)用語(yǔ)句必須是最后一句,連接器不能從被調(diào)用的命令文件中返回。(2)連接器選項(xiàng),他們?cè)诿钗募械氖褂梅椒ㄓ谠诿钚兄邢嗤#?)MEMORY和SECTIONS鏈接偽指令,MEMORY用來(lái)指定目標(biāo)存儲(chǔ)器結(jié)構(gòu),SECTIONS用來(lái)控制段的構(gòu)成于地址分配程序中所用到的鏈接文件sinc.cmdvectors.objsinx.obj-o sin.out-msin.map-e startMEMORY PAGE 0: EPROM: org=0E

17、000h, 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=0200hSECTIONS .text :>EPROM PAGE 0 .data :>EPROM PAGE 0 STACK :>SPRAM PAGE 1 sin_vars :>DARAM1 PAGE 1 coef_s :>DARAM1 PAGE 1

18、 cos_vars :>DARAM2 PAGE 1 coef_c :>DARAM2 PAGE 1 sin_x : align(512) > DARAM3 PAGE 1 .vectors :>VECS PAGE 05、調(diào)試結(jié)果第一次疊代計(jì)算結(jié)果:A=004E4510A4 B=007FFF0000T=4EF3 AR2=0061AR3=1428 AR4=0094 SP=0089第二次疊代計(jì)算結(jié)果:A=007E B=004DCCCA72T=4EF3 AR2=0093AR3=0095 AR4=0094 SP=0089第三次疊代計(jì)算結(jié)果:A=007C1B0000 B=004C8C0F42T=4EF3 AR2=0094AR3=0095 AR4=0094 SP=0089 第四次疊代計(jì)算結(jié)果:A=00733D0000 B=

溫馨提示

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

評(píng)論

0/150

提交評(píng)論