虚拟信号发生器数字信号处理课设汇编.docx
《虚拟信号发生器数字信号处理课设汇编.docx》由会员分享,可在线阅读,更多相关《虚拟信号发生器数字信号处理课设汇编.docx(15页珍藏版)》请在冰点文库上搜索。
虚拟信号发生器数字信号处理课设汇编
燕山大学
课程设计说明书
题目:
虚拟信号发生器的设计
学院(系):
电气工程学院
年级专业:
自动化仪表
学号:
100103020002
学生姓名:
王思琪
指导教师:
谢平杜义浩
教师职称:
教授讲师
课程名称:
“单片机原理及应用——数字信号处理”课程设计
基层教学单位:
自动化仪表系指导教师:
张淑清谢平
学号
100103020002
学生姓名
王思琪
(专业)班级
仪表一班
设计题目
虚拟信号发生器的设计
设
计
技
术
参
数
1.利用Matlab设计任意波形虚拟信号发生器。
2.在PC机显示不同信号波形的同时,利用串行口控制单片机系统的LED显示相应波形参数(如幅度、频率、相位和能量等)。
3.扩展:
也可产生其他信号,或驱动其他外设并显示及参数。
设
计
要
求
要求至少输出五种以上参数可调的信号(如:
方波,三角波,正弦波、高斯白噪声等),并实现相应信号的频谱分析,对比不同信号的时域波形和频谱特性。
(其中可调参数包括幅值、相位、频率、采样频率等)。
设计相应的软件分析界面。
工
作
量
软件编程与硬件调试相结合,绘制设计流程图,编制相应软件界面,实现单片机控制与信号处理任务的综合应用
参
考
资
料
1)《微型计算机控制系统》赖寿宏,机械工业出版社(教材)
2)《单片机及应用》李大友,高等教育出版社(教材)
3)《信号处理原理及应用》谢平等机械工业出版社(教材)
4)《Matlab程序设计及其在信号处理中的应用》聂祥飞等西南交通大学出版社
5)自选其他有关资料
周次
第一周
第二周
应
完
成
内
容
熟悉伟福单片机编程环境,调试单片机各基本功能模块;熟悉matlab信号处理工具箱,信号处理系统基本功能模块学习和调试
单片机系统与信号处理系统综合进行硬件调试,
撰写课程设计报告
指导教
师签字
基层教学单位主任签字
说明:
1、此表一式四份,系、指导教师、学生各一份,报送院教务科一份。
2、学生那份任务书要求装订到课程设计报告前面。
电气工程学院教务科
目录(信号处理要求)
第一章摘要……………………………………………3
第二章总体设计方案…………………………………4
第三章GUIDE预备理论…………………………………5
第四章信号发生器基本原理…………………………6
4.1含变量的波形函数的生成…………………………6
4.2时域向频域的转换…………………………………7
第5章GUIDE源程序的设计…………………………9
第6章程序显示结果与调试…………………………14
第七章心得及总结……………………………………15
参考文献………………………………………………16附录……………………………………………………16
第1章摘要
信号发生器是指产生所需参数的电测试信号的仪器。
按信号波形可分为正弦信号、函数(波形)信号、脉冲信号和随机信号发生器等四大类。
信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。
各种波形曲线均可以用三角函数方程式来表示。
能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路被称为函数信号发生器。
在有些实验测量中,我们需要用到信号发生器,传统的信号发生器其功能完全靠硬件实现,功能单一,而且费用较高,一个传统实验室很难拥有多类信号发生器,然而基于虚拟仪器技术的信号发生器则能够实现这一要求。
此报告论述了一个基于虚拟仪器技术的任意波形发生器模块的实现。
第二章总体设计方案
首先我们进行的是单片机部分的设计,课设的前两天,熟悉了单片机个模块的设计例程,而后我们挑选了合适的例程为我们的所需要的信号发生器模块所用。
在这之中,我们用到了273输出模块,led显示模块,数码管显示模块,蜂鸣器模块,16*16点阵显示模块,串行通信模块。
在精心的学习之后,我们成功地完成了单片机部分的初步制作。
此后,我们开始了第三天的数字信号软件方面的制作,在guide设计教程及学长的指导下,我们设计了一个简洁方便的操作界面,并根据相应的按键功能编写程序,先收集了5种波形函数,而后编写了与之对应的变量函数。
于是我们便能将可变参数加入到函数中去,进行调试了。
其后,我们设计了傅里叶转换函数,将波形一一转换为频域波形,最后,我们在学长的指导下完成了串行发送的按钮设计。
信号处理部分也制作完毕。
最后是单片机部分与信号部分的连接调试,我们将matlab发送的波形参数与单片机的数码管,led,蜂鸣器的信号同步。
成功的做出了两者相结合的虚拟信号发生器。
第三章GUIDE预备理论
本实验内容主要是阐述虚拟信号发生器的前面板和程序框图的设计。
设计完的信号发生器的功能包括能够产生正弦波、方波、三角波、锯齿波高斯白噪声信号波形;波形的频率、幅值、相位、及采样频率等参数由前面板控件实时可调。
虚拟信号发生器是基于MATLAB仿真软件进行编程的,它使用的是图形化编程语言。
要完成一个虚拟信号发生器首先要进行GUI面板的设计,根据信号发生器所要实现的功能,在控件选板中选择相应的控件,放在前面板相应的位置上,摆放要使前面板看起来比较协调。
图形用户界面概念:
图形用户界面或图形用户接口(GraphicalUserInterface,GUI)是指采用图形方式显示的计算机操作环境用户接口。
与早期计算机使用的命令行界面相比,图形界面对于用户来说更为简便易用。
GUIDE是Matlab提供的图形用户界面开发环境,提供了一系列用于创建图形用户界面的工具,从而简化界面布局和编程工作。
设计GUI程序时首先要分解任务,把待设计任务分割成几个大的模块,然后把大的模块再分解为一系列的功能,甚至可以分解到要用哪些函数的程度;然后是寻找例程,参考例程可以避免重复前人做过的工作。
我们在学长的帮助下获得了部分波形及将波形从时域傅里叶转换为频域波形的函数,以及串行口发送数据的模板,得以顺利的将函数套用在GUI界面下,并顺利的与单片机相连。
第四章信号发生器基本原理
4.1含变量的波形函数的生成
本次课设中我们设方波信号:
y=a*square(2*pi*f*t+4*p/f,50)
其中a为幅值,f为频率,t为时间,p为相位,生成类似如下波形
其中a,f,p和采样频率e分别有4个滑块控制,如下
其变换值显示在图中方框中。
4.2时域向频域的转换
若将该方波变换为频域波形,则使用如下傅里叶函数
Nf=length(y);
f=0:
fs/(Nf-1):
fs;
x=abs(fft(y));
波形变换如下:
同理,本次课设的其他4中波形也可如此生成:
正弦波:
y=a*sin(2*pi*f*t+p*2*pi)
锯齿波:
y=a*sawtooth(pi*f*t+4*p/f,1)
三角波:
y=a*sawtooth(pi*f*t+4*p/f,0.5)
白噪声:
y=a*randn(size(t))
他们的波形如下
第五章GUIDE源程序的设计
本次实验中,我们将界面程序的设计分为多块,并小组合作完成:
1.按键初始化程序略;
对滑块部分赋值的程序设计如下:
j=get(handles.slider1,'value');
k=get(handles.slider2,'value');
l=get(handles.slider3,'value');
m=get(handles.slider4,'value');
再由滑块对文本框赋值:
set(handles.edit1,'string',num2str(j));
set(handles.edit2,'string',num2str(k));
set(handles.edit3,'string',num2str(l));
set(handles.edit4,'string',num2str(m));
再将波形函数变量赋值并显示在波形框内
a=str2num(get(handles.edit1,'string'));
f=str2num(get(handles.edit2,'string'));
p=str2num(get(handles.edit3,'string'));
e=str2num(get(handles.edit4,'string'));
fs=e;
t=0:
1/fs:
30;
t=0:
1/fs:
30;
y=a*sin(2*pi*f*t+p*2*pi);
set(gcf,'CurrentAxes',handles.axes2);
plot(t,y);
axis([0,8*pi,-5.2,5.2]);
gridon;
之后在进行傅里叶变换转化为频域图形:
Nf=length(y);
f=0:
fs/(Nf-1):
fs;%频谱横坐标
x=abs(fft(y));
set(gcf,'CurrentAxes',handles.axes1);
plot(f,x);
title('Frequencycontentofy')
xlabel('frequency(Hz)');
以上为正弦波形的设计同理可得其他波形
波形选择函数:
while1
ifp1==1
t=0:
1/e:
8*pi;
y=a*sin(2*pi*f*t+p*2*pi);
plot(t,y);
gridon;
axis([0,8*pi,-5.2,5.2]);
end;
ifp2==1
t=0:
1/e:
6;
y=a*square(2*pi*f*t+4*p/f,50);
plot(t,y);
gridon;
axis([0,6,-5.2,5.2]);
end;
ifp3==1
t=0:
1/e:
20;
y=a*sawtooth(pi*f*t+4*p/f,1);
plot(t,y);
gridon;
axis([0,20,-5.2,5.2]);
end;
ifp4==1
t=0:
1/e:
20;
y=a*sawtooth(pi*f*t+4*p/f,0.5);
plot(t,y);
gridon;
axis([0,20,-5.2,5.2]);
end;
ifp5==1
t=1:
1/e:
25;
y=a*randn(size(t));
plot(t,y);
gridon;
end;
串行发送数据的函数设计
functionpushbutton10_Callback(hObject,eventdata,handles)
ss=serial('COM1');
ss.BaudRate=2400;
ss.DataBits=8;
ss.Parity='none';
ss.StopBits=1;
ss.TimeOut=60;
ss.DataTerminalReady='off';
ss.RequestToSend='off';
ss.FlowControl='none';
ss.InputBufferSize=1000;
fopen(ss);
清除数据按钮设计:
set(handles.slider1,'value',0);
set(handles.slider2,'value',0);
set(handles.slider3,'value',0);
set(handles.slider4,'value',0);
set(handles.edit1,'string',0);
set(handles.edit2,'string',0);
set(handles.edit3,'string',0);
set(handles.edit4,'string',0);
关闭按钮:
functionpushbutton9_Callback(hObject,eventdata,handles)
close;
我们还添加了若干工具栏设计,但是个别按钮功能未添加完整,不具备实用性
第六章程序显示结果与调试
完成guide界面后,我们连接了串行口并发送了数据。
但因为硬件限制,为发送数码管我们将发送的数据都做了取整处理,发送的均为个位整数,并成功与单片机协同合作完成了参数在单片机上的正确显示。
至此信号处理部分完成。
最终调试结果如下:
第七章心得与总结
经过长达一星期不间断的单片机及信号处理的课程设计,我再一次加强了对单片机硬件和信号处理Matlab的软件的认识,Matlab这样的软件强大的开发功能与灵活的编程手段勾起了我对信号处理浓厚的兴趣,并最终实现了虚拟信号发生器的设计,可以看出虚拟仪器给用户提供了一个充分发挥自己的才能和想象力的空间,可根据用户自己的设想及要求,通过编程来设计,组建自己的仪器系统,他的灵活、开放,技术更新周期短,可随着计算机技术的发展和用户的需求进行仪器与系统的升级,在性能维护和灵活组态等方面有着传统仪器无法比拟的优点。
通过此次课程设计,我不仅把所学知识的融会贯通,而且丰富了我的阅历。
同时,在查找资料的过程中也了解了许多课外知识,开拓了视野,认识了将来数字图像处理的发展方向,使自己在专业方面和动手能力方面都得到了加强。
在咨询学长的同时,我学会了虚心请教师长,来完善我的课题能力,如果没有学长每天的答疑解惑,我们不可能编出对于自己来说前所未有复杂的单片机及guide程序。
与此同时,在与我所在的小组成员的合作中,我感受到了团队行动的力量,我们合理的分工推动了大家一起竞争的欲望,最终让小组迅速的完成了老师的任务,看来科研之中的竞争与合作真的能够发挥事半功倍的作用!
参考文献
1)《信号处理原理及应用》谢平等机械工业出版社(教材)
2)《Matlab程序设计及其在信号处理中的应用》聂祥飞等西南交通大学出版社
燕山大学专业综合训练评审意见表
指导教师评语:
成绩:
指导教师:
2013年7月4日
答辩小组评语:
成绩:
评阅人:
2013年7月4日
课程设计总成绩:
答辩小组成员签字:
2013年7月4日