函数信号发生器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告
题目函数信号发生器
课程名称DSP应用技术课程设计院部名称
专业
班级
学生姓名
学号
课程设计地点
课程设计学时
指导教师
金陵科技学院教务处制
实验项目名称:
实验学时:
同组学生姓名:实验地点:实验日期:实验成绩:
批改教师:批改时间:
一、课程设计的目的和要求
1、设计目的
(1)、掌握信号发生器的设计方法和测试技术。
(2)、了解函数发生器的工作原理和应用,了解其内部组成原理。
(3)、了解信号发生器程序设计的程序流程图。
2、设计要求
通过课程设计,加深对DSP芯片TMS320C54x的结构、工作原理的理解,对DSP相关技术进行运用,掌握设计DSP系统的基本方法。通过使用汇编语言或者C语言编写具有完整功能的图形处理程序,学会DSP和MATLAB相关工具的连接,在CSS里面输出相关波形和频谱图形。
二、系统功能介绍及总体设计方案
1、系统功能介绍
本课题是基于DSP的函数信号发生器设计与仿真,用汇编语言设计出一个数字波形发生器,能产生正弦波、方波、三角波,并且信号频率可调。
矩形、三角、正弦等信号都是函数型信号, 因此在程序设计时,对信号波形的有关参数(如幅度大小) 进行设置。波形信号一个周期内有N 个量化值,在DSP 存储器中开辟一个缓冲区用来存放N 个量化值, 当一个周期输出结束后, 再从缓冲区起始处重新开始读取信号量化值输出, 如此往复, 就可以得到连续的信号波形。若要产生较复杂的波形, 只要修改源程序, 改变DSP 中缓冲区中的N 个量化值, 而不用重新改装电路。通过改变信号的采样率, 即改变定时器中断频率, 就可以改变输出改变信号的频率, 因此系统灵活性较好。
2、设计方案
A、使用MATLAB编写程序产生信号波形
B、进行DSP编程
C、查看程序运行后的输出波形并与先前波形进行比较
三、主要内容和步骤
1、概述
在本实验中使用MATLAB模拟产生信号,观察产生的波形。MATLAB仿真后,进行DSP编程,在DSP中实现函数波形输出,与使用 MATLAB编程产生的波形进行比较,观察是否输出正确波形。
2、整体操作步骤
在CCS中,编写相关汇编文件或者C语言文件,加载.out程序。编译运行,可得到输
出的相关波形,修改程序,得到不同类型的输出波形。
3、CCS汇编程序流程图
主程序流程图
子程序流程图
四、详细设计
1.各函数信号产生的算法的实现方法
A 、一般来说,产生正弦波的方法由两种:
(1)查表法。此种方法对于精度要求不是很高的场合。如果精度要求高,表就很大,相应的存储器容量也就要增大。
(2)泰勒级数展开法。这是一种更为有效的方法。与查表法相比,需要的存储单元更少,而且精度高。
一个角度为θ的正弦和余弦函数,都可以展开成泰勒级数,取其前五项进行近似为:
)))981(541(321(!9!7!5!3sin 2
229753⋅-⋅-⋅-=+-+-=x x x x x x x x x θ (1)
)))8
71(651(431(!21!8!6!4!21cos 2
2228642⋅-⋅-⋅--=+-+-=x x x x x x x x θ (2)
上式中x 为θ的弧度值。本试验采用泰勒级数展开法。
在正弦信号发生器的设计中,先以前面的算法计算︒︒45~0(间隔为︒5.0)的sin 和cos 值,再利用αααcos sin 22sin ⋅=求出︒︒90~0的sin 值(j 间隔为︒1)。然后,通过复制,获得︒︒359~0的正弦值,重复输出该值就可以得到正弦波。
B 、方波产生程序比较简单,定义一个周期的存储空间,在前半个周期中输出幅度1,
后半个周期输出-1,重复输出该值就可以得到方波。
C 、三角波产生程序中,在前1/4周期内定义一个斜率为k 满足k ×1/4T ,产生前1/4
个周期的三角波,然后通过复制得到一个周期的三角波,储存在存储器中,重复输出该值就可以得到三角波。
2、MATLAB 仿真的源代码及输出波形
由于三角波和正弦波信号产生的算法都比较简单,这里就不再做仿真验证了,只对正弦波信号产生的算法进行仿真验证。程序如下:
clear all;
x=0:pi/360:pi/4-pi/360;
sinx=x.*(1-x.*x/(2*3).*(1-x.*x/(4*5).*(1-x.*x/(6*7).*(1-x.*x/(8*9))))); cosx=1-x.*x/2.*(1-x.*x/(3*4).*(1-x.*x/(5*6).*(1-x.*x/7*8)));
cosx=1-x.*x/2.*(1-x.*x/(3*4).*(1-x.*x/(5*6).*(1-x.*x/7*8))); sinx=2*sinx.*cosx;
%产生︒︒90~0波形 sinx2=[sinx,sinx(90:-1:1)]; %产生︒︒180~0波形 sin=[sinx2,-sinx2];
%产生︒︒359~0波形
y=pi/180:2*pi/360:2*pi;
plot(y,sin);
得到如下波形:
3、信号发生器的源代码及注释
.title "hanshu.asm" ;为汇编语言原程序命名
.mmregs ;定义MMR
.def _c_int00 ;定义标号_c_int00
.global
sinx,d_xs,d_sinx,cosx,d_xc,d_cosx,zhengxianbo_out,fangbo_out,sanjiaobo_out
sin_x: .usect "sin_x",360
STACK: .usect "STACK",10 ;为堆栈空间分配16个存储单元interval .set 1
.bss count,1 ;为count分配4个存储单元
.bss output,1800 ;为OUTPUT分配1800个单元
主程序:
主要功能是选择将要输出的波形。通过存放在AR7中的立即数与输出波形的型号相比较,若匹配,则输出相应的波形。
_c_int00: ST #0, *(count)
STM #STACK+10,SP ;设置堆栈指针
STM #2, AR7 ;选择输出波形的类型
CMPM AR7, #3 ;#3产生方波
BC rect_sub,TC
CMPM AR7, #2 ;#2产生三角波
BC tria_sub,TC
CMPM AR7, #1 ;#1产生正弦信号
BC sin_sub,TC
NOP
end: B end ;循环等待
调用子函数,从而输出相应的波形:
zhengxianbo_sub:
nop