信号与系统实验教程_第1页
信号与系统实验教程_第2页
信号与系统实验教程_第3页
信号与系统实验教程_第4页
信号与系统实验教程_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、信 号 与 系 统实 验 教 程目 录实验一:连续时间信号与系统的时域分析-6一、实验目的及要求-6二、实验原理-61、信号的时域表示方法-62、用matlab仿真连续时间信号和离散时间信号-73、lti系统的时域描述-11三、实验步骤及内容-15四、实验报告要求-26实验二:连续时间信号的频域分析-27一、实验目的及要求-27二、实验原理-271、连续时间周期信号的傅里叶级数ctfs-272、连续时间信号的傅里叶变换ctft-283、离散时间信号的傅里叶变换dtft -284、连续时间周期信号的傅里叶级数ctfs的matlab实现-295、用matlab实现ctft及其逆变换的计算-33三、

2、实验步骤及内容-34四、实验报告要求-48实验三:连续时间lti系统的频域分析-49一、实验目的及要求-49二、实验原理-491、连续时间lti系统的频率响应-492、lti系统的群延时-503、用matlab计算系统的频率响应-50三、实验步骤及内容-51四、实验报告要求-58实验四:调制与解调以及抽样与重建-59一、实验目的及要求-59二、实验原理-591、信号的抽样及抽样定理-592、信号抽样过程中的频谱混叠-623、信号重建- -624、调制与解调-645、通信系统中的调制与解调仿真-66三、实验步骤及内容-66四、实验报告要求-75实验五:连续时间lti系统的复频域分析-76一、实验

3、目的及要求-76二、实验原理-761、连续时间lti系统的复频域描述-762、系统函数的零极点分布图-773、拉普拉斯变换与傅里叶变换之间的关系-784、系统函数的零极点分布与系统稳定性和因果性之间的关系-795、系统函数的零极点分布与系统的滤波特性-806、拉普拉斯逆变换的计算-81三、实验步骤及内容-82四、实验报告要求-87附录:授课方式和考核办法-88实验一 信号与系统的时域分析一、实验目的1、熟悉和掌握常用的用于信号与系统时域仿真分析的matlab函数;2、掌握连续时间和离散时间信号的matlab产生,掌握用周期延拓的方法将一个非周期信号进行周期信号延拓形成一个周期信号的matlab

4、编程;3、牢固掌握系统的单位冲激响应的概念,掌握lti系统的卷积表达式及其物理意义,掌握卷积的计算方法、卷积的基本性质;4、掌握利用matlab计算卷积的编程方法,并利用所编写的matlab程序验证卷积的常用基本性质;掌握matlab描述lti系统的常用方法及有关函数,并学会利用matlab求解lti系统响应,绘制相应曲线。基本要求:掌握用matlab描述连续时间信号和离散时间信号的方法,能够编写matlab程序,实现各种信号的时域变换和运算,并且以图形的方式再现各种信号的波形。掌握线性时不变连续系统的时域数学模型用matlab描述的方法,掌握卷积运算、线性常系数微分方程的求解编程。二、实验原

5、理信号(signal)一般都是随某一个或某几个独立变量的变化而变化的,例如,温度、压力、声音,还有股票市场的日收盘指数等,这些信号都是随时间的变化而变化的,还有一些信号,例如在研究地球结构时,地下某处的密度就是随着海拔高度的变化而变化的。一幅图片中的每一个象素点的位置取决于两个坐标轴,即横轴和纵轴,因此,图像信号具有两个或两个以上的独立变量。 在信号与系统课程中,我们只关注这种只有一个独立变量(independent variable)的信号,并且把这个独立变量统称为时间变量(time variable),不管这个独立变量是否是时间变量。 在自然界中,大多数信号的时间变量都是连续变化的,因此这

6、种信号被称为连续时间信号(continuous-time signals)或模拟信号(analog signals),例如前面提到的温度、压力和声音信号就是连续时间信号的例子。但是,还有一些信号的独立时间变量是离散变化的,这种信号称为离散时间信号。前面提到的股票市场的日收盘指数,由于相邻两个交易日的日收盘指数相隔24小时,这意味着日收盘指数的时间变量是不连续的,因此日收盘指数是离散时间信号。 而系统则用于对信号进行运算或处理,或者从信号中提取有用的信息,或者滤出信号中某些无用的成分,如滤波,从而产生人们所希望的新的信号。系统通常是由若干部件或单元组成的一个整体(entity)。系统可分为很多不

7、同的类型,例如,根据系统所处理的信号的不同,系统可分为连续时间系统(continuous-time system)和离散时间系统(discrete-time system),根据系统所具有的不同性质,系统又可分为因果系统(causal system)和非因果系统(noncausal system)、稳定系统(stable system)和不稳定系统(unstable system)、线性系统(linear system)和非线性系统(nonlinear system)、时变系统(time-variant system)和时不变系统(time-invariant system)等等。 然而,在信

8、号与系统和数字信号处理中,我们所分析的系统只是所谓的线性时不变系统,这种系统同时满足两个重要的基本性质,那就是线性性和时不变性,通常称为线性时不变(lti)系统。1. 信号的时域表示方法1.1将信号表示成独立时间变量的函数例如 x(t)=sin(t) 和 xn=n(0.5)nun分别表示一个连续时间信号和一个离散时间信号。在matlab中有许多内部函数,可以直接完成信号的这种表达,例如:sin():正弦信号cos():余弦信号exp():指数信号1.2用信号的波形图来描述信号用函数曲线表示一个信号,图1.1就是一个连续时间信号和一个离散时间信号的波形图。图1.1 连续时间信号与离散时间信号的波

9、形图1.3将信号用一个数据序列来表示对于离散时间信号,还可以表示成一个数的序列,例如: xn=., 0.1, 1.1, -1.2, 0, 1.3, . n=0 在信号与系统和数字信号处理课程中,上述三种信号的描述方法是经常要使用的。2 用matlab仿真连续时间信号和离散时间信号 在matlab中,无论是连续时间信号还是离散时间信号,matlab都是用一个数字序列来表示信号,这个数字序列在matlab中叫做向量(vector)。通常的情况下,需要与时间变量相对应。 如前所述,matlab有很多内部数学函数可以用来产生这样的数字序列,例如sin()、cos()、exp()等函数可以直接产生一个按

10、照正弦、余弦或指数规律变化的数字序列。2.1连续时间信号的仿真程序program1_1是用matlab对一个正弦信号进行仿真的程序,请仔细阅读该程序,并在计算机上运行,观察所得图形。% program1_1% this program is used to generate a sinusoidal signal and draw its plotclear, % clear all variablesclose all, % close all figure windowsdt = 0.01; % specify the step of time variablet = -2:dt:2; %

11、 specify the interval of timex = sin(2*pi*t); % generate the signalplot(t,x) % open a figure window and draw the plot of x(t)title(sinusoidal signal x(t)xlabel(time t (sec)常用的图形控制函数axis(xmin,xmax,ymin,ymax):图型显示区域控制函数,其中xmin为横轴的显示起点,xmax为横轴的显示终点,ymin为纵轴的显示起点,ymax为纵轴的显示终点。有时,为了使图形具有可读性,需要在所绘制的图形中,加上一

12、些网格线来反映信号的幅度大小。matlab中的grid on/grid off可以实现在你的图形中加网格线。grid on:在图形中加网格线。grid off:取消图形中的网格线。x = input(type in signal x(t) in closed form:)在信号与系统课程中,单位阶跃信号u(t) 和单位冲激信号(t) 是二个非常有用的信号。它们的定义如下 1.1(a) 1.1(b)这里分别给出相应的简单的产生单位冲激信号和单位阶跃信号的扩展函数。产生单位冲激信号的扩展函数为:function y = delta(t)dt = 0.01;y = (u(t)-u(t-dt)/dt;

13、产生单位阶跃信号的扩展函数为:% unit step functionfunction y = u(t)y = (t=0); % y = 1 for t 0, else y = 0 请将这二个matlab函数分别以delta 和u为文件名保存在work文件夹中,以后,就可以像教材中的方法使用单位冲激信号(t) 和单位阶跃信号u(t)。2.2离散时间信号的仿真程序program1_2用来产生离散时间信号xn=sin(0.2n)。% program1_2% this program is used to generate a discrete-time sinusoidal signal and

14、draw its plotclear, % clear all variablesclose all, % close all figure windowsn = -10:10; % specify the interval of timex = sin(0.2*pi*n); % generate the signalstem (n,x) % open a figure window and draw the plot of xntitle (sinusoidal signal xn)xlabel (time index n) 请仔细阅读该程序,比较程序program1_1和program1_

15、2中的不同之处,以便自己编程时能够正确使用这种方法方针连续时间信号和离散时间信号。 程序program1_3用来仿真下面形式的离散时间信号: xn=., 0.1, 1.1, -1.2, 0, 1.3, . n=0% program1_3% this program is used to generate a discrete-time sequence% and draw its plotclear, % clear all variablesclose all, % close all figure windowsn = -5:5; % specify the interval of tim

16、e, the number of points of n is 11.x = 0, 0, 0, 0, 0.1, 1.1, -1.2, 0, 1.3, 0, 0; % generate the signalstem(n,x,.) % open a figure window and draw the plot of xngrid on,title (a discrete-time sequence xn)xlabel (time index n) 由于在程序的stem(n,x,.) 语句中加有.选项,因此绘制的图形中每根棒条线的顶端是一个实心点。 如果需要在序列的前后补较多的零的话,可以利用函数

17、zeros(),其语法为: zeros(1, n):圆括号中的1和n表示该函数将产生一个一行n列的矩阵,矩阵中的所有元素均为零。利用这个矩阵与序列xn进行组合,从而得到一个长度与n相等的向量。 例如,当 xn= 0.1, 1.1, -1.2, 0, 1.3 时,为了得到程序program1_3中的序列, n=0可以用这个matlab语句x = zeros(1,4) x zeros(1, 2) 来实现。用这种方法编写的程序如下:% program1_4% this program is used to generate a discrete-time sinusoidal signal% and

18、 draw its plotclear, % clear all variablesclose all, % close all figure windowsn = -5:5; % specify the interval of timex = zeros(1,4), 0.1, 1.1, -1.2, 0, 1.3, zeros(1,2); % generate the sequencestem (n,x,.) % open a figure window and draw the plot of xngrid on,title (a discrete-time sequence xn)xlab

19、el (time index n) 离散时间单位阶跃信号un定义为 1.2离散时间单位阶跃信号un除了也可以直接用前面给出的扩展函数来产生,还可以利用matlab内部函数ones(1,n) 来实现。这个函数类似于zeros(1,n),所不同的是它产生的矩阵的所有元素都为1。 值得注意的是,利用ones(1,n) 来实现的单位阶跃序列并不是真正的单位阶跃序列,而是一个长度为n单位门(gate)序列,也就是un-un-n。但是在一个有限的图形窗口中,我们看到的还是一个单位阶跃序列。 在绘制信号的波形图时,有时我们需要将若干个图形绘制在图一个图形窗口中,这就需要使用matlab的图形分割函数subp

20、lot(),其用法是在绘图函数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中,时移运算与数学上习惯表达方

21、法完全相同。 程序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% this program is used to implement the time-shift operation% on a continuous-time signal and to obtain its time-shifted versions% and to draw their plots.clear,close all,

22、t = -5:0.01:5;x = exp(-0.5*t).*u(t); % generate the original signal x(t)x1 = exp(-0.5*(t+2).*u(t+2); % shift x(t) to the left by 2 second to get x1(t)x2 = exp(-0.5*(t-2).*u(t-2); % shift x(t) to the right by 2 second to get x2(t)subplot(311)plot(t,x) % plot x(t)grid on,title (original signal x(t)sub

23、plot (312)plot (t,x1) % plot x1(t)grid on,title (left shifted version of x(t)subplot (313)plot (t,x2) % plot x2(t)grid on,title (right shifted version of x(t)xlabel (time t (sec)2.3.2 信号的时域反褶 对一个信号xn的反褶运算在数学上表示为 yn = x-n 1.4 这种反褶运算,用matlab实现起来也是非常简单的。有多种方法可以实现信号的反褶运算。方法一,修改绘图函数plot(t,x)和stem(n,x)中的时

24、间变量t和n,即用-t和-n替代原来的t和n,这样绘制出来的图形,看起来就是原信号经时域反褶后的版本。方法二,直接利用原信号与其反褶信号的数学关系式来实现。这种方法最符合信号反褶运算的实际意义。方法三,使用matlab内部函数fliplr()来实现信号的反褶运算。其用法如下: y = fliplr(x):其中x为原信号x(t)或xn,而y则为x的时域反褶。需要说明的是,函数fliplr()对信号作时域反褶,仅仅将信号中各个元素的次序作了一个反转,这种反转处理是独立于时间变量t和n的。因此,如果信号与其时间变量能够用一个数学函数来表达的话,那么建议将时间变量t和n的范围指定在一个正负对称的时间区

25、间即可。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) = x(-t),即y(t)可以通过将x(t)反褶运算而得到; 当a 1时,y(t) = x(at),y(t)是将x(t)在时间轴上的压缩而得到; 当0 a 1时,y(t) = x(at),y(t)是将x(t)在时间轴上的扩展而得到; 当 -1 a 0时,y(t) = x(at),y(t)是将x(t)在时间轴上的扩展同时翻转而得到

26、; 当 a 0时图形右移, t x = 1 2 3 4; h = 4 3 2 1; y=conv(x,h)在屏幕上得到显示结果:y = 4 11 20 30 20 11 4这表明,多项式p1和p2的乘积为: 正如前所述,用matlab处理连续时间信号时,独立时间变量t的变化步长应该是很小的,假定用符号dt表示时间变化步长,那么,用函数conv()作两个信号的卷积积分时,应该在这个函数之前乘以时间步长方能得到正确的结果。也就是说,正确的语句形式应为:y = dt*conv(x,h)。对于定义在不同时间段的两个时限信号x(t),t0 t t1,和h(t),t2 t t3。 如果用y(t)来表示它们

27、的卷积结果,则y(t)的持续时间范围要比x(t)或h(t)要长,其时间范围为t0+t2 t t1+t3。这个特点很重要,利用这个特点,在处理信号在时间上的位置时,可以很容易地将信号的函数值与时间轴的位置和长度关系保持一致性。根据给定的两个连续时间信号x(t) = tu(t)-u(t-1)和h(t) = u(t)-u(t-1),编写程序,完成这两个信号的卷积运算,并绘制它们的波形图。范例程序如下:% program1_6% this program computes the convolution of two continuou-time signalsclear;close all;t0 =

28、 -2; t1 = 4; dt = 0.01;t = t0:dt:t1;x = u(t)-u(t-1);h = t.*(u(t)-u(t-1);y = dt*conv(x,h); % compute the convolution of x(t) and h(t)subplot(221)plot(t,x), grid on, title(signal x(t), axis(t0,t1,-0.2,1.2)subplot(222)plot(t,h), grid on, title(signal h(t), axis(t0,t1,-0.2,1.2)subplot(212)t = 2*t0:dt:2*

29、t1; % again specify the time range to be suitable to the % convolution of x and h.plot(t,y), grid on, title(the convolution of x(t) and h(t), axis(2*t0,2*t1,-0.1,0.6), xlabel(time t sec)在有些时候,做卷积和运算的两个序列中,可能有一个序列或者两个序列都非常长,甚至是无限长,matlab处理这样的序列时,总是把它看作是一个有限长序列,具体长度由编程者确定。实际上,在信号与系统分析中所遇到的无限长序列,通常都是满足

30、绝对可和或绝对可积条件的信号。因此,对信号采取这种截短处理尽管存在误差,但是通过选择合理的信号长度,这种误差是能够减小到可以接受的程度的。若这样的一个无限长序列可以用一个数学表达式表示的话,那么,它的长度可以由编程者通过指定时间变量n的范围来确定。例如,对于一个单边实指数序列xn = 0.5nun,通过指定n的范围为0 n 100,则对应的xn的长度为101点,虽然指定更宽的n的范围,xn将与实际情况更相符合,但是,注意到,当n大于某一数时,xn之值已经非常接近于0了。对于序列xn = 0.5nun,当n = 7时,x7 = 0.0078,这已经是非常小了。所以,对于这个单边实指数序列,指定更

31、长的n的范围是没有必要的。当然,不同的无限长序列具有不同的特殊性,在指定n的范围时,只要能够反映序列的主要特征就可以了。3.4 用线性常系数微分方程描述lti系统线性常系数微分方程或差分方程是描述lti系统的另一个时域模型。一个连续时间lti系统,它的输入信号x(t)输出信号y(t)关系可以用下面的微分方程来表达 1.12式1.12中,max (n, m)定义为系统的阶。式1.12描述了lti系统输入信号和输出信号的一种隐性关系(implicit relationship)。为了求得系统响应信号的显式表达式(explicit expression),必须对微分方程和差分方程求解。 在matla

32、b中,一个lti系统也可以用系统微分方程的系数来描述,例如,一个lti连续时间系统的微分方程为 matlab则用两个系数向量num = 1和den = 1 3 2来描述该系统,其中num和den分别表示系统微分方程右边和左边的系数,按照微分运算的降阶排列。matlab的内部函数impulse(),step(),initial(),lsim() 可以用来计算并绘制连续时间lti系统的单位冲激响应,单位阶跃响应,零输入响应和任意信号作用于系统的零状态响应。这些函数的用法描述如下:h= impulse(num, den, t) 和 impulse(num, den, t)s = step(num,

33、den, t) 和 step(num, den, t)y = lmis(num, den, x, t) 和 lmis(num, den, x, t)函数impulse(),step()用来计算由num和den表示的lti系统的单位冲激响应和单位阶跃响应,响应的时间范围为0t,其中den和num分别为系统微分方程左右两边的系数向量,t为指定的响应的终点时间。h和s的点数默认值为101点。由此可以计算时间步长为dt = t/(101-1)。不带返回值的函数如impulse(num, den, t)和step(num, den, t)将直接在屏幕上绘制系统的单位冲激响和单位阶跃响应曲线。带返回值的函

34、数如y = lmis(num, den, x, t)和y = lmis(num, den, x, t),用来计算由num和den表示的lti系统在输入信号x作用下的零状态响应。其中t为指定的时间变化范围,x为输入信号,它们的长度应该是相同的。如带返回参数y,则将计算的响应信号保存在y中,若不带返回参数y,则直接在屏幕上绘制输入信号x和响应信号y的波形图。例如,编写程序,计算并绘制由下面的微分方程表示的系统的单位冲激响应h(t),单位阶跃响应s(t)。 matlab范例程序如下:% program1_7% this program is used to compute the impulse r

35、esponse h(t) and the step response s(t) of a % continuous-time lti systemclear, close all;num = input(type in the right coefficient vector of differential equation:);den = input(type in the left coefficient vector of differential equation:);t = 0:0.01:8;x = input(type in the expression of the input signal x(t):);subplot(221), impul

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论