网站大量收购独家精品文档,联系QQ:2885784924

DSP课程设计-任意信号发生器的设计.doc

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DSP课程设计 实 验 报 告 任意信号发生器的设计 院(系): 电子信息工程学院 设计人员: 成绩: 工程设计50 报告20 答辩30 总分 评语: 指导教师签字: 日期: 一、设计任务 信号发生器已广泛应用于科学实验、通讯和控制等应用领域中。使用 DSP 和 D/A 转换器可以产生连续的正弦波信号,同样也能产生方波、锯齿波、三角波等其它各种信号波形。本设计要求采用DSP及其D/A转换器产生上述各种信号波形。 二、设计思路 产生连续信号的方法通常有两种:查表法和计算法,查表法不如计算法使用灵活。计算法可以使用泰勒级数展开法进行计算,也可以使用差分方程进行迭代计算或者直接使用三角函数进行计算。计算结果可以边计算边输出,也可以先计算后输出。 正弦函数和余弦函数的泰勒级数数学表达式为: , ,. 如果要计算一个角度ⅹ的正弦和余弦值,可以取其前五项进行近似计算。 或使用下面递归的差分方程进行计算。 y[n]=A*y[n-1]-y[n-2] 其中:A=2cos(x),x=2πF/FS。F—信号频率,FS—D/A转换频率。 利用递推公式计算正弦和余弦值需要已知cos(x)和正弦、余弦的前两个值。 为了简洁明了,我们采用了计算法中的递归差分方程。 三、设计过程 为了将想法转化成程序实现,我们考虑程序的框架如下: 该程序要根据余弦信号的递推公式,给出初始的两个值,以使得程序自己带入公式循环计算下去,即可得到余弦波形。但是,该法求少数点还可以,若产生连续余弦波,则积累误差将会很大,该法就不可取了,所以还要对所求得的点数有限制,不太多就可以了。 为了能在DSK板上和示波器观察到波形,我们还得用C语言编写一段波形输出的程序,这个和我们以前做过的sine 完全类似,不再赘述。 下面的程序就是基于以上的设计思路,使用C语言实现连续余弦波的输出,该程序不但实现了功能,书写格式也非常的规范,易于阅读,流程图如下: _cosx是通过递推函数得到的数组,长度为200。i为控制变量,用以判定所求得的点数是否在定义的范围内。 同理: 方波函数:iN/2,sq[i]=amp*0.5 dacdata[i]=sq[i]*1023+1024; i=N/2,sq[i]=0 dacdata[i]=sq[i]*1023+1024; 三角波函数:i=N/2, sq[i]=amp*0.5*i*2/N dacdata[i]=sq[i]*1023+1024; i=N/2sq[i]=amp*0.5*(2-i*1.0/(N/2));dacdata[i]=sq[i]*1023+1024; 四、程序设计 余弦波产生程序: #includetype.h #includeboard.h #includecodec.h #includemcbsp54.h #includemath.h void delay(s16 period); HANDLE hHandset; s16 data; #define N 200 #define _COSX cos(2*3.14159/N ) #pragma DATA_SECTION(_cosx,data_buf1) float _cosx[N+1]; #pragma DATA_SECTION(dacdata,data_buf2) int dacdata[N]; void main() { s16 amp=1;//余弦信号幅度系数 s16 cnt=2; u16 i=0; /*计算余弦信号的样点值,计算得到的样点值存储在dacdata[]数组中*/ _cosx[0]=1.000; dacdata[0]=4095; _cosx[1]=_COSX; dacdata[1]=_COSX*2047+2048; i=1; while(1) { if(i++N-1) break; _cosx[i]=2*_COSX *_cosx[i-1]-_cosx[i-2]; dacdata[i]=_cosx[i]*2047+2048; } if(brd_init(100))//初始化5402DSK板 return; /*LED发光二极管闪烁两次,表示程序开始正常运行*/ while(cnt--) { brd_led_toggle(BRD_LED0); delay(2000); brd_led_toggle(BRD_LED1); delay(2000); brd_led_toggle(BRD_LED2); delay(2000); } /* 获取Codec的句柄 */ hHandset = codec_open(HANDSET_CODEC);

文档评论(0)

文档分享 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档