dsp正弦函数计算程序的编写
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计任务书
题目正弦函数计算程序的编写
专业、班级学号姓名
主要内容、基本要求、主要参考资料等:
1、参考课本,正弦函数的泰勒级数展开式及C54X Mnemonic Instruction
Set.pdf ,编写正弦函数的计算程序。
2、要求程序能够进行3次以上的叠代运算,计算一个数的正弦值。
3、要求用汇编语言书写,其中汇编语言源文件要求具有已初始化段,未
初始化段,代码段的定义。
4、完成上述要求程序的编写并在CCS5000编译连接通过并验证计算结
果,设计完成后要求每人上交一份课程设计说明书,说明书要求包含有课程设计任务书,各文件的说明,各文件里关键语句的说明。说明书要求字迹工整、叙述清楚。
5、发挥部分,如时间可行,增加设计成为一个完整的项目(附加一个命
令文件和一个向量表文件)。并验证结果。
6、时间:一周。
完成期限:
指导教师签名:
课程负责人签名:
2013 年 12 月 30 日
目录
引言 (2)
1 正余弦的泰勒级数展开式 (3)
2 存储空间的分配 (4)
3 迭代法计算正弦值 (5)
3.1、迭代法正弦值的计算流程图 (5)
3.1、正弦函数计算程序 (7)
4 复位向量文件和链接文件 (9)
4.1、复位向量文件 (9)
4.2、链接文件 (9)
5 调试结果 (10)
6 设计体会 (12)
参考文献 (12)
引言
正弦作为一种数学方法,在科研和平时的数据处理方面应用的很广泛。尤其是在通信、仪器仪表和工业控制等领域应用更为广泛。在科技高速发展的今天,对函数的计算不仅要求有很高的精度,还对计算的时间又很高的要求,必须在很短的时间内完成数据的处理,否则根本不能完成大批量数据的实时性计算和处理。介于DSP芯片运算速度快的特点,用DSP芯片完成这些算法已越来越受到重视。
通常有两种方法可以产生正弦波,分别是查表法和泰勒级数展开法。查表法应用于精度要求不很高的场合,而泰勒级数展开法是一种比查表法更为有效的方法。它能精确的计算出一个角度的正弦和余弦值,且占用的储存空间较小,体现了它的优越性。
1 正余弦的泰勒级数展开式
高等数学中,正弦函数和余弦函数可以展开的泰勒级数,其表达试如下:
-+-+-=!
x !x !x !x x x 9753)sin(9
753 (1) -+-+-=!
x !x !x !x x 86421)cos(8
642 (2) 若要计算一个角度x 的正弦和余弦值,可取泰勒级数的前五项进行计算。
!
x !x !x !x x x 9753)sin(9
753+-+-= ⎪⎪⎭
⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛----=9*817*615*413*212222x x x x x (3) !
x !x !x !x x 86421)cos(8
642+-+-= ⎪⎪⎭⎫ ⎝
⎛⎪⎪⎭⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛----=8*716*514*31212222
x x x x (4) 由式(3)和(4)可得导出递推公式,即
])2sin[(])1sin[()cos(2)sin(x n x n x nx ---=
])2cos[(])1sin[()cos(2)cos(x n x n x nx ---=
由递推公式可以看出,在计算正弦和余弦值时,不仅需要已知cos(x),而且需要x n )1sin[(-、x n )2sin[(-和x n )2cos[(-。
2 存储空间的分配
在正弦函数的计算程序所需要的存储空间有四个已初始化的数据段table_s 与若干个程序段组成的已初始化段和九个存储空间未初始化段,分别为:d_xs 、d_squr_xs 、d_temp_s 、d_sinx 、c_1_s 、d_coef_s(4个存储空间)。其存储空间分布如下:
计算正弦值存储单元分配
3 迭代法计算正弦值
3.1、迭代法正弦值的计算流程图
其中n a 随迭代次数的变化而变化1a =
9*81、2a =6*71、3a =4*51、4a =2
*31
(1) 执行第一次迭代:
||DL *AR5,B
迭代法正弦值的计算流程图
MASR *AR3+,*AR2+,B,A
MPYA A
STH A,*AR3
执行结果: d_temp_s= ⎪⎪⎭⎫ ⎝⎛-8*7122
x x (2) 执行第二次迭代:
MASR *AR3-,*AR2+,B,A
MPYA *AR3+
ST B,*AR3
执行结果:
d_temp_s= ⎪⎪⎭⎫ ⎝
⎛⎪⎪⎭⎫ ⎝⎛--8*717*61222x x x 执行第三次迭代:
||DL *AR5,B
MASR *AR3-,*AR2+,B,A MPYA *AR3+
ST B,*AR3
执行结果:
d_temp_s= ⎪⎪⎭⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛---8*717*614*512222
x x x x 执行第四次迭代:
||DL *AR5,B
MASR *AR3-,*AR2+,B,A
STM #d_xs,AR3
执行结果: d_temp_s= ⎪⎪⎭
⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛----8*717*614*512*312222x x x x x 即可粗略的求的sinx 的值为d_temp_s 中的值