信号与~系统实验教程(MATLAB).doc
|信 号 与 系 统实 验 教 程目 录实验一:连续时间信号与系统的时域分析-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三、实验步骤及内容-34四、实验报告要求-482实验三:连续时间 LTI 系统的频域分析 -49一、实验目的及要求-49二、实验原理-491、连续时间 LTI 系统的频率响应-492、LTI 系统的群延时-503、用 MATLAB 计算系统的频率响应-50三、实验步骤及内容-51四、实验报告要求-58实验四:调制与解调以及抽样与重建-59一、实验目的及要求-59二、实验原理-591、信号的抽样及抽样定理-592、信号抽样过程中的频谱混叠-623、信号重建- -624、调制与解调-645、通信系统中的调制与解调仿真- -66三、实验步骤及内容-66四、实验报告要求-75实验五:连续时间 LTI 系统的复频域分析 -76一、实验目的及要求-76二、实验原理-761、连续时间 LTI 系统的复频域描述-762、系统函数的零极点分布图- -773、拉普拉斯变换与傅里叶变换之间的关系-784、系统函数的零极点分布与系统稳定性和因果性之间的关系-795、系统函数的零极点分布与系统的滤波特性-806、拉普拉斯逆变换的计算-81三、实验步骤及内容-82四、实验报告要求-87附录:授课方式和考核办法-883实验一 信号与系统的时域分析一、实验目的1、熟悉和掌握常用的用于信号与系统时域仿真分析的 MATLAB 函数;2、掌握连续时间和离散时间信号的 MATLAB 产生,掌握用周期延拓的方法将一个非周期信号进行周期信号延拓形成一个周期信号的 MATLAB 编程;3、牢固掌握系统的单位冲激响应的概念,掌握 LTI 系统的卷积表达式及其物理意义,掌握卷积的计算方法、卷积的基本性质;4、掌握利用 MATLAB 计算卷积的编程方法,并利用所编写的 MATLAB 程序验证卷积的常用基本性质;掌握 MATLAB 描述 LTI 系统的常用方法及有关函数,并学会利用 MATLAB 求解 LTI 系统响应,绘制相应曲线。基本要求:掌握用 MATLAB 描述连续时间信号和离散时间信号的方法,能够编写MATLAB 程序,实现各种信号的时域变换和运算,并且以图形的方式再现各种信号的波形。掌握线性时不变连续系统的时域数学模型用 MATLAB 描述的方法,掌握卷积运算、线性常系数微分方程的求解编程。二、实验原理信号(Signal)一般都是随某一个或某几个独立变量的变化而变化的,例如,温度、压力、声音,还有股票市场的日收盘指数等,这些信号都是随时间的变化而变化的,还有一些信号,例如在研究地球结构时,地下某处的密度就是随着海拔高度的变化而变化的。一幅图片中的每一个象素点的位置取决于两个坐标轴,即横轴和纵轴,因此,图像信号具有两个或两个以上的独立变量。在信号与系统课程中,我们只关注这种只有一个独立变量(Independent variable)的信号,并且把这个独立变量统称为时间变量(Time variable) ,不管这个独立变量是否是时间变量。在自然界中,大多数信号的时间变量都是连续变化的,因此这种信号被称为连续时间信号(Continuous-Time Signals)或模拟信号(Analog Signals) ,例如前面提到的温度、压力和声音信号就是连续时间信号的例子。但是,还有一些信号的独立时间变量是离散变化的,这种信号称为离散时间信号。前面提到的股票市场的日收盘指数,由于相邻两个交易日的日收盘指数相隔 24 小时,这意味着日收盘指数的时间变量是不连续的,因此日收盘指数是离散时间信号。而系统则用于对信号进行运算或处理,或者从信号中提取有用的信息,或者滤出信号中某4些无用的成分,如滤波,从而产生人们所希望的新的信号。系统通常是由若干部件或单元组成的一个整体(Entity) 。系统可分为很多不同的类型,例如,根据系统所处理的信号的不同,系统可分为连续时间系统(Continuous-time system)和离散时间系统( Discrete-time system) ,根据系统所具有的不同性质,系统又可分为因果系统(Causal system)和非因果系统(Noncausal system) 、稳定系统 (Stable system)和不稳定系统(Unstable system) 、线性系统(Linear system)和非线性系统(Nonlinear system) 、时变系统(Time-variant system)和时不变系统(Time-invariant system)等等。然而,在信号与系统和数字信号处理中,我们所分析的系统只是所谓的线性时不变系统,这种系统同时满足两个重要的基本性质,那就是线性性和时不变性,通常称为线性时不变(LTI)系统。1. 信号的时域表示方法1.1 将信号表示成独立时间变量的函数例如 x(t)=sin(t) 和 xn=n(0.5)nun分别表示一个连续时间信号和一个离散时间信号。在 MATLAB 中有许多内部函数,可以直接完成信号的这种表达,例如:sin():正弦信号cos():余弦信号exp():指数信号1.2 用信号的波形图来描述信号用函数曲线表示一个信号,图 1.1 就是一个连续时间信号和一个离散时间信号的波形图。图 1.1 连续时间信号与离散时间信号的波形图51.3 将信号用一个数据序列来表示对于离散时间信号,还可以表示成一个数的序列,例如:xn=., 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% 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:0.2; % 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 为纵轴的显示终点。有时,为了使图形具有可读性,需要在所绘制的图形中,加上一些网格线来反映信号的幅度大小。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)0,)(1ttd61.1(b)0,1)(ttu这里分别给出相应的简单的产生单位冲激信号和单位阶跃信号的扩展函数。产生单位冲激信号的扩展函数为:function y = delta(t)dt = 0.01;y = (u(t)-u(t-dt)/dt;产生单位阶跃信号的扩展函数为:% 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 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_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 time, 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')7由于在程序的 stem(n,x,'.') 语句中加有'.' 选项,因此绘制的图形中每根棒条线的顶端是一个实心点。如果需要在序列的前后补较多的零的话,可以利用函数 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 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')xlabel ('Time index n')离散时间单位阶跃信号 un定义为1.20,1nu离散时间单位阶跃信号 un除了也可以直接用前面给出的扩展函数来产生,还可以利用MATLAB 内部函数 ones(1,N) 来实现。这个函数类似于 zeros(1,N),所不同的是它产生的矩阵的所有元素都为 1。值得注意的是,利用 ones(1,N) 来实现的单位阶跃序列并不是真正的单位阶跃序列,而是一个长度为 N 单位门(Gate)序列,也就是 un-un-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其中,t 0 为位移量。若 t0 为正数,则 y(t)等于将 x(t)右移 t0 秒之后的结果。反之,若 t0 为负数,8则 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% 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,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)')subplot (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)中的时间变量 t 和 n,即用-t 和-n 替代原来的 t和 n,这样绘制出来的图形,看起来就是原信号经时域反褶后的版本。方法二,直接利用原信号与其反褶信号的数学关系式来实现。这种方法最符合信号反褶运算的实际意义。方法三,使用 MATLAB 内部函数 fliplr()来实现信号的反褶运算。其用法如下 :y = fliplr(x):其中 x 为原信号 x(t)或 xn,而 y 则为 x 的时域反褶。需要说明的是,函数fliplr()对信号作时域反褶,仅仅将信号中各个元素的次序作了一个反转,这种反转处理是独立9于时间变量 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) = 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)在时间轴上的扩展同时翻转而得到;当 a < -1 时, y(t) = x(at),y(t)是将 x(t)在时间轴上的压缩同时翻转而得到;由此可见,信号的时域尺度变换,除了对信号进行时域压缩或扩展外,还可能包括对信号的时域反褶运算。实际上,MATLAB 完成式 1.5 的运算,并不需要特殊的处理,按照数学上的常规方法即能完成。2.3.4 周期信号在信号与系统课程中,周期信号是一类非常重要的信号。给定一个信号 x(t)或 xn,如果满足x(t) = x(t+kT) 1.6xn = xn+kN 1.7则该信号叫做周期信号。其中,k 为任意整数,T 和 N 为常数,通常称为信号的基本周期或最小周期。周期信号可以看作是一个时限的非周期信号经过周期延拓之后形成的。在数字信号处理中,周期延拓这一信号处理方法非常重要。下面的程序段,就是将一个非周期信号 x1(t) = e-2tu(t)-u(t-2)经过周期延拓之后而得到一个周期信号:clear, close all;t = -4:0.001:4;T = 2; x = 0;for k = -2:2;x = x+exp(-2*(t-k*T).*(u(t-k*T)-u(t-(k+1)*T);end仔细阅读该程序,可以发现其算法就是:1.8 kTtxt)()(1由于 k 无法计算到无穷,而是以有限值加以替代,反映到有限宽度图形窗口中得到的效果完全符合要求。103 LTI 系统的时域描述3.1 线性时不变系统在分析 LTI 系统时,有关 LTI 系统的两个重要的性质是必须首先掌握和理解的。这就是线性性(Linearity )和时不变性(Time-invariance) 。所谓线性性就是指系统同时满足齐次性和叠加性。这可以用下面的方法来描述。假设系统在输入信号 x1(t)作用时的响应信号为 y1(t),在输入信号 x2(t)作用时的响应信号为 y2(t),给定两个常数 a 和 b,如果当输入信号为 x(t)时系统的响应信号为 y(t),且满足x(t) = x1(t) + x2(t) 1.9(a)y(t) = y1(t) + y2(t) 1.9(b)则该系统具有叠加性(Additivity) 。如果满足x(t) = ax1(t) 1.10(a)y(t) = ay1(t) 1.10(b)则该系统具有齐次性(Homogeneity) 。一个系统如果是线性系统的话,那么这个系统必须同时具有叠加性和齐次性。又假设系统在输入信号 x(t)作用时的响应信号为 y(t),对一个给定时间常数 t0,如果当输入信号为 x(t-t0)时,系统的响应信号为 y(t-t0)的话,则该系统具有时不变性。同时具有线性性和时不变性的系统,叫做线性时不变系统,简称 LTI 系统。LTI 系统有连续时间 LTI 系统和离散时间 LTI 系统之分。连续时间系统的输入和输出信号都必须是连续时间信号,而离散时间系统的输入和输出信号都必须是离散时间信号。3.2 LTI 系统的单位冲激响应和卷积模型给定一个连续时间 LTI 系统,在系统的初始条件为零时,用单位冲激信号 (t)作用于系统,此时系统的响应信号称为系统的单位冲激响应(Unit impulse response) ,一般用 h(t)来表示。需要强调的是,系统的单位冲激响应是在激励信号为 (t)时的零状态响应(Zero-state response) 。离散时间 LTI 系统的单位冲激响应的定义与连续时间 LTI 系统的单位冲激响应相同,只是离散时间单位冲激函数 n的定义有所不同。系统的单位冲激响应是一个非常重要的概念,对于一个系统,如果我们知道了该系统的单位冲激响应,那么,该系统对任意输入信号的响应信号都可以求得。也就是说,系统的输入信号 x(t)、xn和输出信号 y(t)、yn之间的关系可以用一个数学表达式来描述,这个数学表达式为