实验一++信号的产生及时间变量的变换

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验一信号的产生及时间变量的变换一、实验目的1.熟悉和掌握常用的用于信号与系统时域仿真分析的MATLAB函数;2.掌握连续时间和离散时间信号的MATLAB产生,掌握用周期延拓的方法将一个非周期信号进行周期信号延拓形成一个周期信号的MATLAB编程;基本要求:掌握用MATLAB描述连续时间信号和离散时间信号的方法,能够编写MATLAB程序,实现各种信号的时域变换和运算,并且以图形的方式再现各种信号的波形。二、实验原理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=02用MATLAB仿真连续时间信号和离散时间信号在MATLAB中,无论是连续时间信号还是离散时间信号,MATLAB都是用一个数字序列来表示信号,这个数字序列在MATLAB中叫做向量(vector)。通常的情况下,需要与时间变量相对应。如前所述,MATLAB有很多内部数学函数可以用来产生这样的数字序列,例如sin()、cos()、exp()等函数可以直接产生一个按照正弦、余弦或指数规律变化的数字序列。2.1连续时间信号的仿真程序Program1_1是用MATLAB对一个正弦信号进行仿真的程序,请仔细阅读该程序,并在计算机上运行,观察所得图形。%Program1_1%Thisprogramisusedtogenerateasinusoidalsignalanddrawitsplotclear,%Clearallvariablescloseall,%Closeallfigurewindowsdt=0.01;%Specifythestepoftimevariablet=-2:dt:2;%Specifytheintervaloftimex=sin(2*pi*t);%Generatethesignalplot(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)是二个非常有用的信号。它们的定义如下0,0)(1)(ttdttt1.1(a)0,00,1)(tttu1.1(b)这里分别给出相应的简单的产生单位冲激信号和单位阶跃信号的扩展函数。产生单位冲激信号的扩展函数为:functiony=delta(t)dt=0.01;y=(u(t)-u(t-dt))/dt;产生单位阶跃信号的扩展函数为:%Unitstepfunctionfunctiony=u(t)y=(t=0);%y=1fort0,elsey=0请将这二个MATLAB函数分别以delta和u为文件名保存在work文件夹中,以后,就可以像教材中的方法使用单位冲激信号δ(t)和单位阶跃信号u(t)。2.2离散时间信号的仿真程序Program1_2用来产生离散时间信号x[n]=sin(0.2πn)。%Program1_2+%Thisprogramisusedtogenerateadiscrete-timesinusoidalsignalanddrawitsplotclear,%Clearallvariablescloseall,%Closeallfigurewindowsn=-10:10;%Specifytheintervaloftimex=sin(0.2*pi*n);%Generatethesignalstem(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%anddrawitsplotclear,%Clearallvariablescloseall,%Closeallfigurewindowsn=-5:5;%Specifytheintervaloftime,thenumberofpointsofnis11.x=[0,0,0,0,0.1,1.1,-1.2,0,1.3,0,0];%Generatethesignalstem(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%anddrawitsplotclear,%Clearallvariablescloseall,%Closeallfigurewindows+n=-5:5;%Specifytheintervaloftimex=[zeros(1,4),0.1,1.1,-1.2,0,1.3,zeros(1,2)];%Generatethesequencestem(n,x,'.')%Openafigurewindowanddrawtheplotofx[n]gridon,title('Adiscrete-timesequencex[n]')xlabel('Timeindexn')离散时间单位阶跃信号u[n]定义为0,00,1][nnnu1.2离散时间单位阶跃信号u[n]除了也可以直接用前面给出的扩展函数来产生,还可以利用MATLAB内部函数ones(1,N)来实现。这个函数类似于zeros(1,N),所不同的是它产生的矩阵的所有元素都为1。值得注意的是,利用ones(1,N)来实现的单位阶跃序列并不是真正的单位阶跃序列,而是一个长度为N单位门(Gate)序列,也就是u[n]-u[n-N]。但是在一个有限的图形窗口中,我们看到的还是一个单位阶跃序列。在绘制信号的波形图时,有时我们需要将若干个图形绘制在图一个图形窗口中,这就需要使用MATLAB的图形分割函数subplot(),其用法是在绘图函数stem或plot之前,使用图形分割函数subplot(n1,n2,n3),其中的参数n1,n2和n3的含义是,该函数将把一个图形窗口分割成n1xn2个子图,即将绘制的图形将绘制在第n3个子图中。2.3信号的时域变换2.3.1信号的时移信号的时移可用下面的数学表达式来描述:设一个连续时间信号为x(t),它的时移y(t)表示为:y(t)=x(t-t0)1.3其中,t0为位移量。若t0为正数,则y(t)等于将x(t)右移t0秒之后的结果。反之,若t0为负数,则y(t)等于将x(t)左移t0秒之后的结果。在MATLAB中,时移运算与数学上习惯表达方法完全相同。程序Program1_5对给定一个连续时间信号x(t)=e-0.5tu(t),对它分别左移2秒钟和右移2秒钟得到信号x1(t)=e-0.5(t+2)u(t+2)和x2(t)=e-0.5(t-2)u(t-2)。%Program1_5%Thisprogramisusedtoimplementthetime-shiftoperation%onacontinuous-timesignalandtoobtainitstime-shiftedversions%andtodrawtheirplots.clear,closeall,t=-5:0.01:5;x=exp(-0.5*t).*u(t);%Generatetheoriginalsignalx(t)x1=exp(-0.5*(t+2)).*u(t+2);%Shiftx(t)totheleftby2secondtogetx1(t)x2=exp(-0.5*(t-2)).*u(t-2);%Shiftx(t)totherightby2secondtogetx2(t)subplot(311)plot(t,x)%Plotx(t)gridon,title('Originalsignalx(t)')subplot(312)plot(t,x1)%Plotx1(t)gridon,title('Leftshiftedversionofx(t)')subplot(313)plot(t,x2)%Plotx2(t)gridon,title('Rightshiftedversionofx(t)')xlabel('Timet(sec)')2.3.2信号的时域反褶对一个信号x[n]的反褶运算在数学上表示为y[n]=x[-n]1.4这种反褶运算,用MATLAB实现起来也是非常简单的。有多种方法可以实现信号的反褶运算。方法一,修改绘图函数plot(t,x)和stem(n,x)中的时间变量t和n,即用-t和-n替代原来的t和n,这样绘制出来的图形,看起来就是原信号经时域反褶后的版本。方法二,直接利用原信号与其反褶信号的数学关系式来实现。这种方法最符合信号反褶运算的实际意义。方法三,使用MATLAB内部函数fliplr()来实现信号的反褶运算。其用法如下:y=fliplr(x):其中x为原信号x(t)或x[n],而y则为x的时域反褶。需要说明的是,函数fliplr()对信号作时域反褶,仅仅将信号中各个元素的次序作了一个反转,这种反转处理是独立于时间变量t和n的。因此,如果信号与其时间变量能够用一个数学函数来表达的话,那么建议将时间变量t和n的范围指定在一个正负对称的时间区间即可。2.3.3信号的时域尺度变换信号x(t)的时域尺度变换在数学描述为y(t)=x(at),1.5其中a为任意常数。根据a的不同取值,这种时域尺度变换对信号x(t)具有非常不同的影响。当a=1时,y(t)=x(t);当a=-1时,y(t)

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功