1、信号与系统实验指导书信息科学与工程学院电子信息科学与技术系目 录实 验实验一 常见信号的 MATLAB 表示及运算 1实验二 LTI 系统的响应 9实验三 连续时间信号的频域分析 15实验四 系统的零极点及频率响应特性 20实验五 连 续信号与系统的 S 域分析 24实验六 离散信号与系统的 Z 变换分析 28实验七 语音信号的滤波 33附 录附录一 MATLAB 环境34附录二 MATLAB 常用命令函数表36附录三 基本绘图命令38附录四 多项式的求值、求根和部分分式展开41附录五 符号积分变换42附录六 信号与系统分析常用函数44实验及报告要求:1.预习:实验之前在实验报告上书写实验目的
2、, 实验原理,实验内容及理论计算部分;看懂实验指导书上的例题。2.上机:根据实验指导书及 Matlab 的 help 文件学习函数调用方法,自己编程序实现实验内容的要求。3.报告:将实验程序及输出数据(中间数据可以省略)或图形保存为电子文档,页面设置纸型大小统一为B5,打印并粘 贴在实验报告合适位置(每段程序及图形应标注出相应实验内容);根据实验结果回答思考题。注:要求实验报告书写整洁,在规定时间内完成并上交。根据实验内容及报告完成情况给出实验成绩(优、良、中、差) ,迟交者适当降低当次成绩,不交者当次成绩为 0,所有实验成绩经综合后将以 15的比例记入本课程期末综合成绩中。1实验一 常见信号
3、的 MATLAB 表示及运算一、实验目的1熟悉常见信号的意义、特性及波形2学会使用 MATLAB 表示信号的方法并绘制信号波形3. 掌握使用 MATLAB 进行信号基本运算的指令4. 熟悉用 MATLAB 实现卷积积分的方法二、实验原理信号一般是随时间而变化的某些物理量。按照自变量的取值是否连续,信号分为连续时间信号和离散时间信号,一般用 和 来表示。若对信号进行时域分析,就需要绘制其波形,如果信号比较复()ftk杂,则手工绘制波形就变得很困难,且难以精确。MATLAB 强大的图形处理功能及符号运算功能,为实现信号的可视化及其时域分析提供了强有力的工具。根据 MATLAB 的数值计算功能和符号
4、运算功能,在 MATLAB 中,信号有两种表示方法,一种是用向量来表示,另一种则是用符号运算的方法。在采用适当的 MATLAB 语句表示出信号后,就可以利用MATLAB 中的绘图命令绘制出直观的信号波形了。下面分别介绍连续时间信号和离散时间信号的MATLAB 表示及其波形绘制方法。1.连续时间信号所谓连续时间信号,是指其自变量的取值是连续的,并且除了若干不连续的点外,对于一切自变量的取值,信号都有确定的值与之对应。从严格意义上讲,MATLAB 并不能处理连续信号。在 MATLAB中,是用连续信号在等时间间隔点上的样值来近似表示的,当取样时间间隔足够小时,这些离散的样值就能较好地近似出连续信号。
5、在 MATLAB 中连续信号可用向量或符号运算功能来表示。 向量表示法对于连续时间信号 ,可以用两个行向量 f 和 t 来表示,其中向量 t 是用形如 的命令定()ft 12:tpt义的时间范围向量,其中, 为信号起始时间, 为终止时间,p 为时间间隔。向量 f 为连续信号 在12 ()f向量 t 所定义的时间点上的样值。例如:对于连续信号 ,我们可以将它表示成行sin()()tftSat向量形式,同时用绘图命令 plot()函数绘制其波形。其程序如下:t1=-10:0.5:10; %定义时间 t 的取值范围:-1010 ,取样间隔为 0.5, %则 t1 是一个维数为 41 的行向量f1=s
6、in(t1). /t1; %定义信号表达式,求出对应采样点上的样值,%同时生成与向量 t1 维数相同的行向量 f1figure(1); %打开图形窗口 1plot(t1,f1); %以 t1 为横坐标,f1 为纵坐标绘制 f1 的波形t2=-10:0.1:10; %定义时间 t 的取值范围:-1010 ,取样间隔为 0.1, %则 t2 是一个维数为 201 的行向量f2=sin(t2). /t2; %定义信号表达式,求出对应采样点上的样值2%同时生成与向量 t2 维数相同的行向量 f2figure(2); %打开图形窗口 2plot(t2,f2); %以 t2 为横坐标,f2 为纵坐标绘制
7、f2 的波形运行结果如下:图 1-1 图 1-2说明: plot 是常用的绘制连续信号波形的函数。 严格说来,MATLAB 不能表示连续信号,所以,在用 plot( )命令绘制波形时,要对自变量 t 进行取值,MATLAB 会分别计算对应点上的函数值,然后将各个数据点通过折线连接起来绘制图形,从而形成连续的曲线。因此,绘制的只是近似波形,而且,其精度取决于 t 的取样间隔。t 的取样间隔越小,即点与点之间的距离越小,则近似程度越好,曲线越光滑。例如:图 1-1 是在取样间隔为 p=0.5 时绘制的波形,而图 1-2 是在取样间隔 p=0.1 时绘制的波形,两相对照,可以看出图 1-2 要比图
8、1-1 光滑得多。 在上面的 f=sin(t). /t 语句中,必须用 点除符号,以表示是两个函数对应点上的值相除。 符号运算表示法如果一个信号或函数可以用符号表达式来表示,那么我们就可以用前面介绍的符号函数专用绘图命令 ezplot()等函数来绘出信号的波形。例如:对于连续信号 ,我们也可以用符号表sin()()tftSat达式来表示它,同时用 ezplot()命令绘出其波形。其 MATLAB 程序如下:syms t ; %符号变量说明f=sin(t)/t ; %定义函数表达式ezplot(f,-10,10); %绘制波形,并且设置坐标轴显示范围运行结果如下:图 1-3 常见信号的 MATL
9、AB 表示3对于普通的信号,应用以上介绍的两种方法即可完成计算函数值或绘制波形,但是对于一些比较特殊的信号,比如单位阶跃信号(t) 、符号函数 sgn(t)等,在 MATLAB 中这些信号都有专门的表示方法。 单位阶跃信号单位阶跃信号的定义为: ,单位阶跃信号是信号分析的基本信号之一,在信号与10()tt系统分析中有着非常重要的作用,通常,我们用它来表示信号的定义域,简化信号的时域表示形式。例如:可以用两个不同延时的单位阶跃信号来表示一个矩形门信号,即: 2()1)()Gtt在 MATLAB 中,可通过多种方法得到单位阶跃信号,下面分别介绍。方法一: 调用 Heaviside(t)函数在 MA
10、TLAB 的 Symbolic Math Toolbox 中,有专门用于表示单位阶跃信号的函数,即 Heaviside(t)函数,用它即可方便地表示出单位阶跃信号以及延时的单位阶跃信号,并且可以方便地参加有关的各种运算过程。首先定义函数 Heaviside(t) 的 m 函数文件,该文件名应与函数名同名即 Heaviside.m。%定义函数文件,函数名为 Heaviside,输入变量为 x,输出变量为 yfunction y= Heaviside(t) y=(t0); %定义函数体,即函数所执行指令%此处定义 t0 时 y=1,t=0 时 y=0,注意与实际的阶跃信号定义的区别。例 用 MAT
11、LAB 画出单位阶跃信号的波形,其程序如下:ut=sym(Heaviside(t); %定义单位阶跃信号(要用符号函数定义法)ezplot(ut,-2,10) %绘制单位阶跃信号在-210 范围之间的波形运行结果如下:例 用 MATLAB 画出信号 的波形()2)3(5)ftt其程序如下:f=sym(Heaviside(t+2)-3*Heaviside(t-5); %定义函数表达式ezplot(f,-4,20) %绘制函数在 -420 范围之间的波形运行结果如下: 4方法二:数值计算法在 MATLAB 中,有一个专门用于表示单位阶跃信号的函数,即 stepfun( )函数,它是用数值计算法表示
12、的单位阶跃函数 。其调用格式为:()tstepfun(t,t0) 其中,t 是以向量形式表示的变量, t0 表示信号发生突变的时刻,在 t0 以前,函数值小于零,t0 以后函数值大于零。有趣的是它同时还可以表示单位阶跃序列 ,这只要将自变量以及取样间隔设定为整数即()k可。有关单位阶跃序列 的表示方法,我们后面有专门论述,下面通过一个例子来说明如何调用()kstepfun( )函数来表示单位阶跃函数。例 用 stepfun( )函数表示单位阶跃信号,并绘出其波形程序如下:t=-1:0.01:4; %定义时间样本向量t0=0; %指定信号发生突变的时刻ut=stepfun(t,t0); %产生单
13、位阶跃信号 plot(t,ut) %绘制波形axis(-1,4,-0.5,1.5) %设定坐标轴范围运行结果如下:例 绘出门 函数 的波形()2)()ftt程序如下:t=-4:0.01:4; %定义时间样本向量t1=-2; %指定信号发生突变的时刻u1=stepfun(t,t1); %产生左移位的阶跃信号 (t+2)t2=2; %指定信号发生突变的时刻u2=stepfun(t,t2); %产生右移位的阶跃信号 (t-2)g=u1-u2; %表示门函数plot(t,g) %绘制门函数的波形axis(-4,4,-0.5,1.5) %设定坐标轴范围-4x4 ,-0.5y1.55运行结果如下: 符号函
14、数符号函数的定义为: 10sgn()tt在 MATLAB 中有专门用于表示符号函数的函数 sign() ,由于单位阶跃信号 (t)和符号函数两者之间存在以下关系: ,因此,利用这个函数就可以很容易地生成单位阶跃信号。下面举个12()()tt例子来说明如何利用 sign()函数生成单位阶跃信号,并同时绘制其波形。举例:利用 sign()函数生成单位阶跃信号,并分别绘出两者的波形MATLAB 程序如下: t=-5:0.01:5; %定义自变量取值范围及间隔,生成行向量 tf=sign(t); %定义符号信号表达式,生成行向量 ffigure(1); %打开图形窗口 1plot(t,f), %绘制符
15、号函数的波形axis(-5,5,-1.5,1.5) %定义坐标轴显示范围s=1/2+1/2*f; %生成单位阶跃信号figure(2); %打开图形窗口 2plot(t,s), axis(-5,5,-0.5,1.5) %定义坐标轴显示范围运行结果如下:2.离散时间信号离散时间信号又叫离散时间序列,一般用 表示,其中变量 k 为整数,代表离散的采样时间点()fk(采样次数)。在 MATLAB 中,离散信号的表示方法与连续信号不同,它无法用符号运算法来表示,而只能采用数值计算法表示,由于 MATLAB 中元素的个数是有限的,因此,MATLAB 无法表示无限序列;另外,在绘制离散信号时必须使用专门绘
16、制离散数据的命令,即 stem()函数,而不能用 plot()函数。下面通过一些常用离散信号来说明如何用 MATLAB 来实现离散信号的表示,以及可视化。6 单位序列 (k)单位序列 (k)的定义为 10()k下面是用 MATLAB 绘制单位序列 (k) 的 MATLAB 程序:k1=-5;k2=5; %定义自变量的取值范围k=k1:k2; %定义自变量的取值范围及取样间隔(默认为 1),并生成行向量n=length(k); %取向量的维数f=zeros(1,n); %生成与向量 k 的维数相同地零矩阵,给函数赋值f(1,6)=1; %在 k=0 时刻,信号赋值为 1stem(k,f,fill
17、ed) %绘制波形%filled定义点的形状,可通过 help 文件查询其它形状的描述axis(k1,k2,0,1.5) %定义坐标轴显示范围运行结果如下:如果要绘制移位的单位序列 (k+k0)的波形,只要将以上程序略加修改即可,例如要绘制信号 (k+2)的图形,可将以上程序改为:k1=-5;k2=5; %定义自变量的取值范围k0=3; %定义平移量k=k1:k2; %定义自变量的取值范围及取样间隔(默认为 1),并生成行向量n=length(k); %取向量的维数f=zeros(1,n); %生成与向量 k 的维数相同的零矩阵,给函数赋值f(1, -k0-k1+1)=1; %在 k=k0 时
18、刻,信号赋值为 1stem(k,f,filled) %绘制波形axis(k1,k2,0,1.5) %定义坐标轴显示范围 单位阶跃序列 (k)单位阶跃序列 (k)的定义为 10()k下面是绘制单位阶跃序列 (k+k0) 的 MATLAB 程序:k1=-3;k2=10; k0=0; %定义起止时刻和跃变时刻k=k1:-k0-1; kk=-k0:k2; n=length(k); %取 k=k0 点以前向量的维数nn=length(kk); %取 k=k0 点以后(含 k=k0 点)向量的维数u=zeros(1,n); %在 k=k0 以前,信号赋值为 07uu=ones(1,nn); %在 k=k0
19、 以后,信号赋值为 1stem(k,u,filled) %绘制 k=k0 以前信号的波形hold on %保持图形窗口,以便在同一图形窗口绘制多个图形stem(kk,uu,filled) %绘制 k=k0 以后(含 k=k0 点)信号的波形hold off %图形窗口解冻axis(k1,k2,0,1.5) %设置坐标轴显示范围运行结果如下:注意:以上介绍了几个常用的绘图命令:plot,ezplot,stairs ,stem,其中,绘制连续信号得到光滑的曲线时用 plot 命令;显示连续信号中的不连续点时用 stairs 命令较好;绘制离散信号波形用 stem 命令;当绘制用 MATLAB 符号
20、表达式表达的信号时要用 ezplot 命令。3.卷积积分信号的卷积是数学上的一种积分运算,两个信号的卷积定义为: 1212()()()ytftftd信号的卷积运算在系统分析中主要用于求解系统的零状态响应。一般情况,卷积积分的运算比较困难,但在 MATLAB 中则变得十分简单, MATLAB 中是利用 conv 函数来实现卷积的。功能:实现两个函数 和 的卷积。1()ft2ft格式:g=conv(f1,f2) 说明:f1=f 1(t),f2=f2(t) 表示两个函数,g=g(t)表示两个函数的卷积结果。例题:已知两信号 , ,求卷积 。()()ftt2()(3)ftt12()()gtftMATL
21、AB 程序如下:t1=1:0.01:2; t2=2:0.01:3;t3=3:0.01:5; %两信号卷积结果自变量 t 区间应为:两信号起始时刻之% 和两信号终止时刻之和请自行推导该结论f1=ones(size(t1); %高度为一的门函数,时间从 t=1 到 t=2f2=ones(size(t2); %高度为一的门函数,时间从 t=2 到 t=3g=conv(f1,f2); %对 f1 和 f2 进行卷积subplot(3,1,1),plot(t1,f1); % 画 f1 的波形subplot(3,1,2),plot(t2,f2); % 画 f2 的波形subplot(3,1,3),plot
22、(t3,g); % grid on; 画 g 的波形8三、实验内容1.分别用 MATLAB 的向量表示法和符号运算功能,表示并绘出下列连续时间信号的波形: 2()(tfte()cos)(4)2tftt costft3ftt2.分别用 MATLAB 表示并绘出下列离散时间信号的波形: 12()()kf()(8)ftk sin4f2f3.已知信号 f(t)的波形如下图所示,试用 MATLAB 绘出满足下列要求的信号波形。 ()t 2f (其中 a 的值分别为 a0.5 和 a2)t (0.51)f4.已知两信号 , ,求卷积积分 ,并与例题1()(ftt2)(1)ftt12()()gtft比较。5.已知两信号 , ,求卷积积分 。1()ft20()()tteft12()()tft6.已知 ,求两序列的卷积和 。12(),()1,345fkfk四、预习要求 1.熟悉常见信号的意义、特性及用 MATLAB 软件表示的方法2.熟悉用 MATLAB 软件绘制信号波形的方法3.编写 MATLAB 程序五、实验报告要求1.简述实验目的及实验原理2.抄写实验内容,写出程序清单3.记录信号波形4.实验总结(收获及体会)