函数信号发生器

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档