1、信 号 与 系 统实 验 指 导 书长春工程学院电气与信息学院电工电子实验教学中心二八年二月十日目 录MATLAB 软件仿真实验部分 .1实验一 信号的基本运算 .1实验二 周期信号的傅里叶级数及 GIBBS 现象 .12实验三 信号抽样及 信号 重建 .19实验四 信号与系统复频域分析 .26EL-SS-III 实验箱硬件实验部分 .31一、硬件资源 .31二、软件安装及使用 .34三、实验系统部分 .40实验一 滤波器 .41实验二 一阶电路的瞬态响应 .45实验三 一阶电路的零输入响应、零状态响应及完全响应 .50实验四 二阶电路的瞬态响应 .52实验五 二阶网络函数的模拟 .55实验六
2、 方波信号的分 解 .59实验七 方波信号的合成 .62实验八 抽 样定理 .64实验九 数据采集 .69附录一 实验结果参考 .70附录二 AD/DA 卡调试说明 .831MATLAB 软件仿真实验部分实验一 信号的基本运算一、实验目的1、熟悉掌握常用的用于信号与系统时域仿真分析的 MATLAB 函数。2、掌握用 MATLAB 描述连续时间信号和离散时间信号的方法,能够编写 MATLAB 程序进行仿真。3、熟悉实现各种信号的时域变换和运算的原理和方法,并在 MATLAB 环境下仿真。4、利用延拓的方法将时限信号变成一个周期函数。5、利用 MATLAB 的卷积工具实现两个信号的卷积运算。二、实
3、验原理1、在信号与系统课程中,单位阶跃信号 u(t) 和单位冲激信号 (t) 是二个非常有用的信号。它们的定义如下1.1(a)0,)(ttd1.1(b),1tu这里分别给出相应的简单的产生单位冲激信号和单位阶跃信号的扩展函数。产生单位冲激信号的扩展函数为: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 为
4、文件名保存在 work 文件夹中,以后,就可以像教材中的方法使用单位冲激信号 (t) 和单位阶跃信号 u(t)。2、离散时间单位阶跃信号 un定义为1.20,1nu2离散时间单位阶跃信号 un除了也可以直接用前面给出的扩展函数来产生,还可以利用MATLAB 内部函数 ones(1,N) 来实现。这个函数类似于 zeros(1,N),所不同的是它产生的矩阵的所有元素都为 1。值得注意的是,利用 ones(1,N) 来实现的单位阶跃序列并不是真正的单位阶跃序列,而是一个长度为 N 单位门(Gate)序列,也就是 un-un-N。但是在一个有限的图形窗口中,我们看到的还是一个单位阶跃序列。3、信号的
5、基本加法和乘法运算信号 f1 与 f2 之和(瞬时和)是指同一瞬时两个信号之值对应相加所构成的“和信号”即f3=f1+f2;信号 f1 与 f2 之积是指同一瞬时两信号之值对应相乘所构成的 “积信号”即 f3= f1*f2;离散序列相加(或相乘)可采用对应样点的值分别相加(或相乘)的方法来计算。用 MATLAB 程序仿真下面运算: f1=sin(t),f2=sin(t),f3=f1+f2,f4=f1*f2;x=0 1 1 1 1 1,h=2 1 3 4 1 1,y=x+h,g=x.*h;连续信号加法乘法实现程序% Programt=0:0.01:4*pi;f1=sin(t);f2= sin(t
6、);f3=f1+f2;f4=f1.*f2;subplot(221);plot(t,f1);title(f1 signal);subplot(222);plot(t,f2);title(f2 signal);subplot(223);plot(t,f3);title(f1+f2 signal);subplot(224);plot(t,f4);title(f1*f2 signal);运行后的结果:图 1-1 程序运行结果图离散序列加法乘法实现程序3x=0 1 1 1 1 1;h=2 1 3 4 1 1;y=x+h,g=x.*h;subplot(221);stem(x);title(x signal
7、);subplot(222);stem(h);title(h signal);subplot(223);stem(y);title(x+h signal);subplot(224);stem(g);title(x.*h signal);运行后的结果:图 1-2 程序运行结果图4、信号的时移信号的时移可用下面的数学表达式来描述:设一个连续时间信号为 x(t),它的时移 y(t) 表示为:y(t) = x(t - t0) 1.3其中,t 0 为位移量。若 t0 为正数,则 y(t)等于将 x(t)右移 t0 秒之后的结果。反之,若 t0 为负数,则 y(t)等于将 x(t)左移 t0 秒之后的结果
8、。在 MATLAB 中,时移运算与数学上习惯表达方法完全相同。对给定一个连续时间信号 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)。实现程序:% Programclear,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 sec
9、ond to get x1(t)4x2 = 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 ( x = exp(-0.5*t).*u(t)subplot (312)plot (t,x1) % Plot x1(t)grid on,title ( x1 = exp(-0.5*(t+2).*u(t+2) )subplot (313)plot (t,x2) % Plot x2(t)grid on,title (
10、 x2 = exp(-0.5*(t-2).*u(t-2)xlabel (Time t (sec)程序运行结果:图 1-3 程序运行结果图注意:在运行上面的程序时,一定在所在的路径下创建 u(t)的子函数:function y = u(t)y = (t=0); % y = 1 for t 0, else y = 0保存名为 u.m5、信号的时域反褶对一个信号 xn的反褶运算在数学上表示为yn = x-n 1.4这种反褶运算,用 MATLAB 实现起来也是非常简单的。有多种方法可以实现信号的反褶运算。方法一,修改绘图函数 plot(t,x)和 stem(n,x)中的时间变量 t 和 n,即用-t
11、和-n 替代原来的 t和 n,这样绘制出来的图形,看起来就是原信号经时域反褶后的版本。方法二,直接利用原信号与其反褶信号的数学关系式来实现。这种方法最符合信号反褶运算的实际意义。方法三,使用 MATLAB 内部函数 fliplr()来实现信号的反褶运算。其用法如下 :y = fliplr(x):其中 x 为原信号 x(t)或 xn,而 y 则为 x 的时域反褶。需要说明的是,函数5fliplr()对信号作时域反褶,仅仅将信号中各个元素的次序作了一个反转,这种反转处理是独立于时间变量 t 和 n 的。因此,如果信号与其时间变量能够用一个数学函数来表达的话,那么建议将时间变量 t 和 n 的范围指
12、定在一个 正负对称的时间区间即可。分别编写程序实现 m=sin(t);n=sin(-t);xn=1 2 3 4;x-n,分析所画信号波形,程序如下:t=0:0.01:4*pi;n=0:1:3;m=sin(t);x=1 2 3 4;subplot(222);plot(t,m);title(sin(t) signal);subplot(221);plot(-t,m);title(sin(-t) signal);subplot(224);stem(n,x);title(xn signal);subplot(223);stem(-n,x);title(x-n signal);程序运行结果:图 1-4
13、程序运行结果图6、信号的时域尺度变换信号 x(t)的时域尺度变换在数学描述为y(t) = x(at), 1.5其中 a 为任意常数。根据 a 的不同取值,这种时域尺度变换对信号 x(t)具有非常不同的影响。当 a = 1 时,y(t) = x(t);6当 a = -1 时, y(t) = x(-t),即 y(t)可以通过将 x(t)反褶运算而得到;当 a 1 时,y(t) = x(at),y(t)是将 x(t)在时间轴上的压缩而得到;当 0 0 时图形右移, t 0 时图形左移。4. 计算两个信号重叠部分的乘积 x()h(t-);5. 完成相乘后图形的积分。对于两个时限信号(Time-limi
14、ted signal) ,按照上述的五个步骤,作卷积积分运算时,关键是正确确定不同情况下的积分限。只要正确地确定了积分限都能得到正确定积分结果。尽管如此,在时域中计算卷积积分,总体上来说是一项比较困难的工作。程序 convlution_demo 用来演示上述作卷积积分运算的五个步骤。本程序较为复杂,不建议读者读懂该程序,只需执行这个程序,观看程序执行过程中有关卷积积分的运算过程,以便于理解这五个步骤。借助 MATLAB 的内部函数 conv()可以很容易地完成两个信号的卷积积分运算。其语法为:y = conv(x,h)。其中 x 和 h 分别是两个作卷积运算的信号,y 为卷积结果。为了正确地运用这个函数计算卷积,这里有必要对 conv(x,h)做一个详细说明。conv(x,h) 函数实际上是完成两个多项式的乘法运算。例如,两个多项式 p1 和 p2 分别为:和 43231ssp3422ssp这两个多项式在 MATLAB 中是用它们的系数构成一个 行向量来表示的,如果用 x 来表示多项式 p1,h 表示多项式 p2,则 x 和 h 分别为