ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:474.28KB ,
资源ID:8744105      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8744105.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于DSP的任意信号发生器设计汇总.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于DSP的任意信号发生器设计汇总.docx

1、基于DSP的任意信号发生器设计汇总数字信号处理(DSP)综合设计性实验报告学 院:电 子 信 息 工 程 学 院班 级: 通信0708*学 生: 原凌云 07211253 张丽康 07211256 北京交通大学电工电子教学基地2004年12月28日一、设计任务 3二、实验目的 3三、设计内容3四、实验原理4五、程序设计61、程序源代码 2、实验截图和结果六、实验总结22七、参考资料23一、设计任务书 信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。各种波形曲线均可以用三角函数方程式来表示。能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路被称为函数信号发生器

2、。函数信号发生器在电路实验和设备检测中具有十分广泛的用途。信号发生器在现代工程中应用非常广泛。在实际中常需要产生一些特殊波形,用于仿真实际信号的波形,以检测和调试测量装置。 使用 DSP 和 D/A 转换器可以产生连续的正弦波信号,同样也能产生方波、锯齿波、三角波等其它各种信号波形。本设计要求采用DSP及其D/A转换器产生上述各种信号波形。二、实验目的(1)了解产生信号的两种方法及各自的优缺点。(2)掌握使用DSP产生正弦波的原理和算法,进而掌握一般信号产生的原理和方法。(3)掌握5402DSK CODECC(A/D、D/A)的工作原理和初始化过程。(4)掌握使用指针访问片上ROM中正弦查找表

3、的方法。三、设计内容 使用DSP产生3004000HZ的正弦信号,要求使用查表法,测量产生的信号波形的频率和幅度,并且频率可变、幅度可变、直流分量可变。用软件CCS5000编程实现,并硬件(DSK板或示波器)连接进行功能演示。 使用计算法产生余弦波分量。发挥部分: (1)使用DSP产生3004000HZ的方波、锯齿波和三角波。 (2)使用现有程序,实现不改变源程序,频率和幅度自动可调。四、实验原理产生连续信号的方法通常有两种:查表法和计算法,查表法不如计算法使用灵活。计算法可以使用泰勒级数展开法进行计算,也可以使用差分方程进行迭代计算或者直接使用三角函数进行计算。计算结果可以边计算边输出,也可

4、以先计算后输出。 正弦函数和余弦函数的泰勒级数数学表达式为:,.如果要计算一个角度的正弦和余弦值,可以取其前五项进行近似计算。 或使用下面递归的差分方程进行计算。yn=A*yn-1-yn-2 其中:A=2cos(x),x=2F/FS。F信号频率,FSD/A转换频率。利用递推公式计算正弦和余弦值需要已知cos(x)和正弦、余弦的前两个值。计算时所需的计算量小,但如果用来产生连续的正弦和余弦信号,则累积误差太大。要得到精确的计算结果,可以使用泰勒级数展开法进行计算,当然计算时所需的计算量很大。在实际应用时可以根据需要选择相应的算法。要产生一个正弦信号,首先要算出一个周期内各样点的值,因为sin(x

5、)的值总是小于1的小数,而5402 DSP是16位的定点处理器,所以要将其乘以215,变为Q15的数据格式,才能够在DSP中送到D/A转换器进行处理。优缺点的比较: 查表法,即事先将要输出的数据计算好,存储在DSP的内部RAM中,然后依次循环输出,从而才生波形。这种方法的优点在于其速度快,可以产生频率很高的波形,而且不占用DSP的计算时间,它的缺点是需要占用DSP的内存空间,尤其是对采样频率比较大的输出波形,所需要的内部空间很大,所以这种方法用于对精度和频率要求不高的场合。第二个方法是计算法,即采用计算的方法依次计算数据然后输出。计算法的优缺点正好和查表法相反。其优点是不占用DSP的存储空间,

6、可以根据信息随时间改变或调整输出波形的周期波形;其缺点是占用DSP的计算时间,使得执行程序的开销大 在实验中我们将采用查表法来实现正弦波,计算法产生余弦波。 余弦法的递推公式:cos(nx)=2cosxcos(n-1)x-cos(n-2)x 其中,cosx=cos(2*pi/N)=cos(2*pi*Fs/F),n=0时cos(nx)=1,n=1时cos(nx)=cosx,令N=256,Fs=16000,F=1000 调幅调频:我们将使用下面的一个界面 来实现频率和幅度的连续可调,但因为此界面和CCS运行界面不能同时存在,所以我们需要脱离CCS,而将程序烧至板子,然后在虚拟示波器上面观察波形的变

7、化。 频率、幅度及直流分量可调也可以通过改变源程序来实现。五、程序设计基本部分:【1】查表法实现正弦波的程序:/*正弦信号产生程序1*/#include #include #include #include #include void delay(s16 period);HANDLE hHandset;s16 data;/*/* 片上ROM中的正弦函数查表法 */*/s16 SINE_TABLE= 0x00000,0x00324,0x00647,0x0096A,0x00C8B,0x00FAB,0x012C7,0x015E1,0x018F8,0x01C0B,0x01F19,0x02223,0x0

8、2527,0x02826,0x02B1E,0x02E10,0x030FB,0x033DE,0x036B9, 0x0398C,0x03C56,0x03F16,0x041CD,0x0447A,0x0471C,0x049B3,0x04C3F,0x04EBF,0x05133,0x0539A,0x055F4,0x05842,0x05A81,0x05CB3,0x05ED6,0x060EB,0x062F1, 0x064E7,0x066CE,0x068A5,0x06A6C,0x06C23,0x06DC9,0x06F5E,0x070E1,0x07254,0x073B5,0x07503,0x07640,0x077

9、6B,0x07883,0x07989,0x07A7C,0x07B5C,0x07C29, 0x07CE2,0x07D89,0x07E1C,0x07E9C,0x07F08,0x07F61,0x07FA6,0x07FD7,0x07FF5,0x07FFE,0x07FF5,0x07FD7,0x07FA6,0x07F61,0x07F08,0x07E9C,0x07E1C,0x07D89, 0x07CE2,0x07C29,0x07B5C,0x07A7C,0x07989,0x07883,0x0776B,0x07640,0x07503,0x073B5,0x07254,0x070E1,0x06F5E,0x06DC9

10、,0x06C23,0x06A6C,0x068A5,0x066CE, 0x064E7,0x062F1,0x060EB,0x05ED6,0x05CB3,0x05A81,0x05842,0x055F5,0x0539A,0x05133,0x04EBF,0x04C3F,0x049B3,0x0471C,0x0447A,0x041CD,0x03F16,0x03C56, 0x0398C,0x036B9,0x033DE,0x030FB,0x02E10,0x02B1E,0x02826,0x02527,0x02223,0x01F19,0x01C0B,0x018F8,0x015E1,0x012C7,0x00FAB,0

11、x00C8B,0x0096A,0x00647, 0x00324,0x00000,0x0FCDC,0x0F9B9,0x0F696,0x0F375,0x0F056,0x0ED39,0x0EA1F,0x0E708,0x0E3F5,0x0E0E7,0x0DDDD,0x0DAD9,0x0D7DA,0x0D4E2,0x0D1F0,0x0CF05, 0x0CC22,0x0C947,0x0C647,0x0C3AA,0x0C0EA,0x0BE33,0x0BB86,0x0B8E4,0x0B64D,0x0B3C1,0x0B141,0x0AECD,0x0AC66,0x0AA0C,0x0A7BE,0x0A57F,0x0

12、A34D,0x0A12A, 0x09F15,0x09D0F,0x09B19,0x09932,0x0975B,0x09594,0x093DD,0x09237,0x090A2,0x08F1F,0x08DAC,0x08C4C,0x08AFD,0x089C0,0x08895,0x0877D,0x08677,0x08584, 0x084A4,0x083D8,0x0831E,0x08277,0x081E4,0x08164,0x080F8,0x0809F,0x0805A,0x08029,0x0800B,0x08002,0x0800B,0x08029,0x0805A,0x0809F,0x080F8,0x081

13、64, 0x081E4,0x08277,0x0831E,0x083D8,0x084A4,0x08584,0x08677,0x0877D,0x08895,0x089C0,0x08AFD,0x08C4B,0x08DAC,0x08F1F,0x090A2,0x09237,0x093DD,0x09594, 0x0975B,0x09932,0x09B19,0x09D0F,0x09F15,0x0A12A,0x0A34D,0x0A57F,0x0A7BE,0x0AA0B,0x0AC66,0x0AECD,0x0B141,0x0B3C1,0x0B64D,0x0B8E4,0x0BB86,0x0BE33, 0x0C0E

14、A,0x0C3AA,0x0C674,0x0C947,0x0CC22,0x0CF05,0x0D1F0,0x0D4E1,0x0D7DA,0x0DAD9,0x0DDDD,0x0E0E7,0x0E3F5,0x0E708,0x0EA1E,0x0ED38,0x0F055,0x0F375, 0x0F696,0x0F9B9,0x0FCDC,0x00000 ; /*/* 主程序 */*/void main() s16 amp=1; /输出的正弦信号的幅度系数,可变 s16 cnt=2; u16 i=0; if(brd_init(100) /初始化5402DSK板 return; /*LED发光二极管闪烁两次,表

15、示程序开始正常运行*/ while(cnt-) brd_led_toggle(BRD_LED0); delay(1000); brd_led_toggle(BRD_LED1); delay(1000); brd_led_toggle(BRD_LED2); delay(1000); /*获得Codec(D/A转换器)的句柄*/ hHandset=codec_open(HANDSET_CODEC); /*初始化D/A转换器*/ codec_dac_mode(hHandset,CODEC_DAC_15BIT); /DAC设置为15比特模式 codec_aout_gain(hHandset,CODEC

16、_AOUT_MINUS_12dB); /设置模拟输出增益为-6dB codec_sample_rate(hHandset,SR_16000); /D/A转换速率为16kHz /*正弦信号发生程序*/ while(1) /*D/A转换器是否准备好*/ while(!MCBSP_XRDY(HANDSET_CODEC); /*将信号样点输出到D/A转换器*/ *(volatile u16*)DXR1_ADDR(HANDSET_CODEC)=amp*SINE_TABLEi; i=i+100; /此时产生的正弦信号频率为6250Hz,每个周期的样点N=256/100=2.56 i+=0x00ff; /修

17、正样点指针 /*将输出信号样点存入数据输出缓冲区,可使用图形观察窗口观察输出信号波形*/ void delay(s16 period) int i,j; for(i=0;iperiod;i+) for(j=0;j1;j+); 实验成果截图:/*正弦信号产生程序2*/#include #include #include #include #include #define N 256#define pi 3.1415927#define pi2 2*pi#define F0 1000#define Fs 16000 /Sampling frequency#pragma DATA_SECTION(_

18、sinx,data_buf1)double _sinx256;#pragma DATA_SECTION(dacdata,data_buf2)int dacdata256,outbuffer256;int amp=1;void delay(int);void main(void)double t=0, dt;unsigned int i=0; HANDLE hHandset;int cnt=2;if(brd_init(100) return; /初始化5402DSK板while(cnt-) brd_led_toggle(BRD_LED0); /切换LED指示灯0的显示状态 delay(1000)

19、; brd_led_toggle(BRD_LED1); /切换LED指示灯1的显示状态 delay(1000); brd_led_toggle(BRD_LED2); /切换LED指示灯2的显示状态 delay(1000); dt=pi2*F0/Fs;for(i=0;iN;i+) _sinxi=(sin(t);-查表法实现正弦波 dacdatai=_sinxi*2047; outbufferi=amp*dacdatai; t=t+dt;hHandset = codec_open(HANDSET_CODEC); / 获取设置codec的句柄codec_dac_mode(hHandset, CODE

20、C_DAC_15BIT); / 15bit工作模式codec_aout_gain(hHandset, CODEC_AOUT_MINUS_6dB); /模拟输出增益为-6dBcodec_sample_rate(hHandset,SR_16000); / 转换速率为16KHz while(1) while (!MCBSP_XRDY(HANDSET_CODEC) ) ; /如果D/A未准备好,则等待 *(volatile u16*)DXR1_ADDR(HANDSET_CODEC) =outbufferi+; / 将数据写入D/A转换器 void delay(s16 period) int i,j;

21、for(i=0; iperiod; i+) for(j=0;j1;j+); 实验成果截图:【2】计算法实现余弦波的程序:/*余弦信号产生程序*/#include#include#include#includevoid delay(s16 period);HANDLE hHandset;s16 data;#define _COSX 0.999390827#pragma DATA_SECTION(_cosx,data_buf1)float _cosx200;#pragma DATA_SECTION(dacdata,data_buf2)int dacdata180;void main(void) s

22、16 cnt=2; u16 i=0; /*计算余弦信号的样点值,计算得到的样点存储在dacdata数组中*/_cosx0=1.000;dacdata0=4095;_cosx1=_COSX;dacdata1=_COSX*2047+2048; i=2; while(1) if(i+179) break; _cosxi=2*_COSX*_cosxi-1-_cosxi-2; dacdatai=_cosxi*2047+2048; if(brd_init(100) /初始化5402DSK板 return; /*LED发光二极管闪烁两次,表示程序开始正常运行*/ while(cnt-) brd_led_to

23、ggle(BRD_LED0); delay(1000); brd_led_toggle(BRD_LED1); delay(1000); brd_led_toggle(BRD_LED2); delay(1000); /*获得Codec(D/A转换器)的句柄*/ hHandset=codec_open(HANDSET_CODEC); /*初始化D/A转换器*/ codec_dac_mode(hHandset,CODEC_DAC_15BIT); /DAC设置为15比特模式 codec_aout_gain(hHandset,CODEC_AOUT_MINUS_6dB); /设置模拟输出增益为-6dB c

24、odec_sample_rate(hHandset,SR_16000); /D/A转换速率为16kHz i=0; while(1) if(i179) i=0; /*D/A转换器是否准备好*/ while(!MCBSP_XRDY(HANDSET_CODEC); /*将dacdatai输出到D/A*/ *(volatile u16*)DXR1_ADDR(HANDSET_CODEC)=dacdatai+; void delay(s16 period) int i,j; for(i=0;iperiod;i+) for(j=0;j1;j+); 实验成果截图:发挥部分(1):【1】锯齿波:/*锯齿波信号产

25、生程序*/#include #include #include #include #include #define N 256#define pi 3.1415927#define pi2 2*pi#define F0 1000 /Signal frequency#define Fs 16000 /Sampling frequency#pragma DATA_SECTION(saw,data_buf1)double sawN;#pragma DATA_SECTION(dacdata,data_buf2)int dacdataN,outbufferN;int amp=1;unsigned int

26、 L=0;void delay(int);void main(void)double t=0, dt;unsigned int i=0;HANDLE hHandset;int cnt=2;brd_init(100);while(cnt-) brd_led_toggle(BRD_LED0); /切换LED指示灯0的显示状态 delay(1000); brd_led_toggle(BRD_LED1); /切换LED指示灯1的显示状态 delay(1000); brd_led_toggle(BRD_LED2); /切换LED指示灯2的显示状态 delay(1000); dt=8*pi*F0/Fs;f

27、or(t=0,i=0;i=N/4;i+,t+=dt) sawi=t; sawi+N/4=0;for(t=0,i=N/2;i3*N/4;i+,t+=dt) sawi=t; sawN-i+N/2=0; for(i=0;iN;i+) dacdatai=sawi*10; outbufferi=amp*dacdatai;hHandset = codec_open(HANDSET_CODEC);/ 获取设置codec的句柄codec_dac_mode(hHandset, CODEC_DAC_15BIT); / 15+1bit工作模式codec_aout_gain(hHandset, CODEC_AOUT_MINUS_6dB);/模拟输出增益为-6dBcodec_sample_rate(hHandset,SR_16000); / 转换速率为16KHz while(1) while (!MCBSP_XRDY(HANDSET_CODEC) ) ; /如果D/A未准

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1