信号与系统实验教案.docx
《信号与系统实验教案.docx》由会员分享,可在线阅读,更多相关《信号与系统实验教案.docx(27页珍藏版)》请在冰豆网上搜索。
信号与系统实验教案
信号与系统
实验指导书(Matlab)
董海兵
湖南工学院电气与信息工程系
二〇一〇年三月一日
前言
《信号与系统》、《数字信号处理》是电子信息类专业的两门主要技术基础课程,是电子信息类专业本科生的必修课程,也是电子信息类专业硕士研究生入学必考课程。
该课程的任务在于研究信号与系统理论的基本概念和基本分析方法,使学生初步认识如何建立信号与系统的数学模型,如何经适当的数学分析求解,并对所得结果给予物理解释,赋予物理意义。
该课程的基本理论和方法大量用于计算机信息处理的各个领域,特别是通信、数字语音处理、数字图像处理、数字信号分析等领域应用更为广泛。
通过实验,配合《信号与系统》和《数字信号处理》课程的教学、加强学生对信号与系统理论的感性认识、提高学生的综合能力具有重要的意义。
长期以来,《信号与系统》和《数字信号处理》课程一直采用黑板式的单一教学方式,学生仅依靠做习题来巩固和理解教学内容,对课程中大量的应用性较强的内容不能实际动手设计、调试、分析,严重影响和制约了教学效果。
由于黑板式教学,课程中大量的信号分析结果缺乏可视化的直观表现,学生自己设计系统也不能直观地得到系统特性的可视化测试结果,学生将大量的时间和精力用于繁杂的手工数学运算,而未真正理解所得结果在信号处理中的实际意义。
近年来,计算机多媒体教序手段的运用逐步普及,大量优秀的科学计算和系统仿真软件不断涌现,为我们实现计算机辅助教学和学生上机实验提供了很好的平台。
通过对这些软件的分析和对比,我们选择MATLAB语言作为辅助教学工具,借助MATLAB强大的计算能力和图形表现能力,将《信号与系统》和《数字信号处理》中的概念、方法和相应的结果,以图形的形式直观地展现给学生,大大的方便学生迅速掌握和理解教学内容。
为了使学生能够较好的使用MATLAB语言完成相应的实验任务,本指导书中详细地给出了与《信号与系统》相关的众多的MATLAB函数及其用法,同时给出了一些范例程序,说明针对某一具体问题进行编程的方法等。
学生们在实验前,只要认真阅读、预习实验的相关内容,并在实验中,严格按照《实验指导书》中规定的实验内容和步骤进行实验,即可完成相应的实验报告。
《信号与系统实验指导书》中设计的实验项目包括:
1、信号与系统的时域分析;2、连续时间信号的频域分析;3、连续时间LTI系统的频域分析;4、通信系统仿真;5、连续时间LTI系统的复频域分析。
所有这些实验项目和所涉及到的实验内容基本上覆盖了信号与系统这门课程的大部分主要内容。
和其他课程的实验指导书有所不同的是,本实验指导同时兼作《实验报告》之用,目的是希望将学生从不是特别必要的实验报告的文字撰写中解脱出来,从而将主要精力和时间用到对问题的分析、算法的确定和程序的编写之中。
本实验指导中所给出的全部范例程序,都在MATLAB6.5上运行,且是正确的。
由于时间仓促和编者水平有限,本实验指导在编写和编辑的过程中,不可避免地存在错误和不当之处,恳请老师和同学们批评指正。
湖南工学院电气与信息工程系
二〇一〇年三月一日
实验一:
连续时间信号与系统的时域分析-------------------------------------------------6
一、实验目的及要求---------------------------------------------------------------------------6
二、实验原理-----------------------------------------------------------------------------------6
1、信号的时域表示方法------------------------------------------------------------------6
2、用MATLAB仿真连续时间信号和离散时间信号----------------------------------7
3、LTI系统的时域描述-----------------------------------------------------------------11
三、实验步骤及内容--------------------------------------------------------------------------15
四、实验报告要求-----------------------------------------------------------------------------26
实验二:
连续时间信号的频域分析---------------------------------------------------------27
一、实验目的及要求--------------------------------------------------------------------------27
二、实验原理----------------------------------------------------------------------------------27
1、连续时间周期信号的傅里叶级数CTFS---------------------------------------------27
2、连续时间信号的傅里叶变换CTFT--------------------------------------------------28
3、离散时间信号的傅里叶变换DTFT-------------------------------------------------28
4、连续时间周期信号的傅里叶级数CTFS的MATLAB实现------------------------29
5、用MATLAB实现CTFT及其逆变换的计算---------------------------------------33
三、实验步骤及内容----------------------------------------------------------------------34
四、实验报告要求-------------------------------------------------------------------------48
实验三:
连续时间LTI系统的频域分析---------------------------------------------------49
一、实验目的及要求--------------------------------------------------------------------------49
二、实验原理----------------------------------------------------------------------------------49
1、连续时间LTI系统的频率响应-------------------------------------------------------49
2、LTI系统的群延时---------------------------------------------------------------------50
3、用MATLAB计算系统的频率响应--------------------------------------------------50
三、实验步骤及内容----------------------------------------------------------------------51
四、实验报告要求-------------------------------------------------------------------------58
实验四:
通信系统仿真------------------------------------------------------------------------59
一、实验目的及要求--------------------------------------------------------------------------59
二、实验原理----------------------------------------------------------------------------------59
1、信号的抽样及抽样定理---------------------------------------------------------------59
2、信号抽样过程中的频谱混叠----------------------------------------------------------62
3、信号重建-------------------------------------------------------------------------------62
4、调制与解调----------------------------------------------------------------------------------64
5、通信系统中的调制与解调仿真---------------------------------------------------------66
三、实验步骤及内容------------------------------------------------------------------------66
四、实验报告要求---------------------------------------------------------------------------75
实验五:
连续时间LTI系统的复频域分析----------------------------------------------76
一、实验目的及要求------------------------------------------------------------------------76
二、实验原理--------------------------------------------------------------------------------76
1、连续时间LTI系统的复频域描述--------------------------------------------------76
2、系统函数的零极点分布图-----------------------------------------------------------------77
3、拉普拉斯变换与傅里叶变换之间的关系-----------------------------------------------78
4、系统函数的零极点分布与系统稳定性和因果性之间的关系------------------------79
5、系统函数的零极点分布与系统的滤波特性-------------------------------------------80
6、拉普拉斯逆变换的计算-------------------------------------------------------------81
三、实验步骤及内容------------------------------------------------------------------------82
四、实验报告要求---------------------------------------------------------------------------87
实验一信号与系统的时域分析
一、实验目的
1、熟悉和掌握常用的用于信号与系统时域仿真分析的MATLAB函数;
2、掌握连续时间和离散时间信号的MATLAB产生,掌握用周期延拓的方法将一个非周期信号进行周期信号延拓形成一个周期信号的MATLAB编程;
3、牢固掌握系统的单位冲激响应的概念,掌握LTI系统的卷积表达式及其物理意义,掌握卷积的计算方法、卷积的基本性质;
4、掌握利用MATLAB计算卷积的编程方法,并利用所编写的MATLAB程序验证卷积的常用基本性质;
掌握MATLAB描述LTI系统的常用方法及有关函数,并学会利用MATLAB求解LTI系统响应,绘制相应曲线。
基本要求:
掌握用MATLAB描述连续时间信号和离散时间信号的方法,能够编写MATLAB程序,实现各种信号的时域变换和运算,并且以图形的方式再现各种信号的波形。
掌握线性时不变连续系统的时域数学模型用MATLAB描述的方法,掌握卷积运算、线性常系数微分方程的求解编程。
二、实验原理
信号(Signal)一般都是随某一个或某几个独立变量的变化而变化的,例如,温度、压力、声音,还有股票市场的日收盘指数等,这些信号都是随时间的变化而变化的,还有一些信号,例如在研究地球结构时,地下某处的密度就是随着海拔高度的变化而变化的。
一幅图片中的每一个象素点的位置取决于两个坐标轴,即横轴和纵轴,因此,图像信号具有两个或两个以上的独立变量。
在《信号与系统》课程中,我们只关注这种只有一个独立变量(Independentvariable)的信号,并且把这个独立变量统称为时间变量(Timevariable),不管这个独立变量是否是时间变量。
在自然界中,大多数信号的时间变量都是连续变化的,因此这种信号被称为连续时间信号(Continuous-TimeSignals)或模拟信号(AnalogSignals),例如前面提到的温度、压力和声音信号就是连续时间信号的例子。
但是,还有一些信号的独立时间变量是离散变化的,这种信号称为离散时间信号。
前面提到的股票市场的日收盘指数,由于相邻两个交易日的日收盘指数相隔24小时,这意味着日收盘指数的时间变量是不连续的,因此日收盘指数是离散时间信号。
而系统则用于对信号进行运算或处理,或者从信号中提取有用的信息,或者滤出信号中某些无用的成分,如滤波,从而产生人们所希望的新的信号。
系统通常是由若干部件或单元组成的一个整体(Entity)。
系统可分为很多不同的类型,例如,根据系统所处理的信号的不同,系统可分为连续时间系统(Continuous-timesystem)和离散时间系统(Discrete-timesystem),根据系统所具有的不同性质,系统又可分为因果系统(Causalsystem)和非因果系统(Noncausalsystem)、稳定系统(Stablesystem)和不稳定系统(Unstablesystem)、线性系统(Linearsystem)和非线性系统(Nonlinearsystem)、时变系统(Time-variantsystem)和时不变系统(Time-invariantsystem)等等。
然而,在信号与系统和数字信号处理中,我们所分析的系统只是所谓的线性时不变系统,这种系统同时满足两个重要的基本性质,那就是线性性和时不变性,通常称为线性时不变(LTI)系统。
1.信号的时域表示方法
1.1将信号表示成独立时间变量的函数
例如x(t)=sin(ωt)和x[n]=n(0.5)nu[n]
分别表示一个连续时间信号和一个离散时间信号。
在MATLAB中有许多内部函数,可以直接完成信号的这种表达,例如:
sin():
正弦信号
cos():
余弦信号
exp():
指数信号
1.2用信号的波形图来描述信号
用函数曲线表示一个信号,图1.1就是一个连续时间信号和一个离散时间信号的波形图。
图1.1连续时间信号与离散时间信号的波形图
1.3将信号用一个数据序列来表示
对于离散时间信号,还可以表示成一个数的序列,例如:
x[n]={....,0.1,1.1,-1.2,0,1.3,….}
↑n=0
在《信号与系统》和《数字信号处理》课程中,上述三种信号的描述方法是经常要使用的。
2用MATLAB仿真连续时间信号和离散时间信号
在MATLAB中,无论是连续时间信号还是离散时间信号,MATLAB都是用一个数字序列来表示信号,这个数字序列在MATLAB中叫做向量(vector)。
通常的情况下,需要与时间变量相对应。
如前所述,MATLAB有很多内部数学函数可以用来产生这样的数字序列,例如sin()、cos()、exp()等函数可以直接产生一个按照正弦、余弦或指数规律变化的数字序列。
2.1连续时间信号的仿真
程序Program1_1是用MATLAB对一个正弦信号进行仿真的程序,请仔细阅读该程序,并在计算机上运行,观察所得图形。
%Program1_1
%Thisprogramisusedtogenerateasinusoidalsignalanddrawitsplot
clear,%Clearallvariables
closeall,%Closeallfigurewindows
dt=0.01;%Specifythestepoftimevariable
t=-2:
dt:
2;%Specifytheintervaloftime
x=sin(2*pi*t);%Generatethesignal
plot(t,x)%Openafigurewindowanddrawtheplotofx(t)
title('Sinusoidalsignalx(t)')
xlabel('Timet(sec)')
常用的图形控制函数
axis([xmin,xmax,ymin,ymax]):
图型显示区域控制函数,其中xmin为横轴的显示起点,xmax为横轴的显示终点,ymin为纵轴的显示起点,ymax为纵轴的显示终点。
有时,为了使图形具有可读性,需要在所绘制的图形中,加上一些网格线来反映信号的幅度大小。
MATLAB中的gridon/gridoff可以实现在你的图形中加网格线。
gridon:
在图形中加网格线。
gridoff:
取消图形中的网格线。
x=input(‘Typeinsignalx(t)inclosedform:
’)
在《信号与系统》课程中,单位阶跃信号u(t)和单位冲激信号δ(t)是二个非常有用的信号。
它们的定义如下
1.1(a)
1.1(b)
这里分别给出相应的简单的产生单位冲激信号和单位阶跃信号的扩展函数。
产生单位冲激信号的扩展函数为:
functiony=delta(t)
dt=0.01;
y=(u(t)-u(t-dt))/dt;
产生单位阶跃信号的扩展函数为:
%Unitstepfunction
functiony=u(t)
y=(t>=0);%y=1fort>0,elsey=0
请将这二个MATLAB函数分别以delta和u为文件名保存在work文件夹中,以后,就可以像教材中的方法使用单位冲激信号δ(t)和单位阶跃信号u(t)。
2.2离散时间信号的仿真
程序Program1_2用来产生离散时间信号x[n]=sin(0.2πn)。
%Program1_2
%Thisprogramisusedtogenerateadiscrete-timesinusoidalsignalanddrawitsplot
clear,%Clearallvariables
closeall,%Closeallfigurewindows
n=-10:
10;%Specifytheintervaloftime
x=sin(0.2*pi*n);%Generatethesignal
stem(n,x)%Openafigurewindowanddrawtheplotofx[n]
title('Sinusoidalsignalx[n]')
xlabel('Timeindexn')
请仔细阅读该程序,比较程序Program1_1和Program1_2中的不同之处,以便自己编程时能够正确使用这种方法方针连续时间信号和离散时间信号。
程序Program1_3用来仿真下面形式的离散时间信号:
x[n]={....,0.1,1.1,-1.2,0,1.3,….}
↑n=0
%Program1_3
%Thisprogramisusedtogenerateadiscrete-timesequence
%anddrawitsplot
clear,%Clearallvariables
closeall,%Closeallfigurewindows
n=-5:
5;%Specifytheintervaloftime,thenumberofpointsofnis11.
x=[0,0,0,0,0.1,1.1,-1.2,0,1.3,0,0];%Generatethesignal
stem(n,x,'.')%Openafigurewindowanddrawtheplotofx[n]
gridon,
title('Adiscrete-timesequencex[n]')
xlabel('Timeindexn')
由于在程序的stem(n,x,'.')语句中加有'.'选项,因此绘制的图形中每根棒条线的顶端是一个实心点。
如果需要在序列的前后补较多的零的话,可以利用函数zeros(),其语法为:
zeros(1,N):
圆括号中的1和N表示该函数将产生一个一行N列的矩阵,矩阵中的所有元素均为零。
利用这个矩阵与序列x[n]进行组合,从而得到一个长度与n相等的向量。
例如,当x[n]={0.1,1.1,-1.2,0,1.3}时,为了得到程序Program1_3中的序列,
↑n=0
可以用这个MATLAB语句x=[zeros(1,4)xzeros(1,2)]来实现。
用这种方法编写的程序如下:
%Program1_4
%Thisprogramisusedtogenerateadiscrete-timesinusoidalsignal
%anddrawitsplot
clear,%Clearallvariables
closeall,%Closeallfigurewindows
n=-5:
5;%Specifytheintervaloftime
x=[zeros(1,4),0.1,1.1,-1.2,0,1.3,zeros(1,2)];%Generatethesequence
stem(n,x,'.')%Openafigurewindowanddrawtheplotofx[n]
gridon,
title('Adiscrete-timesequencex[n]')
xlabel('Timein