北航DSP实验课画正弦波程序
DSP实验报告4
DSP实验报告实验四正弦信号发生器学院:班级:姓名:学号:实验四、正弦信号发生器一、 实验目的1. 掌握利用DSP 产生正弦信号的原理2. 熟悉子程序调用的程序结构以及堆栈的使用3. 掌握CCS 的图形输出操作二、实验设备1. 集成开发环境Code Composer Studio (简称CCS )2. 实验代码Sin.s54、Lab.cmd 和Lab.gel三、实验内容1. 阅读理解多项式逼近正弦的文档2. 阅读和理解Sin.s543. 调试正弦波发生器4. 加入断点,并选取图形观测,利用动画及时更新5. 试利用迭代的方法来实现正弦信号发生器四、实验要求和提示1. 2345sin()= 3.140625 + 0.02026367 - 5.325196 + 0.5446778 + 1.800293x x x x x x ,x 为第一象限内的弧度值。
因为sin()sin(),sin()sin()x x x x π-=-=-,所以只需将第二,三,四象限内的弧度值转换到第一象限即可计算出相应的正弦函数值。
由于有限精度,规定弧度值从~ππ-,其中π=0x7FFF ,π/2=0x4000,π-=0x8000。
利用级数展开产生正弦波,必须在调用计算子程序之前备份好累加器A 中的当前弧度值,以便计算结束后实现x 增量。
正弦波的频率可以通过增幅的大小来进行控制,如果假定程序循环一次为一个时间单位,则正弦波的周期为65536/步长,频率为周期倒数。
x 自动增长时要注意当x 超过π后必须调整到~ππ-的范围内才能调用计算子程序,即若,2x x x ππ>=-则。
2. 需要使用临时数据时,必须用frame 语句留出所需空间,使用结束后要将堆栈指针还原以防堆栈内存泄漏。
要注意的是frame 的下一条指令不能使用直接寻址。
3. 注意事项:利用累加器写乘法寄存器T (stlm )之后的下一条指令不能使用T ;条件转移指令xc 在指令访问阶段判断条件,该条件必须在先于xc 指令的2个指令之前产生;条件转移指令bc 是在指令执行阶段判断条件,不存在这方面的问题。
DSP28335生成正弦波的程序
IFR = 0x0000;
InitPieVectTable();
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.EPWM1_INT = &epwm1_timer_isr;
ERTM;
{
asm(" NOP");
}
}
void InitEPwm1Example()
{
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;//zhuyi
EPwm1Regs.TBPRD = PRD; //载波周期=2*1500TBCLK
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV2;
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; // Load registers every ZERO_PRD
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
//float Q;
#define PWM1_INT_ENABLE 1
#define PWM2_INT_ENABLE 1
#define PWM3_INT_ENABLE 1
void InitEPwm1Example(void);
//void InitEPwm2Example(void);
// cmp2[i]=(Uint16)(EvaRegs.T1PR*0.25*(1+M*sin((2*i)*PI/N+PI*4/3)+1+M*sin((2*i+1)*PI/N+PI*4/3)));
DSP课程设计
DSP课程设计DSP原理及应用课程设计一、设计题目——正弦波信号发生器二、设计目的1、掌握用汇编语言编写输出正弦波信号的程序2、掌握正弦波信号的 DSP 实现原理和 C54X 编程技巧3、进一步加深对CCS 的认识4、能通过 CCS 的图形显示工具观察正弦信号波形三、实验设备PC 兼容机一台,操作系统为 WindowsXP,安装Code Composer Studio 3.1软件。
四、设计原理在通信、仪器和工业控制等领域的信号处理系统中常常会用到信号发生器来产生正弦波! 产生正弦波的方法一是查表法,二是泰勒级数展开法!查表法主要用于对精度要求不很高的场合,而泰勒级数展开法是一种比查表法更为有效的方法,它能精确地计算出一个角度的正弦和余弦值,且只需要较少的存储空间。
本实验将利用泰勒级数展开法利用计算一个角度的正弦值和余弦值程序可实现正弦波。
(1)产生正弦波的算法:在高等数学中,正弦函数和余弦函数可以展开成泰勒级数,其表达式为:3579xxxxsin(x),x,,,,,... 3!5!7!9!2468xxxx cos(x),1,,,,,...2!4!6!8!若要计算一个角度的正弦和余弦值,可取泰勒级数的前五项进行近似计算。
3579xxxxx,x,,,,,sin()...3!5!7!9!2222xxxx(1(1(1(1)))),x,,,,,,,,234567892468xxxx cos(x),1,,,,,... 2!4!6!8!2222xxxx,,,,, 1(1(1(1))) ,,,2345678由这两个式子可推导出递推公式,即sin(nx),2cos(x)sin[(n,1)x],sin[(n,2)x]cos(nx),2cos(x)sin[(n,1)x],cos[(n,2)x]由递推公式可以看出,在计算正弦和余弦值时,不仅需要已知,而且还需要、和。
cos(x)sin(n,1)xsin(n,2)xcos(n,2)x(2)正弦波的实现1、计算一个角度的正弦值利用泰勒级数的展开式,可计算一个角度x的正弦值,并采用子程序的调用方式。
基于dsp的正弦波信号发生器课程设计
目录第1章绪论 (1)1 DSP简介 (1)第2章总体方案的分析和设计 (2)2.1 总体方案设计 (2)2.2正弦波信号发生器 (2)第3章硬件设计 (3)3.1硬件组成 (3)3.2控制器部分 (4)3.4人机接口部分 (5)第4章软件设计 (6)4.1流程图 (6)4.2 正弦信号发生器程序清单 (7)第5章总结 (12)参考文献 (12)第1章绪论1 DSP简介数字信号处理(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。
20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。
数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法,这些信号由数字序列表示。
在过去的二十多年时间里,信号处理已经在通信等领域得到极为广泛的应用。
图一是数字信号处理系统的简化框图。
此系统先将模拟信号转换为数字信号,经数字信号处理后,再转换成模拟信号输出。
其中抗混叠滤波器的作用是将输入信号x (t)中高于折叠频率的分量滤除,以防止信号频谱的混叠。
随后,信号经采样和A/D 转换后,变成数字信号x(n)。
数字信号处理器对x(n)进行处理,得到输出数字信号y (n),经D/A转换器变成模拟信号。
此信号经低通滤波器,滤除不需要的高频分量,最后输出平滑的模拟信号y(t)。
图1.1数字信号处理系统简化框图数字信号处理是以众多学科为理论基础的,它所涉及的范围极其广泛。
例如,在数学领域,微积分、概率统计、随机过程、数值分析等都是数字信号处理的基本工具,与网络理论、信号与系统、控制论、通信理论、故障诊断等也密切相关。
近来新兴的一些学科,如人工智能、模式识别、神经网络等,都与数字信号处理密不可分。
可以说,数字信号处理是把许多经典的理论体系作为自己的理论基础,同时又使自己成为一系列新兴学科的理论基础。
第2章 总体方案的分析和设计2.1 总体方案设计1.基于DSP 的特点,本设计采用TMS320C54X 系列的DSP 作为正弦信号发生器的核心控制芯片。
DSP课设报告正文
本科课程设计报告课程名称:DSP原理及应用实验项目:正弦信号发生器的设计2012年12月20日一、设计目的:学会使用CCS集成开发软件,在开发环境下完成工程文件的创建,程序编辑、编译、链接、调试和数据分析。
二、设计内容:编写程序,利用CCS集成开发环境产生正弦波。
三、设计原理:正弦波信号发生器已被广泛地应用于通信、仪器仪表和工业控制等领域的信号处理系统中。
通常有两种方法可以产生正弦波,分别为查表法和泰勒级数展开法。
查表法主要用于对精度要求不很高的场合,而泰勒级数展开法是一种比查表法更为有效的方法,它能精确地计算出一个角度的正弦和余弦值,且只需要较小的存储空间。
本次采用的是泰勒级数展开法来实现正弦信号。
在数学中,正弦函数和余弦函数可以展开成泰勒级数,其表达式为: sin(x)=x- +-+-……cos(x)=1- +-+-……若要计算一个角度x 的正弦和余弦值,可取泰勒级数的前五项进行近似计算。
sin(x)=x- +-+x(1(1-(1-(1-))))利用上式,可计算一个角度x 的正弦值,并采用子程序的调用方式。
在调用前先在数据存储器d_xs 单元中存放x 的弧度值,计算结果存放在d_sinx 单元中,程序中要用到一些存储单元存放数据和变量,存储单元的分配图如下图所示:数据存储器 程序存储器d_xsd_squr_xs d_temp_s d_sinxc_1_s d_coef_s计算正弦值存储单元分配cos(x)=1- +-+=1-(1-(1-(1-利用上式计算一个角度的余弦值,可采用子程序的调用方式来实现。
调用前先将x 的弧度值存放在数据存储器d_xc 单元中,计算结果存放在d_cosx 单元中。
程序中要用到一些存储单元,用来存放数据和变量,如下图所示:数据存储器 程序存储器d_xc d_squr_xc d_temp_c d_cosxc_1_c d_coef_c计算余弦值存储单元分配由以上两式可推导出递推公式,即:sin(nx)=2cos(x)sin[(n-1)x]-sin[(n-2)x]90 cos(nx)=2cos(x)sin[(n-1)x]-cos[(n-2)x] 由递推公式可以看出,在计算正弦和余弦值时,不仅需要已知cos(x),而且还需要sin(n-1)x 、sin(n-2)x 和cos(n-2)x 。
北航自动化学院DSP实验报告
DSP实验报告学号:姓名:实验1 软件认识实验一、实验目的(1)熟悉CCS开发环境的界面。
(2)利用CCS软件仿真功能,实现前期算法设计的实验和调试,以及算法性能的评估。
(3)了解C54x系列DSP芯片与CCS在线连接调试的基本方法。
二、实验设备信号发生器1台,示波器1台,万用表1块,5V电源1个,PC机1台,C5402核心板1块。
三、实验内容及结果分别在CCS软件仿真和在线调试模式下,用C语言和汇编语言实现正弦值计算功能。
C语言程序要能够计算从0~180°的正弦值。
(1)打开Setup CCS 2(C5000),将CCS配置成软件仿真模式。
(2)打开CCS开发环境,新建工程,用C语言和汇编语言编写正弦值计算程序。
(3)编译,加载,运行,调试。
利用CCS的图形显示功能,观测生成的正弦波。
(4)将计算机和仿真器相连,将CCS Setup设置为硬件调试模式。
(5)将前面调试好的程序烧写入DSP中,观察运行结果。
(6)利用CCS的代码性能评估工具,分析所编写程序的效率、运行速度,提出进一步的优化方案。
实验结果如下图:图1软件仿真数组结果图2软件仿真图形结果从数组中变量的值和图像可以看出程序运行结果是正确的。
四、分析与思考代码效率评估在实际操作中并没有进行,预测汇编语言编写的程序效率会远高于C语言编写的程序。
当然C语言程序也有简短易读的优势。
汇编语言使用泰勒展开的方法计算正弦值是为了利用DSP拥有硬件乘法器的优势,DSP的硬件乘法器使其能够迅速计算乘法,大大削减了计算时间。
由此可以看出,功能简单但是对运算速度要求严格的程序使用汇编语言编写最为合适,而功能复杂,代码量庞大但对运算速度要求不是很严格的程序使用C 语言及其他高级语言编写更具优势,可以大大节约开发时间,代码可读性、可移植性更强。
五、实验感想本次试验过程中我初步了解了DSP编程和软件仿真的过程,也略知汇编语言和高级编程语言各自的优劣。
初步体验了工程设计中利用软件仿真初步调试程序的这一步。
基于dsp技术的正弦信号发生课程设计
第一章:绪论数字信号处理(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。
20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。
数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法,这些信号由数字序列表示。
在过去的二十多年时间里,信号处理已经在通信等领域得到极为广泛的应用。
图一是数字信号处理系统的简化框图。
此系统先将模拟信号转换为数字信号,经数字信号处理后,再转换成模拟信号输出。
其中抗混叠滤波器的作用是将输入信号x(t)中高于折叠频率的分量滤除,以防止信号频谱的混叠。
随后,信号经采样和A/D转换后,变成数字信号x(n)。
数字信号处理器对x(n)进行处理,得到输出数字信号y(n),经D/A转换器变成模拟信号。
此信号经低通滤波器,滤除不需要的高频分量,最后输出平滑的模拟信号y(t)。
图一数字信号处理系统简化框图数字信号处理是以众多学科为理论基础的,它所涉及的范围极其广泛。
例如,在数学领域,微积分、概率统计、随机过程、数值分析等都是数字信号处理的基本工具,与网络理论、信号与系统、控制论、通信理论、故障诊断等也密切相关。
近来新兴的一些学科,如人工智能、模式识别、神经网络等,都与数字信号处理密不可分。
可以说,数字信号处理是把许多经典的理论体系作为自己的理论基础,同时又使自己成为一系列新兴学科的理论基础。
第二章:TMS320C54x芯片介绍1.总线结构C54x 包括8 条16 比特宽度的总线,其中:一条程序总线(PB):传送取自程序存储器的指令代码和立即操作数三条数据总线(CB、DB、EB):将内部个单元连接在一起,CB和DB传送读自数据存储器的数据,EB传送写入存储器的数据四条地址总线(PAB CAB DAB EAB):传送执行指令所需的地址2.C P UC54x 的CPU 结构包括:40 比特的ALU ,其输入来自16 比特立即数、16 比特来自数据存储器的数据、暂时存储器、T 中的16 比特数、数据存储器中两个16 比特字、数据存储器中32 比特字、累加器中40 比特字。
DSP课程设计--正弦信号发生器的设计
DSP课程设计–正弦信号发生器的设计简介正弦信号发生器是一种常见的电子信号发生器。
在数字信号处理中,正弦信号是非常重要的一种基础信号。
在本次课程设计中,我们将使用MATLAB软件设计一个正弦信号发生器。
设计步骤步骤一:信号采样我们的信号采样频率为fs,即每秒采样多少个点。
首先我们需要设置采样频率。
信号采样频率的选取需要满足采样定理,保证采样信号能够完全还原原信号。
我们使用MATLAB的“fs”命令设置采样频率。
假设我们的采样频率为10KHz,代码为:fs = 10000; % 设置采样频率为10KHz步骤二:生成时域正弦信号根据正弦波方程,我们可以生成时域上的正弦信号:f0 = 1000; % 正弦信号的频率为1kHzA = 1; % 正弦信号的幅度为1Vt = 0:1/fs:1; % 假设信号长度为1秒y = A * sin(2 * pi * f0 * t);代码中,我们生成了一个正弦信号,频率为1kHz,幅度为1V,信号长度为1秒,并将其存放在y变量中。
步骤三:对信号进行FFT变换为了验证我们生成的信号是否正确,我们需要对信号进行FFT变换。
FFT变换可以将一个时域信号转化为频域信号。
我们使用MATLAB的“fft”命令对信号进行FFT变换。
代码如下:Y = fft(y); % 对信号y进行FFT变换,得到频域信号YL = length(y); % 计算信号的长度P2 = abs(Y/L); % 取FFT变换结果的绝对值,然后除以长度LP1 = P2(1:L/2+1);P1(2:end-1) = 2*P1(2:end-1);f = fs*(0:(L/2))/L; % 生成频率坐标轴代码中,我们使用FFT变换对信号y进行变换,并将结果存放在Y变量中。
然后我们根据FFT变换结果,得到频率分量以及对应的幅度分量。
步骤四:绘制频域正弦信号最后,我们使用MATLAB的plot函数绘制频域信号采样结果图。
DSP实验报告
哈尔滨工程大学信息与通信工程学院实验名称:DSP原理与应用实验班级:20100813学号:**********学生姓名:**实验一自相关函数实验一.实验目的:熟悉C语言编程和VDSP编译环境。
学会用C语言编程实现自相关函数对正弦信号的应用。
二.实验要求:用VDSP集成环境产生一个正弦信号,然后用自相关函数对其进行处理,观察自相关函数运算后的波形。
自相关函数:自相关函数是信号在时域中特性的平均度量,它用来描述信号在一个时刻的取值与另一时刻取值的依赖关系,其定义式为对于周期信号,积分平均时间T为信号周期。
对于有限时间内的信号,例如单个脉冲,当T趋于无穷大时,该平均值将趋于零,这时自相关函数可用下式计算自相关函数就是信号x(t)和它的时移信号x(t+τ)乘积的平均值,它是时移变量τ的函数。
例如信号的自相关函数为由此可见,正弦(余弦)信号的自相关函数同样是一个余弦函数。
它保留了原信号的频率成分,其频率不变,幅值等于原幅值平方的一半,即等于该频率分量的平均功率,但丢失了相角的信息。
三.实验结果:正弦信号经过自相关后的波形四.实验结论:自相关函数应用在检测信号回声(反射)。
若在宽带信号中存在着带时间延迟的回声,那么该信号的自相关函数将在处也达到峰值(另一峰值在处),这样可根据确定反射体的位置,同时自相关系数在处的值将给出反射信号相对强度的度量。
实验二 包络检波实验一.实验目的:熟悉C 语言编程和VDSP 编译环境。
学会用C 语言编程实现对信号进行包络提取。
二.实验要求:一个低频信号a(t)调制在一个高频信号t 0cos ω上,如图所示,这个信号表示为t t a t y 0cos )()(ω⋅= 低频信号和高频载波是相乘关系,将低频信号a(t)提取出来的过程就是求解包络.1) 将y(t)平方处理, t t a t a t t a t 02202222cos )()(cos )()(y ωω⋅+=⋅=平方后可以看到,变成了低频信号平方分量和一个高频信号之和.这样将信号通过一个低通滤波器就可以得到低频分量了.2) Hilbert变换3) 模拟电容充放电的方法三.实验结果:原始的包络信号:包络检波后的信号:四.实验结论:包络检波的应用在于从调幅波包络中提取调制信号的过程:先对调幅波进行整流,得到波包络变化的脉动电流,再以低通滤波器滤除去高频分量,便得到调制信号。
DSP实验1-2正玄波输出调试
南昌航空大学实验报告2011 年 10 月 12 日课程名称: DSP 技术及应用 实验名称: 正玄波输出调试 班 级: 080611 学生姓名: 学号: 08061108 指导教师评定: 签名:一、实验目的掌握CCS 集成开发环境,学会使用CCS 开发DSP 应用程序。
了解最基本的DSP 开发步骤。
二、实验步骤1、 CCS 的安装CCS 的安装主要包括四个环节:底层硬件驱动程序安装、CCS 集成开发环境安装、驱动程序安装、驱动程序的配置。
以下以TI 公司的中国代理合众达公司开发的DSP 仿真器安装为例,介绍CCS 集成开发环境的整个安装过程。
1. 底层硬件驱动程序安装(1) 硬件连接目前有四种类型连接的DSP 仿真器:微机串行接口仿真器SEED-XDS 、微机并行接口仿真SEED-XDSPP 、微机USB 接口仿真器SEED-XDSUSB 、微机PCI 插卡接口仿真器SEED-XDSPCI ,用户应根据使用的DSP 仿真器连接好硬件。
(2)底层硬件驱动程序安装硬件连接完毕后,启动计算机会自动识别硬件,识别后在安装向导下(也可以用Windows 的“控制面板”的“添加/删除硬件”进入安装向导)安装其驱动程序,例如要安装C3000系列微机USB 接口仿真器SEED-XDSUS ,应安装目录为\utilites\C3000\SEED-XDSUSB\USBdriver\下的驱动程序,安装完毕后打开控制面板查看系统中的设备管理器,出现如图5-3所示结果,证明硬件连接成功。
2.CCS 集成开发环境安装CCS 是TI 公司开发的软件,准备使用什么系列的DSP ,则应安装对应的CCS ,例如:对于F206系列,需要安装CCS2000类型的CCS ,而对于3000或4000系列的DSP ,则需要安装的是C3x/4x 的CCS 。
在软件的光盘“CC ”文件夹中执行SETUP 后,出现图5-5所示,双击图中的Code Composer 图标,即进入安装向导,按提问和选择进行安装。
DSP正弦函数程序
1 正余弦的泰勒级数展开式正弦函数和余弦函数可以展开的泰勒级数如下:-+-+-=!x !x !x !x x x 9753)sin(9753 (1)-+-+-=!x !x !x !x x 86421)cos(8642 (2)若要计算一个角度x 的正弦和余弦值,可取泰勒级数的前五项进行计算。
!x !x !x !x x x 9753)sin(9753+-+-=⎪⎪⎭⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛----=9*817*615*413*212222x x x x x (3) !x !x !x !x x 86421)cos(8642+-+-=⎪⎪⎭⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛----=8*716*514*31212222x 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流程图4.程序.title "sin.asm".mmregs.def start.ref sin_start,d_xs,d_sinxSTACK: .usect "STACK",10HS tart: STM #STACK+10,SPLD #d_xs,DPST #6487H,d_xsCALL sin_startend: B endsin_start:.def sin_startD_coef_s .usect "coef_s",4.dataTable_s: .word 01C7H.word 030bH.word 0666H.word 1556Hd_xs .usect "sin_vars",1 ;定义未初始化段d_squr_xs .usect "sin_vars",1d_temp_s .usect "sin_vars",1d_sinx .usect "sin_vars",1c_1_s .usect "sin_vars",1.textSSBX FRCT ;设置小数乘法STM #d_coff_s,AR4RPT #3MVPD #table_s,*AR4+ ;c1=1/72,c2=1/42,c3=1/20STM #d_coef_s,AR2STM #d_xs,AR3STM #c_1_s,AR5ST #7FFFH,c_1_sSQUR *AR3+,A ;求x的平方值ST A,*AR3||DL *AR5,B ;B=1MASR *AR3+,*AR2+,B,A ;A=(1-x^2)/72;T = x^2 MPYA A ;A=x^2(1-x^2)/72STH A,*AR3 ; AR3=d_temp_s= x^2(1-x^2)/72MASR *AR3-,*AR2+,B,A ; A = 1-x^2/42(1-x^2/72); T =x^2(1-x^2/72)MPYA *AR3+ ; B = X^2(1-x^2/42(1-x^2/72))ST B,*AR3 ; AR3=d_temp_s=B||DL *AR5,BMASR *AR3-,*AR2+,B,A;A=1-x^2/20(1-x^2/42(1-x^2/7 2)MPYA*AR3+ ;B=(1-x^2/20(1-x^2/42(1-x^2/72))*x^2ST B,*AR3; d_temp_s= B = (1-x^2/20(1-x^2/42(1-x^2/72))*x^2||DL *AR5,BMASR *AR3-,*AR2+,B,A;A=1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72))*x^2STM #d_xs,AR3MPYA AR3;B=x(1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72 ))*x^2)STH B, d_sinx ; d_sinx=b 的出结果RET.end。
DSP原理及应用实验六:泰勒级数展开法设计正弦信号发生器
• 实验要求: 用软件仿真的方法编译并调试课件 所提供的实验参考程序,在图形窗 口利用动画执行的方式观察输出的 波形结果。
主程序文件shiyan6.asm
注意:
中断向量表文件vectors.asm 链接命令文件shiyan6.cmd 两个文件同学们不用自己新建, 将由课件文件夹直接提供。
• 续前页:
3、打开CCS的图形显示窗口,修改如 下参数: start address=0x1010 Page=Data Acquisition Buffer Size=1 Display Data Size=1000 DSP Data Type=16-bit signed integer
修改后的界面如下图所示:
• 实验步骤:
1、本实验程序编写、文件添加、 编译、链接、装载可执行文件的 过程与前面实验相同。 2、在语句“MVDK *AR6,@dis_buff” 处加上一个断点。作用:这里定 义了一个显示缓冲区dis_buf,将 要输出到DA的数据送到显示缓冲 区当中去,以便在CCS图形显示的 时候可以从图形显示中得到数据。
Байду номын сангаас
4、点击CCS的Debug/Animate运行此程序,
就可以在CCS的图形观察窗口看到正弦波的 显示。 注:Animate 运行方式是在 遇见断点后继 续执行的一种 方式,在显示 图形上面特别 方便。
• 实验思考(最后五次实验统一完成 上交) • 1、本程序的编程方法和思路同于教材
参考程序,请大家对每条指令都认真 揣摩,画出程序的流程图并思考可否 用其他方法实现。 2、利用Matlab软件计算一个周期360点 的正弦波数据,利用查表的方法实现 正弦波的产生。 3、试用C语言完成本次实验。
DSP28335生成正弦波的程序
DSP28335⽣成正弦波的程序//产⽣周期变化的正弦波#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File #include "DSP2833x_Examples.h" // DSP2833x Examples Include File #include "IQmathLib.h"#include "qmath.h"#include "math.h"#define N 33#define PI 3.1415925#define PRD 600float M=0.8;int i;//double a[N];//unsigned int n=0;//float Q;#define PWM1_INT_ENABLE 1#define PWM2_INT_ENABLE 1#define PWM3_INT_ENABLE 1void InitEPwm1Example(void);//void InitEPwm2Example(void);//void InitEPwm3Example(void);interrupt void epwm1_timer_isr(void);//interrupt void epwm2_timer_isr(void);//interrupt void epwm3_timer_isr(void);//void InitCmp();//extern Uint16 NN,MM;//Uint16 NN=24,MM=1;//Uint16 n=0;Uint16 cmp1[360],cmp2[360],cmp3[360];Uint32 EPwm1TimerIntCount;Uint32 EPwm2TimerIntCount;Uint32 EPwm3TimerIntCount;void main(void){InitSysCtrl();InitEPwm1Gpio();// InitEPwm2Gpio();// InitEPwm3Gpio();DINT;InitPieCtrl();IER = 0x0000;IFR = 0x0000;InitPieVectTable();EALLOW; // This is needed to write to EALLOW protected registers PieVectTable.EPWM1_INT = &epwm1_timer_isr;// PieVectTable.EPWM2_INT = &epwm2_timer_isr;// PieVectTable.EPWM3_INT = &epwm3_timer_isr;EDIS;EALLOW;SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Stop all the TB clocksEDIS;InitEPwm1Example();// InitEPwm2Example();// InitEPwm3Example();// InitCmp();EALLOW;SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;EDIS;EPwm1TimerIntCount = 0;EPwm2TimerIntCount = 0;EPwm3TimerIntCount = 0;IER |= M_INT3;PieCtrlRegs.PIEIER3.bit.INTx1 = PWM1_INT_ENABLE;// PieCtrlRegs.PIEIER3.bit.INTx2 = PWM2_INT_ENABLE;// PieCtrlRegs.PIEIER3.bit.INTx3 = PWM3_INT_ENABLE;EINT; // Enable Global interrupt INTMERTM;{asm(" NOP");}}void InitEPwm1Example(){EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;//zhuyiEPwm1Regs.TBPRD = PRD; //载波周期=2*1500TBCLKEPwm1Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;EPwm1Regs.TBCTR = 0x0000;EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up downEPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loadingEPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2; // Clock ratio to SYSCLKOUTEPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV2;EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; // Load registers every ZERO_PRD EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; //??EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;// EPwm1Regs.CMPA.half.CMPA =1000;EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR; // Clear PWM1A on CAUEPwm1Regs.AQCTLA.bit.CAD = AQ_SET;EPwm1Regs.AQCTLB.bit.CAU = AQ_SET; // SET PWM1B on CAU,输出互补波形EPwm1Regs.AQCTLB.bit.CAD = AQ_CLEAR;//set dead band//设置中断EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_PRD; //? Select INT on Zero Prd eventEPwm1Regs.ETSEL.bit.INTEN = PWM1_INT_ENABLE; // Enable INTEPwm1Regs.ETPS.bit.INTPRD = ET_1ST;}/*void InitCmp(){// Uint16 i = 0;if(i{cmp1[i]=(Uint16)(EPwm1Regs.TBPRD*0.25*(1+M*sin((2*i)*PI/N)+1+M*sin((2*i+1)*PI/N)));// cmp2[i]=(Uint16)(EvaRegs.T1PR*0.25*(1+M*sin((2*i)*PI/N+PI*4/3)+1+M*sin((2*i+1)*PI/N+PI*4/3))); // cmp3[i]=(Uint16)(EvaRegs.T1PR*0.25*(1+M*sin((2*i)*PI/N+PI*2/3)+1+M*sin((2*i+1)*PI/N+PI*2/3))); i++;}else{i=0;}}*///⽐较值是按正弦波变化的interrupt void epwm1_timer_isr(void){if(i{// cmp1[i]=(Uint16)(EPwm1Regs.TBPRD*sin((2*i)*PI/N)cmp1[i]=(Uint16)(EPwm1Regs.TBPRD*0.25*(1+M*sin((2*i)*PI/N)+1+M*sin((2*i+1)*PI/N)));// cmp2[i]=(Uint16)(EvaRegs.T1PR*0.25*(1+M*sin((2*i)*PI/N+PI*4/3)+1+M*sin((2*i+1)*PI/N+PI*4/3))); // cmp3[i]=(Uint16)(EvaRegs.T1PR*0.25*(1+M*sin((2*i)*PI/N+PI*2/3)+1+M*sin((2*i+1)*PI/N+PI*2/3))); EPwm1Regs.CMPA.half.CMPA = cmp1[i];i++;}else{i=0;}EPwm1Regs.ETCLR.bit.INT = 1;PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;}。
dsp课程设计正弦
dsp课程设计正弦一、教学目标本章节的教学目标是使学生掌握正弦函数的基本概念、性质和图像,能够运用正弦函数解决实际问题。
具体目标如下:1.知识目标:学生能够准确理解正弦函数的定义,掌握正弦函数的性质,包括周期性、对称性和奇偶性;了解正弦函数的图像特点,能够绘制出正弦函数的图像。
2.技能目标:学生能够运用正弦函数解决简单的三角问题,如求解角度、计算三角函数值等;能够利用正弦函数进行函数图像的变换,如平移、伸缩等。
3.情感态度价值观目标:学生能够积极参与课堂讨论,提出问题并解决问题;通过学习正弦函数,培养对数学的兴趣和好奇心,提高对数学美的欣赏能力。
二、教学内容本章节的教学内容主要包括正弦函数的定义、性质、图像以及应用。
具体安排如下:1.第一课时:正弦函数的定义和性质,包括周期性、对称性和奇偶性。
2.第二课时:正弦函数的图像,包括绘制方法和平移、伸缩等变换。
3.第三课时:正弦函数的应用,包括解决三角问题和实际应用问题。
三、教学方法为了激发学生的学习兴趣和主动性,本章节将采用多种教学方法:1.讲授法:教师通过讲解正弦函数的定义、性质和图像,引导学生理解正弦函数的基本概念。
2.讨论法:学生分组讨论正弦函数的应用问题,培养学生的合作能力和解决问题的能力。
3.案例分析法:教师给出实际应用问题,引导学生运用正弦函数进行解决,提高学生的实际应用能力。
4.实验法:学生进行正弦函数图像的绘制实验,培养学生的实验操作能力和观察能力。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:正弦函数的相关内容,包括定义、性质、图像和应用。
2.参考书:提供额外的学习资料,帮助学生深入理解正弦函数的相关知识。
3.多媒体资料:正弦函数的图像动画演示,帮助学生直观地理解正弦函数的图像特点。
4.实验设备:绘图板、尺子等,用于学生进行正弦函数图像的绘制实验。
五、教学评估本章节的评估方式将包括以下几个方面:1.平时表现:通过观察学生在课堂上的参与度、提问回答和小组讨论的表现来评估学生的学习态度和理解程度。
DSP正弦波实验
正弦波发生器1.实验原理产生连续的波形的方法主要有以下两种方法:1、查表法:把事先将需要输出的数据计算好,存储在DSP中,然后依次输出就可以了。
查表法的优点是速度快,可以产生频率较高的波形,而且不占用DSP的计算时间;查表法的缺点是在于需要占用DSP的内部的存储空间,尤其对采样频率比较大的输出波形,这样,需要占用的内部的空间将更大,而DSP内部的存储空间毕竟有所限制.这使得查表法的应用场合十分有限。
2、计算法:采用计算的方法依次计算数据而后输出,然后再计算而后输出.计算法的优缺点正好和查表法相反。
即:其优点是不占用DSP的存储空间,其缺点是占用DSP的计算时间,使得执行程序的开销变大。
下面是一个采用C编写的信号产生程序以及所必须的配置文件#include 〈stdio。
h>#include "sine。
h”#include<math.h〉//增益控制变量int gain = INITIALGAIN;//声明并初始化一个IO缓冲器BufferContents currentBuffer;// 定义一些函数static void processing(); //处理输入并生成输出static void dataIO(); // 用探测点使用虚拟函数int a[360],i;void main(){puts("SineWave example started.\n”);for(i=0;i〈360;i++)a[i]=0;for(i=0;i〈360;i++)a[i]=(int)(sin(i*3.14159/180)*32767);while(TRUE) // 无限循环{/*使用探针点连接到一个主机文件读取输入数据。
通过连接一个探测点写输出数据到图形中。
*/dataIO();/*应用增益到输入,以获得输出*/processing();}}/**功能:用信号处理转换输入信号产生输出信号*参数:BufferContents的内容结构包含输入/输出数组的大小BUFSIZE *返回值:无。
基于dsp的正弦波发生器课程设计
dsp 正弦波发生器第1章 绪论1.1 DSP 简介数字信号处理(Digital Signal Processing ,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。
20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。
数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法,这些信号由数字序列表示。
在过去的二十多年时间里,信号处理已经在通信等领域得到极为广泛的应用。
图一是数字信号处理系统的简化框图。
此系统先将模拟信号转换为数字信号,经数字信号处理后,再转换成模拟信号输出。
其中抗混叠滤波器的作用是将输入信号x (t)中高于折叠频率的分量滤除,以防止信号频谱的混叠。
随后,信号经采样和A/D 转换后,变成数字信号x(n)。
数字信号处理器对x(n)进行处理,得到输出数字信号y (n),经D/A 转换器变成模拟信号。
此信号经低通滤波器,滤除不需要的高频分量,最后输出平滑的模拟信号y(t)。
图1.1 数字信号处理系统简化框图数字信号处理是以众多学科为理论基础的,它所涉及的范围极其广泛。
例如,在数学领域,微积分、概率统计、随机过程、数值分析等都是数字信号处理的基本工具,与网络理论、信号与系统、控制论、通信理论、故障诊断等也密切相关。
近来新兴的一些学科,如人工智能、模式识别、神经网络等,都与数字信号处理密不可分。
可以说,数字信号处理是把许多经典的理论体系作为自己的理论基础,同时又使自己成为抗混叠 滤波器A/D数字信号处理D/A低通滤波器x(n)y(n) x(t)y(t)一系列新兴学科的理论基础。
1.2课题研究的目的意义科技的进步带动了DSP技术的发展,现代控制设备的性能和结构发生了巨大的变化,我们已经进入了高速发展的信息时代,DSP技术也成为当今科技的主流之一,被广泛地应用于生产的各个领域。
对于本次设计,其目的在于:(1) 了解DSP及DSP控制器的发展过程及其特点。
DSP正弦波——查表法原理
DSP正弦波——查表法原理正弦波的产生方法目前,正弦波的产生方法主要有两种:(1)查表法(2)利用数字振荡器产生正弦波 1)查表法考虑一个模拟正弦波的表达式,并以固定的时间间隔对其进行采样,即,,x(t),sin(2Ft,)Fx[n],sin(2,fn,,)(f,,n,0,1,2,...)Fs1T,其中,为初始相位;F为模拟频率,即需要产生的频率;F为采样频率;即为,ssFs采样间隔。
因此,要想产生一个正弦波,需要在每一个采样间隔计算x[n]的值,并通过数模转换器(DAC,Digital-to-Analog Convector)输出。
通过将x[n]的值以不同的幅度和不同的采样间隔输出,就可以得到任意幅度、任意频率的正弦波或余弦波。
根据上式,x[n]通过计算正弦函数而得。
基于此,可以构造一个查找表,表中所列为余弦函数的值。
考虑到不可能把正弦函数或余弦函数的所有值都放在查找表内,不妨将表的大小初设为517项。
又考虑到正弦函数和余弦函数之间只有一个90?的相移,可以将表的大:0小缩减为257项。
表中的第一个值对应于,最后一个值对应于180?,或者说π。
这样,表中相邻两点之间的间隔为180/256=0.7031250?,即表格中的第1项是cos0?的值,第2项是cos0.7031250?的值,第3项是cos1.406250?的值,以此类推,最后一项是cos180?的值。
利用该表所能构成的波形的相位步进通常是0.7031250?的整数倍。
在采样过程中,上式中的n值在每一个采样间隔递增,从而得到模拟正弦波的采样版本。
但是,如何通过查找余弦表的方法来产生一个任意频率F的正弦波呢,由于在前面构造的余弦函数表中,已经包括了以0.7031250?为间隔的余弦函数值,现在的问题就变成了,2,fn当n递增时,怎样估计出相位的值。
记录波形的初始相位和当前相位,以得到连续相位的正弦波。
如果记录了上一个输出点的相位值,利用正弦波的频率信息,就可以计算出当前输出点的相位值,该相位值是和幅度值相对应的。
DSP正弦波——数字振荡器法原理
数字振荡器的本质是,使用一个IIR (Infinite Impulse Response )滤波器,通过把它的极点放在单位圆上面来产生振荡。
利用正弦波sinx 的指数形式)(21sin jx jx e e jx --= 可以得到正弦序列x(n)的Z 变换为)(21)sin(][jnwT jnwT e e jT n n x --==ϖ X (z )=[]∑∑∞=---∞=---=-0110)()(21])([21n n jwT n jwT n n jnwT jnwT z e z e j z e e j =⎥⎦⎤⎢⎣⎡----jwT jwT e z z e z z j 21=⎥⎦⎤⎢⎣⎡+-+---1)cos(221222wT z z ze z ze z j jwT jwT =1)cos(2)sin(2+-wT z z wT z =B Az z Cz --2 式在|z|>1时成立,且)sin(,1),cos(2wTC B wT A =-==。
这是任何一本数字信号处理教材都会给出的结论。
根据Z 变换的基本原理和性质,序列x[n]及其Z 变换X (z )之间存在一一对应的关系,即对于给定的X (z ),可以通过反Z 变换,唯一地确定x[n]。
因此,产生一个正弦波就等价于利用上式设计一个二阶IIR 滤波器,使其系统传递函数就是正弦序列x[n]的z 变换。
结构的图我暂时不画了,明天再添加系统传递函数为21121)(-----=--=Bz Az Cz B Az z Cz z H 滤波器的极点就是分母02=--B Az z 的根。
24)(cos 4)cos(224222,1-±=+±=wT wT B A A P =)sin()cos(wT j wT ±由上式可以看出,P 1,2是一对复根,其幅值为1,相角为wT 。
幅值为1的极点在单位圆 上,对应一个数字振荡器,其振荡频率由系数A 、B 和C 决定。