数字信号课设虚拟信号发生器.docx

上传人:b****5 文档编号:8529397 上传时间:2023-01-31 格式:DOCX 页数:25 大小:207.86KB
下载 相关 举报
数字信号课设虚拟信号发生器.docx_第1页
第1页 / 共25页
数字信号课设虚拟信号发生器.docx_第2页
第2页 / 共25页
数字信号课设虚拟信号发生器.docx_第3页
第3页 / 共25页
数字信号课设虚拟信号发生器.docx_第4页
第4页 / 共25页
数字信号课设虚拟信号发生器.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

数字信号课设虚拟信号发生器.docx

《数字信号课设虚拟信号发生器.docx》由会员分享,可在线阅读,更多相关《数字信号课设虚拟信号发生器.docx(25页珍藏版)》请在冰豆网上搜索。

数字信号课设虚拟信号发生器.docx

数字信号课设虚拟信号发生器

燕山大学

课程设计说明书

题目:

虚拟信号发生器的设计

 

学院(系):

电气工程学院

年级专业:

09级仪表一班

学号:

学生姓名:

指导教师:

教师职称:

 

燕山大学课程设计(论文)任务书

院(系):

电气工程学院基层教学单位:

自动化仪表系

学号

学生姓名

专业(班级)

09级仪表一班

设计题目

虚拟信号发生器的设计

要求所设计的虚拟信号发生器至少能够输出五种以上参数(如频率、幅值和相位)可调的信号,如正弦波、方波、三角波、锯齿波和sinc波等。

利用Matlab实现任意波形虚拟信号发生器。

要求至少输出五种以上参数可调的信号(如:

方波,三角波,正弦波、高斯白噪声等),并实现相应信号的频谱分析,对比不同信号的时域波形和频谱特性。

其中可调参数包括幅值、相位、频率、采样频率等。

6月18日,查找与课程设计相关的资料

6月19日到6月20日,用Matlab编写程序并调试

6月21日,编写课程设计说明书

1.谢平、王娜、林洪斌等主编,信号处理原理及应用。

北京:

机械工业出版社,2008.10

2.宋爱国、刘文波等主编,测试信号分析与处理。

北京:

机械工业出版社,2005,9

3.聂祥飞、王海宝、谭泽富主编,Matlab程序设计及其在信号处理中的应用。

成都:

西南交通大学出版社,2005

4.吴大正、高西全等主编,Matlab及在电子信息课程中的应用。

北京:

电子工业出版社,2006.3

5.李培芳、孙晖、李江主编,信号与系统分析基础。

北京:

清华大学出版社,2006.12

指导教师签字

谢平吴晓光

基层教学单位主任签字

谢平

说明:

此表一式四份,学生、指导教师、基层教学单位、系部各一份。

年月日

燕山大学课程设计评审意见表

指导教师评语:

成绩:

指导教师:

年月日

答辩小组评语:

成绩:

组长:

年月日

课程设计总成绩:

答辩小组成员签字:

 

年月日

摘要

数字信号发生器是基于软硬件实现的一种波形发生仪器。

在工程实践中需要检测和分析的各种复杂信号均可分解成各个简单信号之和,而这些简单信号皆可由数字信号发生器模拟产生,因此它在工程分析和实验教学有着广泛的应用。

MATLAB是一个数据分析和处理功能十分强大的工程实用软件,他的数据采集工具箱为实现数据的输入和输出提供了十分方便的函数和命令,在数字信号处理方面方便实用。

本文介绍了使用MATLAB建立一个简单数字信号发生器的基本流程,并详细叙述了简单波形(正弦波、方波、三角波、锯齿波、冲击串波、衰减波)信号的具体实现方法。

 

目录

第1章绪论……………………………………………………………2

第2章课程设计概述和原理……………………………………7

2.1课程设计概述…………………………………………3

2.2课程设计原理…………………………………………5

第3章虚拟信号在matlab中的实现……………………………3

3.1正弦信号的实现…………………………………………………

3.2方波信号的实现…………………………………………5

3.3三角信号的实现…………………………………………………7

3.4锯齿信号的实现…………………………………………………

3.5sinc信号的实现…………………………………………………

3.6运行结果分析…………………………………………………

第4章学习心得…………………………………………………………18

参考文献…………………………………………………………………19

程序清单…………………………………………………………………20

 

第1章绪论

随着计算机软硬件技术的发展,越来越多现实物品的功能能够由计算机实现。

信号发生器原本是模拟电子技术发展的产物,到后来的数字信号发生器也是通过硬件实现的,本文将给出通过计算机软件实现的数字信号发生器。

信号发生器是一种常用的信号源,广泛应用于电子技术实验、自控系统和科学研究等领域。

传统的台式仪器如任意函数发生器等加工工艺复杂、价格高、仪器面板单调、数据存储、处理不方便。

以Matlab和LabVlEW为代表的软件的出现,轻松地用虚拟仪器技术解决了这些问题。

Matlab是一个数据分析和处理功能十分强大的工程实用软件,他的数据采集工具箱(dataacquisitiontoolbox)为实现数据的输入和输出提供了十分方便的函数和命令,利用这些函数和命令可以很容易地实现对外部物理世界的信号输出和输入。

根据声卡输出信号的原理,采用Matlab软件编程,可以方便地输出所需要的方波、正弦波、三角波、锯齿波、冲击串波、抽样波等多种信号,有效地实现信号发生器的基本功能。

第2章课程设计概述和原理

2.1课程设计概述

根据本次课程设计的题目要求可知该课题需要用到MATLAB的图形用户界面(GraphicalUseInterface,GUI)是指由按钮、列表框、编辑框等用户界面空间构成的应用程序界面。

MATLAB提供了功能强大的集成GUI开发环境GUIDE。

在编程时只需将按键和现实部分放到指定区域内,对他们进行编程即可,完成后便可得到良好的人机界面。

因此只需将几组波形程序设计好即可。

在此要设计的数字信号有方波、三角波、锯齿波、冲击串波、抽样波,以及后来老师要求的衰减信号。

其中,这六种波形都可以利用MATLAB提供的函数实现,并根据输入的幅值、相位、频率等信息进行调整。

脉冲信号由自己编写程序实现,并以定义的时间节点控制脉冲出现的时刻。

2.2课程设计原理

1.GUI设计模板

在MATLAB主窗口中,选择File菜单中的New菜单项,再选择其中的GUI命令,就会显示图形用户界面的设计模板。

MATLAB为GUI设计一共准备了4种模板,分别是BlankGUI(默认)、GUIwithUicontrols(带控件对象的GUI模板)、GUIwithAxesandMenu(带坐标轴与菜单的GUI模板)与ModalQuestionDialog(带模式问话对话框的GUI模板)。

当用户选择不同的模板时,在GUI设计模板界面的右边就会显示出与该模板对应的GUI图形。

2.GUI设计窗口

在GUI设计模板中选中一个模板,然后单击OK按钮,就会显示GUI设计窗口。

选择不同的GUI设计模式时,在GUI设计窗口中显示的结果是不一样的。

GUI设计窗口由菜单栏、工具栏、控件工具栏以及图形对象设计区等部分组成。

GUI设计窗口的菜单栏有File、Edit、View、Layout、Tools和Help6个菜单项,使用其中的命令可以完成图形用户界面的设计操作。

3.GUI设计窗口的基本操作

在GUI设计窗口创建图形对象后,通过双击该对象,就会显示该对象的属性编辑器。

例如,创建一个PushButton对象,并设计该对象的属性值。

4.GUI设计编程

在GUI设计窗口创建好图形对象并进行良好的布局后,就可以对相应的对象或控件进行编程实现所需要的功能。

通常我们主要在所需要的控件的回调函数中编写相应的程序功能代码,以便让它去完成我们需要的功能。

5.运行界面

在完成上述几步后,我们就可以点击设计窗口中的运行,显示界面运行后的结果,相应的也可以点击某些对象(如按钮)测试相应的功能。

如图1所示,是运行之后的设计好的软件界面。

在软件界面中,我们可以进行波形选择,同时可以通过拉动滚动条调整一些波形的参数,然后点击信号输出按钮,即可在界面中的第一个坐标轴中看到相应的波形,还可以在第二个坐标轴中看到对信号进行频谱分析后的频谱图。

当点击系统输出按钮后系统输出相应波形,可以重新进行选择,点击系统退出按钮,则整个系统界面退出。

图1虚拟信号发生器系统软件界面

信号发生器的功能:

(1)发出正弦波、三角波、方波、锯齿波,并调整其频率、幅度、相位,对方波能调整其占空比;

(2)发出公式导出的波形;

(3)能够设置数据缓冲区的大小;

(4)能显示波形。

第3章虚拟信号在matlab中的实现

3.1正弦信号的实现

方波的产生应用了sin函数,其调用方式为:

y=sin(t)。

产生指定周期,指定峰值的正弦函数,其具体实现过程为:

t=0:

pi/360:

8*pi;%定义抽样间隔为pi/360的时间,其范围为0—8*pi

y=A*sin(2*pi*f*t+2*P*pi);%定义y,y为正弦函数,A,f,P分别为从滑动条得到的幅值,频率和相位。

axes(handles.axesTIME);%建立时域坐标轴对象

plot(t,y);%绘制t—y

grid;%绘制网格

axis([0,4*pi,-1.2,1.2]);%定义横纵轴坐标范围

N=length(y);%设置采样点数

fx=fft(y);%对时域的y函数进行快速傅里叶变换

df=360/N;%求频域分辨率

n=0:

N/2;%设置频率长度

f1=n*df;%设置频率

axes(handles.axesPINYU);%建立频域坐标轴对象

plot(f1,abs(fx(n+1))*2/N);%显示频域波形

grid;%绘制表格

图2正弦函数的时域和频域图

3.2方波信号的实现

方波的产生应用了square函数,其调用方式为:

y=square(t,duty):

产生指定周期,峰值为±1的方波,占空比由duty位置上的数值控制,其具体实现过程为:

t=0:

0.0001:

6;%定义抽样间隔为0.0001的时间,其范围为0—6

y=A*square(2*pi*f*t+4*P/f,50);%定义y,y为方波,A,f,P分别为从滑动条得到的幅值,频率和相位。

axes(handles.axesTIME);%建立时域坐标轴对象

plot(t,y);%绘制t—y

grid;%绘制网格

axis([0,6,-1.2,1.2]);%定义横纵轴坐标范围

t=-1:

0.01:

1;

y=A*square(2*pi*f*t+4*P/f,50);

N=length(y);%设置采样点数

fx=fft(y);%对时域的y函数进行快速傅里叶变换

df=360/N;%求频域分辨率

n=0:

N/2;%设置频率长度

f1=n*df;%设置频率

axes(handles.axesPINYU);%建立频域坐标轴对象

plot(f1,abs(fx(n+1))*2/N);%显示频域波形

grid;%绘制表格

图3方波的时域和频域图

用square函数获得对应y坐标值,用plot绘图。

由于直接plot绘图出来的图形不太明显,使用了函数axis,确定了方波的横轴范围0~6以及纵轴范围-1.2~1.2。

其中图形并不是直线,是因为有一些失真,没有大碍。

3.3三角信号的实现

三角波的产生调用了sawtooth函数,其使用方法为:

x=sawtooth(t,width),width值为0—1之间的标量,制定在一个周期内最大值出现的位置,它是该位置的横坐标和周期的比值。

所以,当width值为0.5时,该函数产生标准的对称三角波。

t=0:

0.01:

20;%定义抽样间隔为0.01的时间,其范围为0—20

y=A*sawtooth(2*pi*f*t+4*P/f,0.5);%定义y,y为三角函数,A,f,P分别为从滑动条得到的幅值,频率和相位。

axes(handles.axesTIME);%建立时域坐标轴对象

plot(t,y);%绘制t—y

grid;%绘制网格

axis([0,20,-1.2,1.2]);%定义横纵轴坐标范围

N=length(y);%设置采样点数

fx=fft(y);%对时域的y函数进行快速傅里叶变换

df=100/N;%求频域分辨率

n=0:

N/2;%设置频率长度

f1=n*df;%设置频率

axes(handles.axesPINYU);%建立频域坐标轴对象

plot(f1,abs(fx(n+1))*2/N);%显示频域波形

grid;%绘制表格

图4三角函数的时域和频域图

3.4锯齿信号的实现

锯齿波的产生调用了sawtooth函数,其使用方法为:

x=sawtooth(t,width),width值为0—1之间的标量,制定在一个周期内最大值出现的位置,它是该位置的横坐标和周期的比值。

当width值为1时,该函数产生锯齿波。

锯齿波程序:

t=0:

0.01:

20;%定义抽样间隔为0.01的时间,其范围为0—20

y=A*sawtooth(pi*f*t+4*P/f,1);%定义y,y为锯齿信号函数,A,f,P分别为从滑动条得到的幅值,频率和相位。

axes(handles.axesTIME);%建立时域坐标轴对象

plot(t,y);%绘制t—y

grid;%绘制网格

axis([0,20,-1.2,1.2]);%定义横纵轴坐标范围

N=length(y);%设置采样点数

fx=fft(y);%对时域的y函数进行快速傅里叶变换

df=100/N;%求频域分辨率

n=0:

N/2;%设置频率长度

f1=n*df;%设置频率

axes(handles.axesPINYU);%建立频域坐标轴对象

plot(f1,abs(fx(n+1))*2/N);%显示频域波形

grid;%绘制网格

图5锯齿信号的时域和频域图

3.5sinc信号的实现

抽样信号用到了sinc函数,sinc函数在信号处理中是一个很重要的函数,因它的傅立叶变换正好是幅值为1的矩形脉冲。

他的调用方式为:

x=sinc(t):

产生以t为变量的sinc函数波形。

sinc信号的程序:

t=-5:

0.01:

5;%定义抽样间隔为0.01的时间,其范围为-5—5

y=A*sinc(2*pi*f*t);%定义y,y为sinc信号函数,A,f,P分别为从滑动条得到的幅值,频率和相位。

axes(handles.axesTIME);%建立时域坐标轴对象

plot(t,y);%绘制t—y

grid;%绘制网格

axis([-5,5,-1.2,1.2]);%定义横纵轴坐标范围

N=length(y);%设置采样点数

fx=fft(y);%对时域的y函数进行快速傅里叶变换

df=100/N;%求频域分辨率

n=0:

N/2;%设置频率长度

f1=n*df;%设置频率

axes(handles.axesPINYU);%建立频域坐标轴对象

plot(f1,abs(fx(n+1))*2/N);%显示频域波形

grid;%绘制网格

图6sinc信号的时域和频域图

3.6运行结果分析

频谱分析:

所谓信号的谱分析,就是计算信号的傅里叶变换。

工程实际中,经常遇

到的是连续信号,截取一段进行FT变换后其频谱函数也是连续函数,因此其计算过程不便于用计算机实现。

而DFT作为一种时域和频域均离散化的变换,适合数值运算,成为分析离散信号和系统的有力工具。

对于连续信号和系统,可以通过对时域采样,得到离散时间序列(xn),再对(xn)进行DFT,因此是一种近似的谱分析。

但由于直接计算DFT的计算量与变换区间长度N的平方成正比,当N较大时,计算量太大,所以在快速傅里叶变换(FastFourierTransform,简称FFT)出现前,直接用DFT进行谱分析和信号的实时处理是不切实际的。

自从出现FFT快速算法之后,情况发生了根本性的变化。

FFT并不是与DFT不同的另外一种变换,而是为减少DFT计算次数的一种快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。

它对傅氏变换的理论并没有新的发现,但是对于在计算机系统或者说数字系统中应用离散傅立叶变换,可以说是进了一大步。

离散傅里叶变换X(k)可看成是z变换在单位圆上的等距离采样值。

同样,X(k)也可看作是序列傅氏变换的采样,采样间隔为ωN=2π/N。

由此看出,离散傅里叶变换实质上是其频谱的离散频域采样,对频率具有选择性(ωk=2πk/N),在这些点上反映了信号的频谱。

根据采样定律,一个频带有限的信号,可以对它进行时域采样而不丢失任何信息,

FFT变换则说明对于时间有限的信号(有限长序列),也可以对其进行频域采样,而不丢

失任何信息。

所以只要时间序列足够长,采样足够密,频域采样也就可较好地反映信号

的频谱趋势,所以FFT可以用以进行连续信号的频谱分析。

本文中采用FFT变换方法对几种典型信号进行了频谱分析,并将结果波形显示出来。

第4章学习心得

在这次为期一周的数字信号课程设计中我发现自己对信号仿真设计的兴趣在逐渐增加。

这次数字信号课程设计对我来说学到的不仅是更加深入的了解数字信号知识,更多的是如何去设计,编程信号。

把知识运用到设计和创新。

它不仅仅是让我们把所学的理论知识与实践相结合起来,提高自己的实际动手能力和独立思考的能力,更重要的是同学间的团结,虽然我们这次花去的时间比别人多,但我相信我们得到的也会更多!

作为一名测控专业的大三学生,我觉得做数字信号课程设计是十分有意义的,而且是十分必要的。

在已度过的大学时间里,我们大多数接触的是专业课。

我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?

如何把我们所学的专业基础课理论知识运用到实践中去呢?

我想做类似的课程设计就为我们提供了良好的实践平台。

在这次课程设计中,我们运用到了以前所学的专业课知识,如:

MATLAB仿真软件,截图软件等。

在过去从未应用过它们,但在这一周的课设过程中努力去学,去应用,这是我做这次课程设计的又一重大收获。

这次课设要感谢老师在程序上给予的大力帮助,虽然MATLAB语言与C有很多相似之处,但是还是遇到了很多不懂的地方,要是没有老师耐心的指导我不能完全理解这些程序,也不能做的这么快。

这里真心的谢谢老师给予我们的帮助。

同时感谢同伴的帮助。

从查资料,设计编程,模拟仿真,再把与这次课程设计有关的资料汇总在WORD中,直至打印出来,到我们满意。

我感到收获巨大。

参考文献

5.谢平、王娜、林洪斌等主编,信号处理原理及应用。

北京:

机械工业出版社,2008.10

6.宋爱国、刘文波等主编,测试信号分析与处理。

北京:

机械工业出版社,2005,9

7.聂祥飞、王海宝、谭泽富主编,Matlab程序设计及其在信号处理中的应用。

成都:

西南交通大学出版社,2005

8.吴大正、高西全等主编,Matlab及在电子信息课程中的应用。

北京:

电子工业出版社,2006.3

9.李培芳、孙晖、李江主编,信号与系统分析基础。

北京:

清华大学出版社,2006.12

 

程序清单

functionvarargout=wodekeshe(varargin)

%WODEKESHEMATLABcodeforwodekeshe.fig

%WODEKESHE,byitself,createsanewWODEKESHEorraisestheexisting

%singleton*.

%

%H=WODEKESHEreturnsthehandletoanewWODEKESHEorthehandleto

%theexistingsingleton*.

%

%WODEKESHE('CALLBACK',hObject,eventData,handles,...)callsthelocal

%functionnamedCALLBACKinWODEKESHE.Mwiththegiveninputarguments.

%

%WODEKESHE('Property','Value',...)createsanewWODEKESHEorraisesthe

%existingsingleton*.Startingfromtheleft,propertyvaluepairsare

%appliedtotheGUIbeforewodekeshe_OpeningFcngetscalled.An

%unrecognizedpropertynameorinvalidvaluemakespropertyapplication

%stop.Allinputsarepassedtowodekeshe_OpeningFcnviavarargin.

%

%*SeeGUIOptionsonGUIDE'sToolsmenu.Choose"GUIallowsonlyone

%instancetorun(singleton)".

%

%Seealso:

GUIDE,GUIDATA,GUIHANDLES

%Edittheabovetexttomodifytheresponsetohelpwodekeshe

%LastModifiedbyGUIDEv2.527-Jun-201215:

22:

41

%Begininitializationcode-DONOTEDIT

gui_Singleton=1;

gui_State=struct('gui_Name',mfilename,...

'gui_Singleton',gui_Singleton,...

'gui_OpeningFcn',@wodekeshe_OpeningFcn,...

'gui_OutputFcn',@wodekeshe_OutputFcn,...

'gui_LayoutFcn',[],...

'gui_Callback',[]);

ifnargin&&ischar(varargin{1})

gui_State.gui_Callback=str2func(varargin{1});

end

ifnargout

[varargout{1:

nargout}]=gui_mainfcn(gui_State,varargin{:

});

else

gui_mainfcn(gui_State,varargin{:

});

end

%Endinitializationcode-DONOTEDIT

%---Executesjustbeforewodekesheismadevisible.

functionwodekeshe_OpeningFcn(hObject,eventdata,handles,varargin)

%Thisfunctionhasnooutputargs,seeOutputFcn.

%hObjecthandletofigure

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handless

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

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

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