信息科学与工程学院 电子信息科学与技术系
信号与系统实验指导书
目 录
实 验
实验一 常见信号的MATLAB表示及运算„„„„„„„„„„„„„„„„„„„„„„„ 1 实验二 LTI系统的响应„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„ 9 实验三 连续时间信号的频域分析„„„„„„„„„„„„„„„„„„„„„„„„„„ 15 实验四 系统的零极点及频率响应特性„„„„„„„„„„„„„„„„„„„„„„„„ 20 实验五 连续信号与系统的S域分析„„„„„„„„„„„„„„„„„„„„„„„„„ 24 实验六 离散信号与系统的Z变换分析„„„„„„„„„„„„„„„„„„„„„„„„ 28 实验七 语音信号的滤波„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„ 33
附 录
附录一 MATLAB环境„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„34 附录二 MATLAB常用命令函数表„„„„„„„„„„„„„„„„„„„„„„„„„„„„36 附录三 基本绘图命令„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„38 附录四 多项式的求值、求根和部分分式展开„„„„„„„„„„„„„„„„„„„„„„„„„41 附录五 符号积分变换„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„42 附录六 信号与系统分析常用函数„„„„„„„„„„„„„„„„„„„„„„„„„„„„„44
实验及报告要求:
1.预习:实验之前在实验报告上书写实验目的,实验原理,实验内容及理论计算部分;看懂实验指导书上的例题。
2.上机:根据实验指导书及Matlab的help文件学习函数调用方法,自己编程序实现实验内容的要求。 3.报告:将实验程序及输出数据(中间数据可以省略)或图形保存为电子文档,页面设置纸型大小统一为B5,打印并粘贴在实验报告合适位置(每段程序及图形应标注出相应实验内容);根据实验结果回答思考题。
注:要求实验报告书写整洁,在规定时间内完成并上交。根据实验内容及报告完成情况给出实验成绩(优、良、中、差),迟交者适当降低当次成绩,不交者当次成绩为0,所有实验成绩经综合后将以15%的比例记入本课程期末综合成绩中。
实验一 常见信号的MATLAB表示及运算
一、实验目的
1.熟悉常见信号的意义、特性及波形
2.学会使用MATLAB表示信号的方法并绘制信号波形 3. 掌握使用MATLAB进行信号基本运算的指令 4. 熟悉用MATLAB实现卷积积分的方法
二、实验原理
信号一般是随时间而变化的某些物理量。按照自变量的取值是否连续,信号分为连续时间信号和离散时间信号,一般用f(t)和f(k)来表示。若对信号进行时域分析,就需要绘制其波形,如果信号比较复杂,则手工绘制波形就变得很困难,且难以精确。MATLAB强大的图形处理功能及符号运算功能,为实现信号的可视化及其时域分析提供了强有力的工具。
根据MATLAB的数值计算功能和符号运算功能,在MATLAB中,信号有两种表示方法,一种是用向量来表示,另一种则是用符号运算的方法。在采用适当的MATLAB语句表示出信号后,就可以利用MATLAB中的绘图命令绘制出直观的信号波形了。下面分别介绍连续时间信号和离散时间信号的MATLAB表示及其波形绘制方法。 1.连续时间信号
所谓连续时间信号,是指其自变量的取值是连续的,并且除了若干不连续的点外,对于一切自变量的取值,信号都有确定的值与之对应。从严格意义上讲,MATLAB并不能处理连续信号。在MATLAB中,是用连续信号在等时间间隔点上的样值来近似表示的,当取样时间间隔足够小时,这些离散的样值就能较好地近似出连续信号。在MATLAB中连续信号可用向量或符号运算功能来表示。 ⑴ 向量表示法
对于连续时间信号f(t),可以用两个行向量f和t来表示,其中向量t是用形如tt1:p:t2的命令定义的时间范围向量,其中,t1为信号起始时间,t2为终止时间,p为时间间隔。向量f为连续信号f(t)在向量t所定义的时间点上的样值。例如:对于连续信号f(t)Sa(t)量形式,同时用绘图命令plot()函数绘制其波形。其程序如下:
t1=-10:0.5:10; %定义时间t的取值范围:-10~10,取样间隔为0.5,
%则t1是一个维数为41的行向量
f1=sin(t1). /t1; %定义信号表达式,求出对应采样点上的样值, %同时生成与向量t1维数相同的行向量f1 figure(1); %打开图形窗口1
plot(t1,f1); %以t1为横坐标,f1为纵坐标绘制f1的波形 t2=-10:0.1:10; %定义时间t的取值范围:-10~10,取样间隔为0.1, %则t2是一个维数为201的行向量
f2=sin(t2). /t2; %定义信号表达式,求出对应采样点上的样值
1
sin(t)t ,我们可以将它表示成行向
%同时生成与向量t2维数相同的行向量f2 figure(2); %打开图形窗口2
plot(t2,f2); %以t2为横坐标,f2为纵坐标绘制f2的波形
运行结果如下:
图1-1 图1-2
说明:
plot是常用的绘制连续信号波形的函数。
严格说来,MATLAB不能表示连续信号,所以,在用plot( )命令绘制波形时,要对自变量t进行取值,MATLAB会分别计算对应点上的函数值,然后将各个数据点通过折线连接起来绘制图形,从而形成连续的曲线。因此,绘制的只是近似波形,而且,其精度取决于t的取样间隔。t的取样间隔越小,即点与点之间的距离越小,则近似程度越好,曲线越光滑。例如:图1-1是在取样间隔为p=0.5时绘制的波形,而图1-2是在取样间隔p=0.1时绘制的波形,两相对照,可以看出图1-2要比图1-1光滑得多。 在上面的f=sin(t). /t语句中,必须用点除符号,以表示是两个函数对应点上的值相除。 ⑵ 符号运算表示法
如果一个信号或函数可以用符号表达式来表示,那么我们就可以用前面介绍的符号函数专用绘图命令ezplot()等函数来绘出信号的波形。例如:对于连续信号f(t)Sa(t)来表示它,同时用ezplot()命令绘出其波形。其MATLAB程序如下:
syms t ; %符号变量说明 f=sin(t)/t ; %定义函数表达式
ezplot(f,[-10,10]); %绘制波形,并且设置坐标轴显示范围
运行结果如下:
sin(t)t,我们也可以用符号表达式
图1-3
⑶ 常见信号的MATLAB表示
2
对于普通的信号,应用以上介绍的两种方法即可完成计算函数值或绘制波形,但是对于一些比较特殊的信号,比如单位阶跃信号(t)、符号函数sgn(t)等,在MATLAB中这些信号都有专门的表示方法。
单位阶跃信号
单位阶跃信号的定义为:(t)10t0t0 ,单位阶跃信号是信号分析的基本信号之一,在信号与
系统分析中有着非常重要的作用,通常,我们用它来表示信号的定义域,简化信号的时域表示形式。例如:可以用两个不同延时的单位阶跃信号来表示一个矩形门信号,即:G2(t)(t1)(t1)
在MATLAB中,可通过多种方法得到单位阶跃信号,下面分别介绍。 方法一: 调用Heaviside(t)函数
在MATLAB的Symbolic Math Toolbox 中,有专门用于表示单位阶跃信号的函数,即Heaviside(t)函数,用它即可方便地表示出单位阶跃信号以及延时的单位阶跃信号,并且可以方便地参加有关的各种运算过程。
首先定义函数Heaviside(t) 的m函数文件,该文件名应与函数名同名即Heaviside.m。
%定义函数文件,函数名为Heaviside,输入变量为x,输出变量为y function y= Heaviside(t)
y=(t>0); %定义函数体,即函数所执行指令
%此处定义t>0时y=1,t<=0时y=0,注意与实际的阶跃信号定义的区别。
例① 用MATLAB画出单位阶跃信号的波形,其程序如下:
ut=sym('Heaviside(t)'); %定义单位阶跃信号(要用符号函数定义法) ezplot(ut,[-2,10]) %绘制单位阶跃信号在-2~10范围之间的波形
运行结果如下:
例② 用MATLAB画出信号f(t)(t2)3(t5)的波形 其程序如下:
f=sym('Heaviside(t+2)-3*Heaviside(t-5)'); %定义函数表达式
ezplot(f,[-4,20]) %绘制函数在-4~20范围之间的波形
运行结果如下:
3
方法二:数值计算法
在MATLAB中,有一个专门用于表示单位阶跃信号的函数,即stepfun( )函数,它是用数值计算法表示的单位阶跃函数(t)。其调用格式为:
stepfun(t,t0)
其中,t是以向量形式表示的变量,t0表示信号发生突变的时刻,在t0以前,函数值小于零,t0以后函数值大于零。有趣的是它同时还可以表示单位阶跃序列(k),这只要将自变量以及取样间隔设定为整数即可。有关单位阶跃序列(k)的表示方法,我们后面有专门论述,下面通过一个例子来说明如何调用stepfun( )函数来表示单位阶跃函数。
例① 用stepfun( )函数表示单位阶跃信号,并绘出其波形 程序如下:
t=-1:0.01:4; %定义时间样本向量 t0=0; %指定信号发生突变的时刻 ut=stepfun(t,t0); %产生单位阶跃信号 plot(t,ut) %绘制波形 axis([-1,4,-0.5,1.5]) %设定坐标轴范围
运行结果如下:
例② 绘出门函数f(t)(t2)(t2)的波形 程序如下:
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]) %设定坐标轴范围-4 运行结果如下: 符号函数 符号函数的定义为:sgn(t)11t0t0 在MATLAB中有专门用于表示符号函数的函数sign() ,由于单位阶跃信号 (t)和符号函数两者之间存在以下关系:(t)1212sgn(t),因此,利用这个函数就可以很容易地生成单位阶跃信号。下面举个例 子来说明如何利用sign()函数生成单位阶跃信号,并同时绘制其波形。 举例:利用sign()函数生成单位阶跃信号,并分别绘出两者的波形 MATLAB程序如下: t=-5:0.01:5; %定义自变量取值范围及间隔,生成行向量t f=sign(t); %定义符号信号表达式,生成行向量f figure(1); %打开图形窗口1 plot(t,f), %绘制符号函数的波形 axis([-5,5,-1.5,1.5]) %定义坐标轴显示范围 s=1/2+1/2*f; %生成单位阶跃信号 figure(2); %打开图形窗口2 plot(t,s), axis([-5,5,-0.5,1.5]) %定义坐标轴显示范围 运行结果如下: 2.离散时间信号 离散时间信号又叫离散时间序列,一般用f(k) 表示,其中变量k为整数,代表离散的采样时间点(采样次数)。 在MATLAB中,离散信号的表示方法与连续信号不同,它无法用符号运算法来表示,而只能采用数值计算法表示,由于MATLAB中元素的个数是有限的,因此,MATLAB无法表示无限序列;另外,在绘制离散信号时必须使用专门绘制离散数据的命令,即stem()函数,而不能用plot()函数。 下面通过一些常用离散信号来说明如何用MATLAB来实现离散信号的表示,以及可视化。 5 单位序列 (k) 单位序列 (k)的定义为(k)10k0k0 下面是用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时刻,信号赋值为1 stem(k,f,'filled') %绘制波形 %'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时刻,信号赋值为1 stem(k,f,'filled') %绘制波形 axis([k1,k2,0,1.5]) %定义坐标轴显示范围 单位阶跃序列 (k) 单位阶跃序列(k)的定义为(k)10k0k0 下面是绘制单位阶跃序列(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以前,信号赋值为0 6 uu=ones(1,nn); %在k=k0以后,信号赋值为1 stem(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符号表达式表达的信号时要用ezplot命令。 3.卷积积分 信号的卷积是数学上的一种积分运算,两个信号的卷积定义为: y(t)f1(t)f2(t)f1()f2(t)d 信号的卷积运算在系统分析中主要用于求解系统的零状态响应。一般情况,卷积积分的运算比较困难,但在MATLAB中则变得十分简单,MATLAB中是利用conv函数来实现卷积的。 功能:实现两个函数f1(t)和f2(t)的卷积。 格式:g=conv(f1,f2) 说明:f1=f1(t),f2=f2(t) 表示两个函数,g=g(t)表示两个函数的卷积结果。 例题:已知两信号f1(t)(t1)(t2), f2(t)(t2)(t3),求卷积g(t)f1(t)f2(t)。 MATLAB程序如下: t1=1:0.01:2; t2=2:0.01:3; t3=3:0.01:5; %两信号卷积结果自变量t区间应为:[两信号起始时刻之%和~两信号终止时刻之 和]请自行推导该结论 f1=ones(size(t1)); %高度为一的门函数,时间从t=1到t=2 f2=ones(size(t2)); %高度为一的门函数,时间从t=2到t=3 g=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(t3,g); % grid on; 画g的波形 7 三、实验内容 1.分别用MATLAB的向量表示法和符号运算功能,表示并绘出下列连续时间信号的波形: ⑴ f(t)(2et2t)(t) ⑵ f(t)cos(t2)(t)(t4) ⑶ f(t)ecos(t)(t) ⑷ f(t)23t(t2) 2.分别用MATLAB表示并绘出下列离散时间信号的波形: ⑴ f(k)1(k) ⑵ f(t)k(k)(k8) 2 ⑶ f(k)sin(k4)(k) ⑷ f(k)(k2) k3.已知信号f(t)的波形如下图所示,试用MATLAB绘出满足下列要求的信号波形。 ⑴ f(t) ⑵ f(t2) ⑶ f(at) (其中a的值分别为a=0.5和a=2) ⑷ f(0.t5 4.已知两信号f1(t)(t1)(t),f2(t)(t)(t1),求卷积积分g(t)f1(t)f2(t),并与例题比较。 te(t)5.已知两信号f1(t)t(t),f2(t)tet )1t0t0 ,求卷积积分g(t)f1(t)f2(t)。 6.已知f1(k)1,1,1,2,f2(k)1,2,3,4,5,求两序列的卷积和 。 四、预习要求 1.熟悉常见信号的意义、特性及用MATLAB软件表示的方法 2.熟悉用MATLAB软件绘制信号波形的方法 3.编写MATLAB程序 五、实验报告要求 1.简述实验目的及实验原理 2.抄写实验内容,写出程序清单 3.记录信号波形 4.实验总结(收获及体会) 8 实验二 LTI系统的响应 一、 实验目的 1. 熟悉连续时间系统的单位冲激响应、阶跃响应的意义及求解方法 2. 熟悉连续(离散)时间系统在任意信号激励下响应的求解方法 3. 熟悉应用MATLAB实现求解系统响应的方法 二、 实验原理 1.连续时间系统 对于连续的LTI系统,当系统输入为f(t),输出为y(t),则输入与输出之间满足如下的线性常系数微 nm(i)分方程:aiyi0(t)j0bjf(j)(t),当系统输入为单位冲激信号δ(t)时产生的零状态响应称为系统的单位 冲激响应,用h(t)表示。若输入为单位阶跃信号ε(t)时,系统产生的零状态响应则称为系统的单位阶跃响应,记为g(t),如下图所示。 系统的单位冲激响应h(t)包含了系统的固有特性,它是由系统本身的结构及参数所决定的,与系统的输入无关。我们只要知道了系统的冲激响应,即可求得系统在不同激励下产生的响应。因此,求解系统的冲激响应h(t)对我们进行连续系统的分析具有非常重要的意义。 在MATLAB中有专门用于求解连续系统冲激响应和阶跃响应, 并绘制其时域波形的函数impulse( ) 和step( )。如果系统输入为f(t),冲激响应为h(t),系统的零状态响应为y(t),则有:y(t)h(t)f(t)。 若已知系统的输入信号及初始状态,我们便可以用微分方程的经典时域求解方法,求出系统的响应。但是对于高阶系统,手工计算这一问题的过程非常困难和繁琐。 在MATLAB中,应用lsim( )函数很容易就能对上述微分方程所描述的系统的响应进行仿真,求出系统在任意激励信号作用下的响应。lsim( )函数不仅能够求出连续系统在指定的任意时间范围内系统响应的数值解,而且还能同时绘制出系统响应的时域波形图。 以上各函数的调用格式如下: ⑴ impulse( ) 函数 函数impulse( )将绘制出由向量a和b所表示的连续系统在指定时间范围内的单位冲激响应h(t)的时域波形图,并能求出指定时间范围内冲激响应的数值解。 impulse(b,a) 以默认方式绘出由向量a和b所定义的连续系统的冲激响应的时域波形。 impulse(b,a ,t0) 绘出由向量a和b所定义的连续系统在0 ~ t0时间范围内冲激响应的时域波形。 impulse(b,a,t1:p:t2) 绘出由向量a和b所定义的连续系统在t1 ~ t2时间范围内,并且以时间间隔p均匀取样的冲激响应的时域波形。 y=impulse(b,a,t1:p:t2) 只求出由向量a和b所定义的连续系统在t1 ~ t2时间范围内,并且以时间间隔p均匀取样的冲激响应的数值解,但不绘出其相应波形。 9 ⑵ step( ) 函数 函数step( )将绘制出由向量a和b所表示的连续系统的阶跃响应,在指定的时间范围内的波形图,并且求出数值解。和impulse( )函数一样,step( )也有如下四种调用格式: step( b,a) step(b,a,t0) step(b,a,t1:p:t2) y=step(b,a,t1:p:t2) 上述调用格式的功能和impulse( )函数完全相同,所不同只是所绘制(求解)的是系统的阶跃响应g(t),而不是冲激响应h(t)。 ⑶ lsim( )函数 根据系统有无初始状态,lsim( )函数有如下两种调用格式: ①系统无初态时,调用lsim( )函数可求出系统的零状态响应,其格式如下: lsim(b,a,x,t) 绘出由向量a和b所定义的连续系统在输入为x和t所定义的信号时,系统零状态响应的时域仿真波形,且时间范围与输入信号相同。其中x和t是表示输入信号的行向量,t为表示输入信号时间范围的向量,x则是输入信号对应于向量t所定义的时间点上的取样值。 y=lsim(b,a,x,t) 与前面的impulse 和step函数类似,该调用格式并不绘制出系统的零状态响应曲线,而只是求出与向量t定义的时间范围相一致的系统零状态响应的数值解。 ②系统有初始状态时,调用lsim( )函数可求出系统的全响应,格式如下: lsim(A,B,C,D,e,t,X0) 绘出由系数矩阵A,B,C,D所定义的连续时间系统在输入为e和t所定义的信号时,系统输出函数的全响应的时域仿真波形。t为表示输入信号时间范围的向量,e则是输入信号e(t)对应于向量t所定义的时间点上的取样值,X0表示系统状态变量X=[x1,x2,…..xn]'在t=0时刻的初值。 [Y,X]= lsim(A,B,C,D,e,t,X0) 不绘出全响应波形,而只是求出与向量t定义的时间范围相一致的系统输出向量Y的全响应以及状态变量X的数值解。 显然,函数lsim( )对系统响应进行仿真的效果取决于向量t的时间间隔的密集程度,t的取样时间间隔越小则响应曲线越光滑,仿真效果也越好。 说明: (1)当系统有初始状态时,若使用lsim( )函数求系统的全响应,就要使用系统的状态空间描述法,即首先要根据系统给定的方式,写出描述系统的状态方程和输出方程。假如系统原来给定的是微分方程或系统函数,则可用相变量法或对角线变量等方法写出系统的状态方程和输出方程。其转换原理如前面实验四所述。 (2)显然利用lsim( )函数不仅可以分析单输入单输出系统,还可以分析复杂的多输入多输出系统。 例题1: 若某连续系统的输入为e(t),输出为r(t),系统的微分方程为: y''(t)5y'(t)6y(t)3f'(t)2f(t) ①求该系统的单位冲激响应h(t)及其单位阶跃响应g(t)。 ②若f(t)e2t(t) 求出系统的零状态响应y(t) 分析: ① 求冲激响应及阶跃响应的MATLAB程序: a=[1 5 6];b=[3 2]; subplot(2,1,1), impulse(b,a,4) subplot(2,1,2), step(b,a,4) 运行结果如右: 10 ② 求零状态响应的MATLAB程序: a=[1 5 6];b=[3 2]; p1=0.01; %定义取样时间间隔为0.01 t1=0:p1:5; %定义时间范围 x1=exp(-2*t1); %定义输入信号 lsim(b,a,x1,t1), %对取样间隔为0.01时系统响应进行仿真 hold on; %保持图形窗口以便能在同一窗口中绘制多条曲线 p2=0.5; %定义取样间隔为0.5 t2=0:p2:5; %定义时间范围 x2=exp(-2*t2); %定义输入信号 lsim(b,a,x2,t2), hold off %对取样间隔为0.5时系统响应进行仿真并解除保持 运行结果如下: 例题2 已知一个过阻尼二阶系统的状态方程和输出方程分别为: 0x'(t)210X(t)f(t) , r(t)=[0 1]X(t) 。 324t若系统初始状态为X(0)=[4 -5]T , 求系统在f(t)3e求全响应程序如下: A=[0 1 ; -2 -3] ;B=[0 2]';C=[0 1];D=[0]; X0=[4 -5]'; %定义系统初始状态 t=0: 0.01:10; (t)作用下的全响应。 E=[3*exp(-4*t).*ones(size(t))]'; %定义系统激励信号 [r , x]=lsim(A,B,C,D,E,t,X0); %求出系统全响应的数值解 plot(t,r) %绘制系统全响应波形 运行结果如右。 2.离散时间系统 LTI离散系统中,其输入和输出的关系由差分方程描述: 11 nmi0naiy(ki)j0mbjf(kj) (前向差分方程) i0aiy(ki)j0bjf(knj) (后向差分方程) 当系统的输入为单位序列δ(k)时产生的零状态响应称为系统的单位函数响应,用h(k)表示。当输入为 ε(k)时产生的零状态响应称为系统的单位阶跃应,记为:g(k),如下图所示。 如果系统输入为e(k),冲激响应为h(k),系统的零状态响应为y(k),则有:y(k)h(k)f(k)。与连续系统的单位冲激响应h(t)相类似,离散系统的单位函数响应h(k)也包含了系统的固有特性,与输入序列无关。我们只要知道了系统的单位函数响应,即可求得系统在不同激励信号作用下产生的响应。因此,求解系统的单位函数响应h(k)对我们进行离散系统的分析也同样具有非常重要的意义。 MATLAB中为用户提供了专门用于求解离散系统单位函数响应, 并绘制其时域波形的函数impz( )。同样也提供了求离散系统响应的专用函数filter( ),该函数能求出由差分方程所描述的离散系统在指定时间范围内的输入序列作用时,产生的响应序列的数值解。当系统初值不为零时,可以使用dlsim( )函数求出离散系统的全响应,其调用方法与前面连续系统的lsim( )函数相似。另外,求解离散系统阶跃响应可以通过如下两种方法实现:一种是直接调用专用函数dstep( ),其调用方法与求解连续系统阶跃响应的专用函数step( )的调用方法相似;另一种方法是利用求解离散系统零状态响应的专用函数filter( ),只要将其中的激励信号看成是单位阶跃信号ε(k)即可。 函数的调用格式分别如下: ⑴ impz( )函数 impz(b,a) 以默认方式绘出由向量a和b所定义的离散系统单位函数响应的时域波形。 impz(b,a,n) 绘出由向量a和b所定义的离散系统在0 ~ n (n必须为整数)的离散时间范围内单位函数响应的时域波形。 impz(b,a,n1:n2) 绘出由向量a和b所定义的离散系统在n1 ~ n2 (n1、n2必须为整数)的离散时间范围内单位函数响应的时域波形。 y=impz(b,a,n1:n2) 求出由向量a和b所定义的离散系统在n1 ~ n2 (n1、n2必须为整数)的离散时间范围内单位函数响应的数值解,但不绘出波形。 ⑵ filter( ) 函数 filter(b,a,x) 其中a和b与前面相同,x是包含输入序列非零样值点的的行向量。此命令将求出系统在与x的取样时间点相同的输出序列样值。 例题:已知描述离散系统的差分方程为:y(k)0.25y(k1)0.5y(k2)f(k)f(k1),且已知系 k)(k), 统输入序列为f(k)(12① 求出系统的单位函数响应h(k)在-3 ~10离散时间范围内响应波形。 ② 求出系统零状态响应在0 ~15区间上的样值;并画出输入序列的时域波形以及系统零状态响应的波形 分析:①求系统的单位函数响应的MATLAB程序: a=[1,-0.25,0.5]; b=[1,1,0]; impz(b,a,-3:10), title('单位响应') %绘出单位函数响应在-3 ~10区间上的波形 12 运行结果如图a。 ②求零状态响应的MATLAB程序: a=[1,-0.25,0.5];b=[1,1,0] k=0:15; %定义输入序列取值范围 x=(1/2).^k; %定义输入序列表达式 y=filter(b,a,x) %求解零状态响应样值 subplot(2,1,1),stem(k,x) %绘制输入序列的波形 title('输入序列') subplot(2,1,2),stem(k,y) %绘制零状态响应的波形 title('输出序列') 运行结果如下: y = Columns 1 through 10 1.0000 1.7500 0.6875 -0.3281 -0.2383 0.1982 0.2156 -0.0218 -0.1015 -0.0086 Columns 11 through 16 0.0515 0.0187 -0.0204 -0.0141 0.0069 0.0088 图a. ①运行结果 图b. ②运行结果 三、 实验内容 1. 已知描述系统的微分方程和激励信号e(t) 分别如下,试用解析方法求系统的单位冲激响应h(t)和零状态响应r(t),并用MATLAB绘出系统单位冲激响应和系统零状态响应的波形,验证结果是否相同。 ①y''(t)4y'(t)4y(t)f'(t)3f(t);f(t)e(t) ②y''(t)2y'(t)26y(t)f'(t);f(t)(t) ③y''(t)4y'(t)3y(t)f(t);f(t)e2tt(t) ④如下图所示的电路中,已知R1R2R34(),L1L21(H),且两电感上初始电流分别为如果以电阻R3上电压y(t)作为系统输出,请求出系统在激励f(t)12(t)i1(0)2(A),i2(0)0(A),(v)作用下的全响应。 13 2. 请用MATLAB分别求出下列差分方程所描述的离散系统,在0~20时间范围内的单位函数响应、阶跃响应和系统零状态响应的数值解,并绘出其波形。另外,请将理论值与MATLAB仿真结果在对应点上的值作比较,并说出两者的区别和产生误差的原因。 ① y(k)2y(k1)y(k2)f(k);f(k)③ y(k)561614(k) ② y(k2)0.7y(k1)0.1y(k)7f(k2)2f(k1);f(k)(k) y(k1)y(k2)f(k)f(k2);f(k)(k) ④一带通滤波器可由下列差分方程描述:y(k)0.81y(k2)f(k)f(k2), 其中f(k)为系统输入, y(k)为系统输出。请求出当激励为f(k)1010cos(kn/2)10cos(kn)(k)(选取适当的n值)时滤波器的稳态输出。 四、 预习要求 1.熟悉系统响应的求解方法 2.了解MATLAB语言中关于系统分析的各个函数如:impulse、step、lsim、impz、filter等函数的调用方法: 五、实验报告要求 1.理论上计算出系统的单位冲激响应/单位函数响应、阶跃响应、零状态响应、全响应的表达式,并写出解题过程。 2.记录仿真结果(包括数据和波形)。 3.写出程序清单。 4.实验总结(收获及体会) 14 实验三 连续时间信号的频域分析 一、 实验目的 1.熟悉傅里叶变换的性质 2.熟悉常见信号的傅里叶变换 3.了解傅里叶变换的MATLAB实现方法 二、 实验原理 傅里叶变换是信号分析 的最重要的内容之一。从已知信号f(t)求出相应的频谱函数F(j)的数学表示为: F(j)f(t)ejtdt f(t)的傅里叶变换存在的充分条件是f(t)在无限区间内绝对可积,即f(t)满足下式: 能进行傅里叶变换。 f(t)dt 但上式并非傅里叶变换存在的必要条件。在引入广义函数概念之后,使一些不满足绝对可积条件的函数也 傅里叶反变换的定义为:f(t)12F(j)ejtd。 在这一部分的学习中,大家都体会到了这种数算的麻烦。在MATLAB语言中有专门对信号进行正反傅里叶变换的语句,使得傅里叶变换很容易在MATLAB中实现。在MATLAB中实现傅里叶变换的方法有两种,一种是利用MATLAB中的Symbolic Math Toolbox提供的专用函数直接求解函数的傅里叶变换和傅里叶反变换,另一种是傅里叶变换的数值计算实现法。下面分别介绍这两种实现方法的原理。 1.直接调用专用函数法 ①在MATLAB中实现傅里叶变换的函数为: F=fourier( f ) 对f(t)进行傅里叶变换,其结果为F(w) F=fourier(f,v) 对f(t)进行傅里叶变换,其结果为F(v) F=fourier( f,u,v ) 对f(u)进行傅里叶变换,其结果为F(v) ②傅里叶反变换 f=ifourier( F ) 对F(w)进行傅里叶反变换,其结果为f(x) f=ifourier(F,U) 对F(w)进行傅里叶反变换,其结果为f(u) f=ifourier( F,v,u ) 对F(v)进行傅里叶反变换,其结果为f(u) 由于MATLAB中函数类型非常丰富,要想了解函数的意义和用法,可以用mhelp命令。如在命令窗口键入:mhelp fourier回车,则会得到fourier的意义和用法。 注意: 15 (1)在调用函数fourier( )及ifourier( )之前,要用syms命令对所有需要用到的变量(如t,u,v,w)等进行说明,即要将这些变量说明成符号变量。对fourier( )中的f及ifourier( )中的F也要用符号定义符sym将其说明为符号表达式。 (2)采用fourier( )及fourier( )得到的返回函数,仍然为符号表达式。在对其作图时要用ezplot( )函数,而不能用plot()函数。 (3)fourier( )及fourier( )函数的应用有很多局限性,如果在返回函数中含有δ(ω)等函数,则ezplot( )函数也无法作出图来。另外,在用fourier( )函数对某些信号进行变换时,其返回函数如果包含一些不能直接表达的式子,则此时当然也就无法作图了。这是fourier( )函数的一个局限。另一个局限是在很多场合,尽管原时间信号f(t)是连续的,但却不能表示成符号表达式,此时只能应用下面介绍的数值计算法来进行傅氏变换了,当然,大多数情况下,用数值计算法所求的频谱函数只是一种近似值。 例① 求门函数f(t)(t1)(t1)的傅里叶变换,并画出幅度频谱图 MATLAB程序如下: syms t w %定义两个符号变量t,w Gt=sym('Heaviside(t+1)-Heaviside(t-1)'); %产生门宽为2的门函数 Fw=fourier(Gt,t,w); %对门函数作傅氏变换求F(jw) FFw=maple('convert',Fw,'piecewise'); %数据类型转换,转为分段函数,此处可以去掉 FFP=abs(FFw); %求振幅频谱| F(jw)| ezplot(FFP,[-10*pi 10*pi]);grid; %绘制函数图形,并加网格 axis([-10*pi 10*pi 0 2.2]) %限定坐标轴范围 运行结果:Fw= exp(i*w)*(pi*Dirac(w)-i/w)-exp(-i*w)*(pi*Dirac(w)-i/w) % Dirac(w)为δ(ω),即傅立叶变换结果中含有奇异函数,故绘图前需作函数类型转换 FFw= -i*exp(i*w)/w+i*exp(-i*w)/w % FFw为复数 FFP= abs(-i*exp(i*w)/w+i*exp(-i*w)/w) %求FFw的模值 例② 求函数F(j)112的傅里叶反变换f(t) MATLAB程序如下: syms t w %定义两个符号变量t,w Fw=sym('1/(1+w^2)'); %定义频谱函数F(jw) ft=ifourier(Fw,w,t); %对频谱函数F(jw)进行傅氏反变换 16 运行结果: ft = 1/2*exp(-t)*Heaviside(t)+1/2*exp(t)*Heaviside(-t) 2、傅里叶变换的数值计算实现法 严格说来,如果不使用symbolic工具箱,是不能分析连续时间信号的。采用数值计算方法实现连续时间信号的傅里叶变换,实质上只是借助于MATLAB的强大数值计算功能,特别是其强大的矩阵运算能力而进行的一种近似计算。傅里叶变换的数值计算实现法的原理如下: 对于连续时间信号f(t),其傅里叶变换为: F(j)f(t)ejtdtlim0nf(n)ejn 其中η为取样间隔,如果f(t)是时限信号,或者当|t|大于某个给定值时,f(t)的值已经衰减得很厉害,可以近似地看成是时限信号,则上式中的n取值就是有限的,假定为N,有: N1 F(j)n0f(n)ejn 若对频率变量ω进行取样,得: N1F(k)F(jk)n0f(n)ejkn0kM 通常取:k0Mk2Mk,其中0是要取的频率范围,或信号的频带宽度。采用MATLAB实现上式 jkn时,其要点是要生成f(t)的N个样本值f(n)的向量,以及向量e结果即完成上式的傅里叶变换的数值计算。 ,两向量的内积(即两矩阵的乘积), 注意:时间取样间隔η的确定,其依据是η必须小于奈奎斯特(Nyquist)取样间隔。如果f(t)不是严格的带限信号,则可以根据实际计算的精度要求来确定一个适当的频率0为信号的带宽。 例③ 用数值计算法实现上面门函数f(t)(t1)(t1)的傅里叶变换,并画出幅度频谱图. 分析: 该信号的频谱为F(j)2Sa(),其第一个过零点频率为π,一般将此频率认为是信号的带宽。但考虑到F(j)的形状(为抽样函数),假如将精度提高到该值的50倍,即取050B50,则据此确定的Nyquist取样间隔为:12F021020.02。 MATLAB程序如下: R=0.02; %取样间隔η=0.02 t=-2:R:2; % t为从-2到2,间隔为0.02的行向量,有201个样本点 ft=[zeros(1,50),ones(1,101),zeros(1,50)]; % 产生f(t)的样值矩阵(即f(t)的样本值组成的行向量) W1=10*pi; %取要计算的频率范围 M=500; k=0:M; w=k*W1/M; %频域采样数为M, w为频率正半轴的采样点 Fw=ft*exp(-j*t'*w)*R; %求傅氏变换F(jw) FRw=abs(Fw); %取振幅 17 W=[-fliplr(w),w(2:501)] ; %由信号双边频谱的偶对称性,利用fliplr(w)形成负半轴的 点,% w(2:501)为正半轴的点,函数fliplr(w)对矩阵w行向量作180度反转 FW=[fliplr(FRw),FRw(2:501)]; %形成对应于2M+1个频率点的值 Subplot(2,1,1) ; plot(t,ft) ;grid; %画出原时间函数f(t)的波形,并加网格 xlabel('t') ; ylabel('f(t)'); %坐标轴标注 title('f(t)=u(t+1)-u(t-1)'); %文本标注 subplot(2,1,2) ; plot(W,FW) ;grid on; %画出振幅频谱的波形,并加网格 xlabel ('W') ; ylabel ('F(W)'); %坐标轴标注 title('f(t)的振幅频谱图'); %文本标注 运行结果如下: 三、 实验内容 1.编程实现求下列信号的幅度频谱 (1) 求出f1(t)(2t1)(2t1)的频谱函数F1(jω),请将它与上面门宽为2的门函数 f(t)(t1)(t1)的频谱进行比较,观察两者的特点,说明两者的关系。 1|t|(2) 三角脉冲 f2(t)0|t|1|t|1 t(3) 单边指数信号f3(t)e(t) (4) 高斯信号f3(t)et 2.利用ifourier( ) 函数求下列频谱函数的傅氏反变换 (1)F(j)j21622 (2) F(j)(j)5j8(j)6j522 四、预习要求 1. 熟悉常见信号的频谱; 18 2. 了解MATLAB语言中的函数:fourier , ifourier , abs , syms, ezplot。 五、实验报告 1. 傅里叶变换的原理及其数值计算实现法的理论依据 2. 写出程序清单,记录实验的波形图 3. 实验总结(收获及体会) 19 实验四 系统的零极点及频率响应特性 一、 实验目的 1.掌握系统函数零极点的定义 2.熟悉零极点与频率响应的关系 3.掌握极点与系统稳定性的关系 4. 状态方程与系统函数的关系 5. 在MATLAB中实现系统函数与状态方程间的转换 二、 实验原理 1.原理 描述连续系统的系统函数H(s)的一般表示形式为: H(s)bmsnmm1bm1sb1sb0san1sn1a1sa0 其对应的零极点形式的系统函数为: H(s)bm(sz1)(sz2)(szm)(sp1)(sp2)(spn) 共有n个极点:p1,p2,…pn和m个零点:z1,z2,…zm。 把零极点画在S平面中得到的图称为零极点图,人们可以通过零极点分布判断系统的特性。当系统的极点处在S的左半平面时系统稳定;处在虚轴上的单阶极点系统稳定;处在S的右半平面的极点及处在虚轴上的高阶极点,系统是不稳定的。 描述系统除了可以用系统函数和零极图以外,还可以用状态方程。对应上述用系统函数H (s) 描述的系统,其状态方程可用相变量状态方程和对角线变量状态方程描述,形式分别为相变量状态方程: x1'0x2'0xn1'0xn'a010010a10a21an100x10x20f xn10xn1输入方程为: 0x1x2 xn1xnyb0b1bm0对角线变量方程: 20 x1'p1x2'0xn1'0xn'00p200000pn10000pnx11x21f xn11xn1输出方程 : x1x2 xn1xnyk1k2kn1kn矩阵中的p为系统函数的极点,k为部分分式展开中的系数,即 H(s)k1sp1k2sp2...kn1spn1knspn 上述状态方程和输出方程均可表示为 X'AXBfYCXDf A、B、C、D分别表示对应的矩阵,上述两种表示中D=0。 系统在频域中的特性可以用频域中的系统函数表示 H(j)H(s)H(jω)是复函数,可表示为 H(j)|H(j)|ej()sj |H(j)|称为幅频特性, ()称为相频特性。 MATLAB语言提供了系统函数,零极点和状态方程之间的相互转换语句,也提供了得到系统频率特性的语句: tf2zp:从系统函数的一般形式求出其零点和极点。 zp2tf:从零极点求出系统函数的一般式。 ss2zp:从状态方程式求系统的零极点。 zp2ss:从零极点求系统的状态方程。 freqs:由H(s)的一般形式求其幅频特性和相频特性。 2.例题 ① 已知系统函数H(s)MATLAB程序如下: num = [1 -0.5 2]; %分子系数,按降幂顺序排列。 den = [1 0.4 1]; %分母系数,按降幂顺序排列。 21 s0.5s2s0.4s122,求其零极点图。 [z,p] = tf2zp(num,den); %求零点z和极点p zplane (z,p) %作出零极点图 运行结果如下: ② 已知系统和状态方程和输出方程 1X'101Xf y0.25301X 求其系统的零极点。 MATLAB程序如下: A = [1,0;1,-3]; B = [1,0]; C = [-0.25,1]; D = 0; [z,p] =ss2zp (A,B,C,D) %求出零极点 zplane (z,p) %画出零极点图 ③ 已知系统的传递函数为H(s)MATLAB程序如下: num = [0.2 0.3 1]; den = [1 0.4 1]; w =logspace (-1,1); %频率范围 freqs(num,den,w) %画出频率响应曲线 运行结果如下: 0.2s0.3s1s0.4s122,求其频率特性。 22 三、 实验内容 1.已知下列系统函数H (s)或状态方程,求其零极点,并画出零极点图。 ① H(s)s1s2s522 ② H(s)3s9s6s2s222 * ③状态方程: 0X'061011001X0f 16 输出方程: y = [4 5 1]X 2.已知下列系统函数H (s),求其频率特性。 ① H(s)2ss22s1 ② H(s)3(s1)(s2)(s1)(s2) 3. 已知系统函数H (s),求其频率特性和零极点图。 H(s)s35s291s1093s1700s9s66s294s1029s2541s4684s5856s4629s170098765432432 四、 实验报告要求 1. 简述实验目的及实验原理 2. 计算系统的零极点并与实验结果进行比较 3. 记录频率特性曲线 4. 实验总结(收获及体会) 23 实验五 连续信号与系统的S域分析 一、实验目的 1. 熟悉拉普拉斯变换的原理及性质 2. 熟悉常见信号的拉氏变换 3. 了解正/反拉氏变换的MATLAB实现方法和利用MATLAB绘制三维曲面图的方法 4. 了解信号的零极点分布对信号拉氏变换曲面图的影响及续信号的拉氏变换与傅氏变换的关系 二、 实验原理 拉普拉斯变换是分析连续时间信号的重要手段。对于当t 时间信号f(t)的单边拉普拉斯变换F(s)的定义为: ∞时信号的幅值不衰减的时间信号,即 在f(t)不满足绝对可积的条件时,其傅里叶变换可能不存在,但此时可以用拉氏变换法来分析它们。连续 F(s)f(t)e0stdt 拉氏反变换的定义为: f(t)12jjjF(s)eds st 显然,上式中F(s)是复变量s的复变函数,为了便于理解和分析F(s)随s的变化规律,我们将F(s)写成模及相位的形式:F(s)F(s)ej(s)。其中,|F(s)|为复信号F(s)的模,而(s)为F(s)的相位。由于复变 量s=ζ+jω,如果以ζ为横坐标(实轴),jω为纵坐标(虚轴),这样,复变量s就成为一个复平面,我们称之为s平面。从三维几何空间的角度来看,|F(s)|和(s)分别对应着复平面上的两个曲面,如果绘出它们的三维曲面图,就可以直观地分析连续信号的拉氏变换F(s)随复变量s的变化情况,在MATLAB语言中有专门对信号进行正反拉氏变换的函数,并且利用 MATLAB的三维绘图功能很容易画出漂亮的三维曲面图。 ①在MATLAB中实现拉氏变换的函数为: F=laplace( f ) 对f(t)进行拉氏变换,其结果为F(s) F=laplace (f,v) 对f(t)进行拉氏变换,其结果为F(v) F=laplace ( f,u,v) 对f(u)进行拉氏变换,其结果为F(v) ②拉氏反变换 f=ilaplace ( F ) 对F(s)进行拉氏反变换,其结果为f(t) f=ilaplace(F,u) 对F(w)进行拉氏反变换,其结果为f(u) f=ilaplace(F,v,u ) 对F(v)进行拉氏反变换,其结果为f(u) 注意: 在调用函数laplace( )及ilaplace( )之前,要用syms命令对所有需要用到的变量(如t,u,v,w)等进行说明,即要将这些变量说明成符号变量。对laplace( )中的f及ilaplace( )中的F也要用符号定义符sym将其说明为符号表达式。具体方法参见第一部分第四章第三节。 例①:求出连续时间信号 f(t)sin(t)(t)的拉氏变换式,并画出图形 24 求函数拉氏变换程序如下: syms t s %定义符号变量 ft=sym('sin(t)*Heaviside(t)'); %定义时间函数f(t)的表达式 Fs=laplace(ft) %求f(t)的拉氏变换式F(s) 运行结果:Fs = 1/(s^2+1) 绘制拉氏变换三维曲面图的方法有2种: 方法一:syms x y s s=x+i*y; %产生复变量s FFs=1/(s^2+1); %将F(s)表示成复变函数形式 FFss=abs(FFs); %求出F(s)的模 ezmesh(FFss); %画出拉氏变换的网格曲面图 ezsurf(FFss); %画出带阴影效果的三维曲面图 colormap(hsv); %设置图形中多条曲线的颜色顺序 方法二:figure(2) %打开另一个图形窗口 x1=-5: 0.1:5; %设置s平面的横坐标范围 y1=-5: 0.1: 5; %设置s平面的纵坐标范围 [x,y]=meshgrid(x1,y1); %产生矩阵 s=x+i*y; %产生矩阵s来表示所绘制曲面图的复平面区域, %其中矩阵s包含了复平面-6<ζ<6,-6 colormap(hsv); %设置图形中多条曲线的颜色顺序 说明:从拉普拉斯变换的三维曲面图中可以看出,曲面图上有象山峰一样突出的尖峰,这些峰值点在s平面的对应点就是信号拉氏变换的极点位置。而曲面图上的谷点则对应着拉氏变换的零点位置。因此,信号拉氏变换的零极点位置决定了其曲面图上峰点和谷点位置。 25 例②:求出函数F(s)MATLAB程序如下: syms t s %定义符号变量 Fs =sym('1/(1+s^2)'); %定义F(s)的表达式 ft=ilaplace(Fs) %求F(s)的拉氏反变换式f(t) 运行结果: ft= sin(t) 注意: 在MATLAB中,求拉氏反变换的函数ilaplace(),在默认情况下是指拉氏右变换,其运行结果是单边函数。如例②中的运行结果为ft= sin(t),实际上是指ft= sin(t)。 1s12的拉氏反变换式 三、 实验内容 1. 求出下列函数的拉氏变换式,并用MATLAB绘制拉氏变换在s平面的三维曲面图 ① f(t)2e(t)5e③ f(t)e3tt3t(t) ② f(t)(t)(t2) sin(t)(t) ④ f(t)sin(t)(t)(t2) 2. 已知信号的拉氏变换如下,请用MATLAB画出其三维曲面图,观察其图形特点,说出函数零极点位置与其对应曲面图的关系,并且求出它们所对应的原时间函数f (t), ①F(s)2(s3)(s3)(s5)(s16)2 ②F(s)(s1)(s3)s(s2)(s5) 3. 已知连续时间信号f(t)cos(2t)(t)(t4),请分别求出该信号的拉氏变换F(s)及其傅里叶变换F(j),并用MATLAB绘出F(s)的曲面图及振幅频谱F(j)的波形,观察F(s)的曲面图在虚轴上的剖面图,并将它与信号的振幅频谱曲线进行比较,分析两者的对应关系。 四、 预习要求 26 1. 熟悉信号的拉氏变换 2. 了解MATLAB中的有关函数的调用方法 五、 实验报告 1. 写出拉氏正反变换的原理 2. 理论上计算出信号的拉氏正/反变换表达式,并写出解题过程 3. 写出相关的程序清单 4. 记录实验波形 5. 实验总结(收获及体会) 27 实验六 离散信号与系统的Z变换分析 一、 实验目的 1.熟悉离散信号Z变换的原理及性质 2.熟悉常见信号的Z变换 3.了解正/反Z变换的MATLAB实现方法 4.了解离散信号的Z变换与其对应的理想抽样信号的傅氏变换和拉氏变换之间的关系 5.了解利用MATLAB实现离散系统的频率特性分析的方法 二、 实验原理 1. 正/反Z变换 Z变换分析法是分析离散时间信号与系统的重要手段。如果以时间间隔Ts对连续时间信号f(t)进行理想抽样,那么,所得的理想抽样信号f(t)为: f(t)f(t)*Ts(t)f(t)*k(tkTs) 理想抽样信号f(t)的双边拉普拉斯变换F (s)为: F(s)f(t)*st(tkT)edtskkf(kTs)eksTs sTs若令f(kTs)f(k) ,ze,那么f(t)的双边拉普拉斯变换F (s)为: F(s)kf(k)zkF(z)zesTs 则离散信号f(k)的Z变换定义为: F(z)kf(k)z k从上面关于Z变换的推导过程中可知,离散信号f(k)的Z变换F(z)与其对应的理想抽样信号f(t)的拉氏变换F (s)之间存在以下关系: F(s)F(z)zesTs 同理,可以推出离散信号f(k)的Z变换F(z)和它对应的理想抽样信号f(t)的傅里叶变换之间的关系为 F(j)F(z)zejTs 如果已知信号的Z变换F(z),要求出所对应的原离散序列f(k),就需要进行反Z变换,反Z变换的定义为: f(k)12jF(z)zk1k1dz 其中,C为包围F(z)z的所有极点的闭合积分路线。 28 在MATLAB语言中有专门对信号进行正反Z变换的函数ztrans( ) 和itrans( )。其调用格式分别如下: F=ztrans( f ) 对f(n)进行Z变换,其结果为F(z) F=ztrans(f,v) 对f(n)进行Z变换,其结果为F(v) F=ztrans(f,u,v) 对f(u)进行Z变换,其结果为F(v) f=itrans ( F ) 对F(z)进行Z反变换,其结果为f(n) f=itrans(F,u) 对F(z)进行Z反变换,其结果为f(u) f=itrans(F,v,u ) 对F(v)进行Z反变换,其结果为f(u) 注意: 在调用函数ztran( )及iztran( )之前,要用syms命令对所有需要用到的变量(如t,u,v,w)等进行说明,即要将这些变量说明成符号变量。 例① 用MATLAB求出离散序列f(k)(0.5)(k) 的Z变换。 MATLAB程序如下: syms k z f=0.5^k; %定义离散信号 Fz=ztrans(f) %对离散信号进行Z变换 运行结果如下: Fz = 2*z/(2*z-1) 例② 已知一离散信号的Z变换式为F(z)MATLAB程序如下: syms k z Fz=2* z/(2*z-1); %定义Z变换表达式 fk=iztrans(Fz,k) %求反Z变换 运行结果如下: fk = (1/2)^k 2.离散系统的频率特性 同连续系统的系统函数H(s)类似,离散系统的系统函数H(z)也反映了系统本身固有的特性。对于离散系统来说,如果把其系统函数H(z)中的复变量z换成e频率响应特性,即离散时间系统的频率响应为: H(ejTjTk2z2z1 ,求出它所对应的离散信号f(k)。 ,那么所得的函数H(ejT)就是此离散系统的 )H(ejT)ej()H(z)zejT 其中, H(ejT)称为离散系统的幅频特性,()称为系统的相频特性。同连续系统一样,离散时间系 统的幅频特性也是频率的偶函数,相频特性也是频率的齐函数。 由于ejT是频率的周期函数,所以离散系统的频率响应特性也是频率的周期函数,其周期为 2TT2,或者频率周期为T。实际上,这就是抽样系统的抽样频率,而其中的T则是系统的抽 29 样周期。频率响应呈现周期性是离散系统特性区别于连续系统特性的重要特点。因此,只要分析H(e在T2范围内的情况,便可分析出系统的整个频率特性。 鉴于离散系统频率响应特性的特点,为了表示方便起见,我们通常将其中的T用一个变量来代替,即令zeH(ejjjT)代入系统函数H(z)中,用H(ej)函数来表示离散系统的频率响应特性。相应地,用 )表示幅频特性,而相频特性仍用()来表示。应该特别注意的是,虽然这里的变量仍然称为 频率变量,但是它已经不是原来意义上的角频率概念,而实际上是表示角度的概念。我们称之为数字角频率。它与原来角频率的关系为:T。也就是说,根据离散系统的系统函数H(z),令其中的zej, 并且代入0~2范围内不同的频率值(实际上是角度值),就可以逐个计算出不同频率时的响应,求出离散系统的频率响应特性。再利用离散系统频率特性的周期性特点(周期为2),求出系统的整个频率特性。 离散系统的幅频特性曲线和相频特性曲线能够直观地反映出系统对不同频率的输入序列的处理情况。在函数H(ej)随的变换关系中,在=0附近,反映了系统对输入信号低频部分的处理情况,而在附近,则反映了系统对输入信号高频部分的处理情况。 一般来说,分析离散系统频率响应特性就要绘制频率响应曲线,而这是相当麻烦的。虽然可以通过几何矢量法来定性画出频率响应特性曲线,但一般来说这也是很麻烦的。值得庆幸的是,MATLAB为我们提供了专门用于求解离散系统频率响应的函数freqz() ,其调用格式如下: [H,w]=freqz(B,A,N) 其中,B和A分别是表示待分析的离散系统的系统函数的分子,分母多项式的向量,N为正整数,返回向量H则包含了离散系统频率响应函数H(ej)在0~范围内的N个频率等分 点的值。向量则包含0~范围内的N个频率等分点。在默认情况下N=512。 [H,w]=freqqz(B,A,N,'whole') 其中,B,A和N的意义同上,而返回向量H包含了频率响应函数 H(ej)在0~2范围内N个频率等分点的值。 由于调用freqz()函数只能求出离散系统频率响应的数值,不能直接绘制曲线图,因此,我们可以先用freqz()函数求出系统频率响应的值,然后再利用MATLAB的abs()和angle()函数以及plot()命令,即可绘制出系统在0~或0~2范围内的幅频特性和相频特性曲线。 例①若离散系统的系统函数为H(z)响应H(ejz0.5z,请用MATLAB计算0~频率范围内10个等分点的频率 )的样值。 MATLAB程序如下: A=[1 0]; %分母多项式系数向量 B=[1 -0.5]; %分子多项式系数向量 [H,w]=freqz(B,A,10) %求出对应0~范围内10个频率点的频率响应样值 运行结果如下: H = 0.5000 0.5245 + 0.1545i 0.5955 + 0.2939i 0.7061 + 0.4045i 30 0.8455 + 0.4755i 1.0000 + 0.5000i 1.1545 + 0.4755i 1.2939 + 0.4045i 1.4045 + 0.2939i 1.4755 + 0.1545i w = 0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 2.1991 2.5133 2.8274 例② 用MATLAB计算前面离散系统在0~2频率范围内200个频率等分点的频率响应值,并绘出相应的幅频特性和相频特性曲线。 MATLAB程序如下: A=[1 0]; B=[1 -0.5]; %[H,w]=freqz(B,A,200); [H,w]=freqz(B,A,200,'whole'); %求出对应0~2范围内200个频率点的频率响%应样值 HF=abs(H); %求出幅频特性值 HX=angle(H); %求出相频特性值 subplot(2,1,1);plot(w,HF) %画出幅频特性曲线 subplot(2,1,2);plot(w,HX) %画出相频特性曲线 运行结果如下: 运行结果分析:从该系统的幅频特性曲线可以看出,该系统呈高通特性,是一阶高通滤波器。 31 三、 实验内容 1. 求出下列离散序列的Z变换 k① f1(k)(1)cos(k2)(k)2 k② f2(k)k(k1)(2)(k) 3③ f3(k)(k)(k5) ④ f4(k)k(k1)(k)(k5) 2.已知下列单边离散序列的z变换表达式,求其对应的原离散序列。 ①F1(z)③F3(z)zz1zz2222 ②F2(z)11z1z21z31z4 2(z3z6)z4 ④ F4(z)z(zz1)(z1)(z2)(z3)23. 已知离散系统的系统函数H (z)如下,请绘出系统的幅频和相频特性曲线,并说明系统的作用 ① H(z)4z4(z12)(z23) ② H(z)z1z0.8122 4. 已知描述离散系统的差分方程为:y(k)1.2y(k1)0.35y(k2)f(k)0.25f(k1) 请绘出系统的幅频和相频特性曲线,并说明系统的作用。 四、 预习要求 1. 熟悉正反z变换的意义及用MATLAB软件实现的方法 2. 熟悉离散系统的频率响应特性及用MATLAB软件实现的方法 3. 编写MATLAB程序 五、 实验报告要求 1. 简述实验目的及实验原理 2. 计算相应z变换或反z变换的理论值,并与实验结果进行比较 3. 记录离散系统的频率响应特性曲线,分析系统作用 4. 写出程序清单 5. 实验总结(收获及体会) 32 实验七 语音信号滤波 一、实验目的 1.复习采样定理 2.掌握应用matlab函数设计模拟滤波器的方法 3.掌握系统性能分析的方法 4.结合实际,综合应用信号与系统的基础理论 二、实验原理 在数字语音系统中,需首先对语音信号(模拟信号)采样,语音信号频率范围[-fh,fh],信号中一般含有干扰噪声,其频带宽度远大于fh。本次实验以电话系统中的语音信号采样系统为对象,设计语音信号采样前滤波器。数字电话系统结构框图如图8.1,电话系统中一般要保证4kHz的音频带宽,即取fh=4kHz,但送话器发出的信号的带宽比fh大很多。因此在A/D转换之前需对其进行模拟预滤波,以防止采样后发生频谱混叠失真。为使信号采集数量尽量少,设模数转换器的采样频率为8kHz。 话筒信号前置模拟滤波器低通滤波器模数转换器数模转换器调制器听筒解调器图8.1 数字电话系统结构框图 三、实验内容 1.设计任务即是模拟预滤波系统,要求能够防止语音信号采样后发生频谱混叠失真,语音信号采样频率为8kHz。 实际的话音信号在3.4kHz以内,要保证4kHz的音频带宽,因干扰噪声存在的缘故,实际送话器发出的信号的带宽要大很多,因此需设计模拟低通滤波器,设计指标请根据要求自行选取。 2.性能测试:自制带噪声的话音信号(可自己录音并作加噪处理,或者在有非人声噪音环境下录音),将wav波形信号作为系统测试信号,测试所设计模拟预滤波系统的滤波性能,对输入及输出信号作频谱分析。 四、 预习要求 1. 根据要求自行查阅相关资料,写出实验目的、实验原理、实验内容 2. 写出设计思路并确定系统性能指标 3. 编写MATLAB程序 五、实验报告要求 1. 记录系统的频率响应特性曲线及输入输出实验波形 2. 理论计算并分析实验结果 3. 实验总结(收获及体会) 33 附录一 MATLAB环境 表1.1 命令窗口中行编辑的常用操作键 键名 ↑ ↓ ← → PageUp Page Down 作用 向前调回已输入过的命令行 向后调回已输入过的命令行 在当前行中左移光标 在当前行中右移光标 向前翻阅当前窗口中的内容 向后翻阅当前窗口中的内容 键名 Home End Delete Backspace Esc CTRL+C 作用 使光标移到当前行的开头 使光标移到当前行的末尾 删去光标右边的字符 删去光标左边的字符 清除当前行的全部内容 中断MATLAB命令的运行 表1.2 MATLAB常用标点符号的功能 名称 空格 逗号 点号 分号 符号 , 组行元素之间的分隔符。 . ; 用于数值中的小数点。 用于不显示计算结果命令行的结尾;用于不显示计算结果命令之间的分隔符;用于数组元素行之间的分隔符。 冒号 百分号 单引号 圆括号 方括号 花括号 下划线 续行号 : % ‘ ’ ( ) [ ] { } - „ 用于生成一维数值数组,表示一维数组的全部元素或数组的某一维的全部元素。 用于注释的前面,在它后面的命令不需要执行。 用于括住字符串。 用于引用数组元素;用于函数输入变量列表;用于确定算术运算的先后次序。 用于构成向量和矩阵;用于函数输出列表。 用于构成元胞数组。 用于一个变量、函数或文件名中的连字符。 用于把后面的行与该行连接以构成一个较长的命令。 功能 用于输入变量之间的分隔符以及数组行元素之间的分隔符。 用于要显示计算结果的命令之间的分隔符;用于输入变量之间的分隔符;用于数注意:以上的符号一定要在英文状态下输入,因为MATLAB不能识别中文标点符号。 clc:用于清空命令窗口中的显示内容。 表1.3 数据显示的Format格式 命令格式 format format short(默认) format short e format short g 含义 通常保证小数点后四位有效;大于1000的实数,用5位有效数字的科学计数法显示 5位科学计数法表示 从format short和format short e中自动选择最佳计数方式 format long format long e 15位数字表示 15位科学计数法表示 34 π显示为3.141592653579 π显示为3.1415926535793e+000 例子 314.159显示为314.1590 3141.59显示为3.1416e+003 π显示为3.1416e+000 π显示为3.1416 命令格式 format long g 含义 从format long和format long e中自动选择最佳计数方式 format rat format hex format + format bank format compact format loose 近似有理数表示 十六进制表示 正数、负数、零分别用+、-、空格 表示(金融)元、角、分 在显示结果之间没有空行的压缩格式 在显示结果之间有空行的稀疏格式 表1.4 特殊变量表 特殊变量 ans pi eps flops inf NaN或nan 取值 运算结果的默认变量名 圆周率π 计算机的最小数 浮点运算数 无穷大,如1/0 非数,如0/0、∞/∞、0×∞ 特殊变量 i或 j nargin nargout realmin realmax 取值 i=j= π显示为355/113 π显示为400921fb54442dl8 π显示为+ π显示为3.14 例子 π显示为3.14159263579 函数的输入变量数目 函数的输出变量数目 最小的可用正实数 最大的可用正实数 Matlab脚本文件和函数文件 M文件有两种形式:M脚本文件和M函数文件。 M函数文件的基本格式: 函数声明行 H1行(用%开头的注释行) 在线帮助文本(用%开头) 编写和修改记录(用%开头) 函数体 函数文件的特点: (1) 第一行总是以“function”引导的函数声明行; 函数声明行的格式: function [输出变量列表] = 函数名(输入变量列表) (2) 函数文件在运行过程中产生的变量都存放在函数本身的工作空间; (3) 当文件执行完最后一条命令或遇到“return”命令时,就结束函数文件的运行,同时函数工作空间的变量就被清除; (4) 函数的工作空间随具体的M函数文件调用而产生,随调用结束而删除,是的、临时的,在MATLAB运行过程中可以产生任意多个临时的函数空间。 35 附录二 MATLAB常用命令函数表 表2.1矩阵生成函数 函数名 zeros(m,n) ones(m,n) rand(m,n) randn(m,n) magic(N) eye(m,n) 功能 产生m×n的全0矩阵 产生m×n的全1矩阵 产生均匀分布的随机矩阵,元素取值范围0.0~1.0。 产生正态分布的随机矩阵 产生N阶魔方矩阵(矩阵的行、列和对角线上元素的和相等) 产生m×n的单位矩阵 zeros、ones、rand、randn和eye函数当只有一个参数n时,则为n×n的方阵; 当eye(m,n)函数的m和n参数不相等时则单位矩阵会出现全0行或列。 表2.2 常用矩阵翻转函数 函数名 triu(X) tril(X) flipud(X) fliplr(X) flipdim(X,dim) rot90(X) 功 能 产生X矩阵的上三角矩阵,其余元素补0。 产生X矩阵的下三角矩阵,其余元素补0。 使矩阵X沿水平轴上下翻转 使矩阵X沿垂直轴左右翻转 使矩阵X沿特定轴翻转。dim=1,按行维翻转;dim=2,按列维翻转。 使矩阵X逆时针旋转900 表2.3 常用矩阵运算函数 函数名 det(X) rank(X) inv(X) 计算方阵行列式 求矩阵的秩,得出的行列式不为零的最大方阵边长。 求矩阵的逆阵,当方阵X的det(X)不等于零,逆阵X-1才存在。X 与X-1相乘为单位矩阵。 计算矩阵特征值和特征向量。如果方程Xv=vd存在非零解,则v为特征向量,[v,d]=eig(X) diag(X) [l,u]=lu(X) d为特征值。 产生X矩阵的对角阵 方阵分解为一个准下三角方阵和一个上三角方阵的乘积。l为准下三角阵,必须交换两行才能成为真的下三角阵。 m×n阶矩阵X分解为一个正交方阵q和一个与X同阶的上三角矩阵r的乘积。方阵q的边长为矩阵X的n和m中较小者,且其行列式的值为1。 m×n阶矩阵X分解为三个矩阵的乘积,其中u,v为n×n阶和m×m阶正交方阵,[u,s,v]=svd(X) s为m×n阶的对角阵,对角线上的元素就是矩阵X的奇异值,其长度为n和m中的较小者。 功 能 [q,r]=qr(X) 36 表2.4 基本函数 函数名 abs sqrt real imag conj sin cos tan asin acos 含义 绝对值或者复数模 平方根 实部 虚部 复数共轭 正弦 余弦 正切 反正弦 反余弦 函数名 atan atan2 sinh cosh tanh rat mod round fix floor 含义 反正切 第四象限反正切 双曲正弦 双曲余弦 双曲正切 有理数近似 模除求余 4舍5入到整数 向最接近0取整 向最接近-∞取整 函数名 ceil sign rem pow2 exp log log10 gamma bessel 含义 向最接近-∞取整 符号函数 求余数留数 2的幂 自然指数 自然对数 以10为底的对数 伽吗函数 贝赛尔函数 表2.5 矩阵和数组运算对比表 数组运算 命令 A+B A-B S.*B A.*B S./B A./B B.\\A A.^S A.^S S.^B A.’ exp(A) log(A) 对应元素相加 对应元素相减 标量S分别与B元素的积 数组对应元素相乘 S分别被B的元素左除 A的元素被B的对应元素除 结果一定与上行相同 A的每个元素自乘S次 S为小数时,对A各元素分别求非整数幂,得出矩阵 分别以B的元素为指数求幂值 非共轭转置,相当于conj(A’) 以自然数e为底,分别以A的元素为指数求幂 对A的各元素求对数 expm(A) logm(A) sqrtm(A) funm(A,’FUN’) A的矩阵指数函数 A的矩阵对数函数 A的矩阵平方根函数 矩阵的函数运算 含义 命令 A+B A-B S*B A*B S\\B A/B B\\A A^S A^S S^B A’ 矩阵运算 含义 与数组运算相同 与数组运算相同 与数组运算相同 内维相同矩阵的乘积 B矩阵分别左除S 矩阵A右除B即A的逆阵与B相乘 A左除B(一般与上行不同) A矩阵为方阵时,自乘S次 S为小数时,方阵A的非整数乘方 B为方阵时,标量S的矩阵乘方 共轭转置 sqrt(A) 对A的各元素求平方根 f(A) 求A各个元素的函数值 37 附录三 基本绘图命令 1. 基本绘图命令plot plot(x) 绘制x向量曲线 plot命令是MATLAB中最简单而且使用最广泛的一个绘图命令,用来绘制二维曲线。 语法: plot(x) plot(x,y) %绘制以x为纵坐标的二维曲线 %绘制以x为横坐标y为纵坐标的二维曲线 说明:x和y可以是向量或矩阵。 plot(x1,y1,x2,y2,…)绘制多条曲线 plot命令还可以同时绘制多条曲线,用多个矩阵对为参数,MATLAB自动以不同的颜色绘制不同曲线。每一对矩阵(xi,yi)均按照前面的方式解释,不同的矩阵对之间,其维数可以不同。 2多个图形绘制的方法 1. 指定图形窗口 如果需要多个图形窗口同时打开时,可以使用figure语句。 语法: 口。 2. 同一窗口多个子图 如果需要在同一个图形窗口中布置几幅的子图,可以在plot命令前加上subplot命令来将一个图形窗口划分为多个区域,每个区域一幅子图。 语法: subplot(m,n,k) %使(m×n)幅子图中的第k幅成为当前图 说明:将图形窗口划分为m×n幅子图,k是当前子图的编号,“,”可以省略。子图的序号编排原则是:左上方为第1幅,先向右后向下依次排列,子图彼此之间。 3. 同一窗口多次叠绘 为了在一个坐标系中增加新的图形对象,可以用“hold”命令来保留原图形对象。 语法: hold on hold off hold %使当前坐标系和图形保留 %使当前坐标系和图形不保留 %在以上两个命令中切换 figure(n) %产生新图形窗口 说明:如果该窗口不存在,则产生新图形窗口并设置为当前图形窗口,该窗口名为“Figure No.n”,而不关闭其它窗 说明:在设置了“hold on”后,如果画多个图形对象,则在生成新的图形时保留当前坐标系中已存在的图形对象,MATLAB会根据新图形的大小,重新改变坐标系的比例。 4. 双纵坐标图 语法: plotyy(x1,y1,x2,y2) %以左、右不同纵轴绘制两条曲线 说明:左纵轴用于(x1,y1)数据,右纵轴用于(x2,y2)数据来绘制两条曲线。坐标轴的范围、刻度都自动产生。 3曲线的线型、颜色和数据点形 plot命令还可以设置曲线的线段类型、颜色和数据点形等,如表所示。 38 表3.1线段、颜色与数据点形 颜色 类型 黄色 品红色(紫色) 青色 红色 绿色 蓝色 白色 黑色 语法: plot(x,y,s) 说明:x为横坐标矩阵,y为纵坐标矩阵,s为类型说明字符串参数;s字符串可以是线段类型、颜色和数据点形三种类型的符号之一,也可以是三种类型符号的组合。 4. 坐标轴的控制 用坐标控制命令axis来控制坐标轴的特性,下表列出其常用控制命令。 表3.2 常用的坐标控制命令 命令 axis auto axis manual axis off axis on axis ij axis xy axis([xmin,xmax,ymin,ymax]) 含义 使用默认设置 使当前坐标范围不变 取消轴背景 使用轴背景 矩阵式坐标,原点在左上方 普通直角坐标,原点在左下方 设定坐标范围,必须满足xmin grid on grid off grid %显示分格线 %不显示分格线 %在以上两个命令间切换 命令 axis equal axis fill axis image axis normal axis square axis tight axis vis3d 含义 纵、横轴采用等长刻度 在manual方式下起作用,使坐标充满整个绘图区 纵、横轴采用等长刻度,且坐标框紧贴数据范围 默认矩形坐标系 产生正方形坐标系 把数据范围直接设为坐标范围 保持高宽比不变,用于三维旋转时避免图形大小变化 符号 y(Yellow) m(Magenta) c(Cyan) r(Red) g(Green) b(Blue) w(White) k(Black) 数据点间连线 类型 符号 数据点形 类型 实点标记 圆圈标记 叉号形× 十字形+ 星号标记* 方块标记□ 钻石形标记◇ 符号 . o x + * s d h 类型 向下的三角形标记 向上的三角形标记 向左的三角形标记 向右的三角形标记 五角星标记☆ 符号 v ^ < > p 实线(默认) - 点线 点划线 虚线 : -. -- 六连形标记 说明:不显示分格线是MATLAB的默认设置。分格线的疏密取决于坐标刻度,如果要改变分格线的疏密,必须先定义坐标刻度。 (2) 使用box命令显示坐标框 语法: box on box off box %使当前坐标框呈封闭形式 %使当前坐标框呈开启形式 %在以上两个命令间切换 39 6. 文字标注 (1) 添加图名 语法: title(s) %书写图名 说明:s为图名,为字符串,可以是英文或中文。 (2) 添加坐标轴名 语法: xlabel(s) %横坐标轴名 %纵坐标轴名 %在指定位置建立图例 %擦除当前图中的图例 ylabel(s) (3) 添加图例 语法: legend(s,pos) legend off 说明:参数s是图例中的文字注释,如果多个注释则可以用’s1’,’s2’,…的方式;参数pos是图例在图上位置的指定符,它的取值如表所示。 pos取值所对应的图例位置 pos取值 图例位置 0 1 2 左上角 3 左下角 4 右下角 -1 图右侧 自动取最佳位置 右上角(默认) 用legend命令在图形窗口中产生图例后,还可以用鼠标对其进行拖拉操作,将图例拖到满意的位置。 (4) 添加文字注释 语法: text(xt,yt,s) %在图形的(xt,yt)坐标处书写文字注释 7. 特殊符号 图形标识用的希腊字母、数学符号和特殊字符 类别 希 腊 字 母 命令 \\ alpha \\ beta \\ epsilon \\ gamma \\ Gamma \\ delta \\ Delta \\ omega \\ Omega 数 学 符 号 \\approx \\geq \\int \\sim \\cup \\surd 箭 头 \ow \\leftrightarrow 字符 α β ε γ Γ δ Δ ω Ω ≈ ≣ ∫ ≌ ∪ √ ↑ 命令 \\ eta \\ theta \\ Theta \\ iota \\ zeta \\ kappa \\ mu \\ lambda \\ Lambda \\oplus \\pm \\exists \\forall \\cap \\otimes \\downarrow \narrow 40 字符 ε ζ Θ η δ θ κ ι Λ ≡ ± ∝ ~ ∩ ↓ 命令 \\ nu \\ xi \\ Xi \\ pi \\ Pi \\ rho \\ tau \\ sigma \\ Sigma \\neq \imes \\infty \\angle \\vee \\oplus \\rightarrow → 字符 λ μ Ε π Π ρ η ζ Σ ≠ × ∞ ∟ ∨ 命令 \\ upsilon \\ Upsilon \\ phi \\ Phi \\ chi \\ psi \\ Psi \\leq \\div \\in \\perp \\wedge 字符 υ Υ θ Φ χ ψ Ψ ≢ ÷ ↔ ⊥ ∧ \\leftarrow ← 附录四 多项式的求值、求根和部分分式展开 1. 多项式求值 函数polyval可以用来计算多项式在给定变量时的值,是按数组运算规则进行计算的。 语法: polyval(p,s) 说明:p为多项式, s为给定矩阵。 2. 多项式求根 roots用来计算多项式的根。 语法:r=roots(p) 说明:p为多项式;r为计算的多项式的根,以列向量的形式保存。 与函数roots相反,根据多项式的根来计算多项式的系数可以用poly函数来实现。 语法:p=poly (r) 3. 特征多项式 对于一个方阵s,可以用函数poly来计算矩阵的特征多项式的系数。特征多项式的根即为特征值,用roots函数来计算。 语法:p=poly (s) 说明:s必须为方阵;p为特征多项式。 4. 部分分式展开 用residue函数来实现将分式表达式进行多项式的部分分式展开。 B(s)A(s)r1sp1r22rnnk(s)spsp 语法:[r,p,k]=residue(b,a) 说明:b和a分别是分子和分母多项式系数行向量;r是[r1 r2 …rn]留数行向量;p为[p1 p2 …pn]极点行向量;k为直项行向量。 5. 多项式的乘法和除法 多项式的乘法 语法:p=conv(pl,p2) 说明:p是多项式p1和p2的乘积多项式。 多项式的除法 语法:[q,r]=deconv(pl,p2) 说明:除法不一定会除尽,会有余子式。多项式p1被p2除的商为多项式q,而余子式是r。 6. 卷积 卷积和解卷是信号与系统中常用的数学工具。函数conv和deconv分别为卷积和解卷函数,同时也是多项式乘法和除法函数。 conv:计算向量的卷积。 语法:conv(x,y) 如果x是输入信号,y是线性系统的脉冲过渡函数,则x和y的卷积为系统的输出信号。 conv2:计算二维卷积。 deconv:解卷积运算。 语法:[q,r]=deconv(x,y) 41 解卷积和卷积的关系是:x=conv(y,q)+r。 7. 快速傅立叶变换 fft:一维快速傅立叶变换。 语法:X=fft(x,N) %对离散序列进行离散傅立叶变换 说明:x可以是向量、矩阵和数组;N为输入变量x的序列长度,可省略,如果X的长度小于N,则会自动补零;如果X的长度大于N,则会自动截断;当N取2的整数幂时,傅立叶变换的计算速度最快。通常取大于又最靠近x长度的幂次。 一般情况下,fft求出的函数为复数,可用abs及angle分别求其幅值和相位。 ifft:一维快速傅立叶逆变换。 语法:X=ifft(x,N) %对离散序列进行离散傅立叶逆变换 附录五 符号积分变换 1. 符号常量 符号常量是不含变量的符号表达式,用sym命令来创建符号常量。 语法:sym(‘常量’) %创建符号常量 2. 使用sym命令创建符号变量和表达式 语法:sym(‘变量’,参数) %把变量定义为符号对象 说明:参数用来设置限定符号变量的数学特性,可以选择为’positive’、’real’和’unreal’, ’positive’ 表示为“正、实”符号变量,’real’表示为“实”符号变量,’unreal’ 表示为“非实”符号变量。如果不限定则参数可省略。 语法:sym(‘表达式’) %创建符号表达式 3. 使用syms命令创建符号变量和符号表达式 语法:syms(‘arg1’, ‘arg2’, …,参数) syms arg1 arg2 …,参数 %把字符变量定义为符号变量 %把字符变量定义为符号变量的简洁形式 说明:syms用来创建多个符号变量,这两种方式创建的符号对象是相同的。参数设置和前面的sym命令相同,省略时符号表达式直接由各符号变量组成。 1. 傅里叶(Fourier)变换及其反变换 fourier变换和反变换可以利用积分函数int来实现,也可以直接使用fourier或ifourier函数实现。 1. fourier变换 语法:F=fourier(f,t ,w) %求时域函数f(t)的fourier变换F 说明:返回结果F是符号变量w的函数,当参数w省略,默认返回结果为w的函数;f为t的函数,当参数t省略,默认自由变量为x。 2. fourier反变换 语法:f=ifourier (F) f=ifourier (F,w,t) %求频域函数F的fourier反变换f(t) 说明:ifourier函数的用法与fourier函数相同。 2. 拉普拉斯(Laplace)变换及其反变换 1. Laplace变换 语法:F=laplace(f,t,s) %求时域函数f的Laplace变换F 42 说明:返回结果F为s的函数,当参数s省略,返回结果F默认为's'的函数;f为t的函数,当参数t省略,默认自由变量为't'。 2. Laplace反变换 语法:f=ilaplace(F,s,t) 3. Z变换及其反变换 1. ztrans函数 语法:F=ztrans(f,n, z) %求时域序列f的Z变换F %求F的Laplace反变换f 说明:返回结果F是以符号变量z为自变量;当参数n省略,默认自变量为'n';当参数z省略,返回结果默认为'z'的函数。 2. iztrans函数 语法:f=iztrans(F,z,n) 4. 符号函数的绘图命令 1. ezplot和 ezplot3命令 ezplot命令是绘制符号表达式的自变量和对应各函数值的二维曲线,ezplot3命令用于绘制三维曲线。 语法: ezplot(F,[xmin,xmax],fig) %画符号表达式的图形 %求F的z反变换f 说明:F是将要画的符号函数;[xmin,xmax]是绘图的自变量范围,省略时默认值为[-2л,2л];fig是指定的图形窗口,省略时默认为当前图形窗口。 表4.1 符号表达式和字符串的绘图命令 命令名 ezmesh ezmeshc ezpolar ezsurf ezsurfc 含义 画三维网线图 画带等高线的三维网线图 画极坐标图 画三维曲面图 画带等高线的三维曲面图 举例 ezmesh('sin(x)*exp(-t)','cos(x)*exp(-t)','x',[0,2*pi]) ezmeshc('sin(x)*t',[-pi,pi]) ezpolar('sin(t)',[0,pi/2]) ezsurf('x*sin(t)','x*cos(t)','t',[0,10*pi]) ezsurfc('x*sin(t)','x*cos(t)','t',[0,pi,0,2*pi]) 43 附录六 信号与系统分析常用函数 1.传递函数描述法 MATLAB中使用tf命令来建立传递函数。 语法: G=tf(num,den) %由传递函数分子分母得出 说明:num为分子向量,num=[b1,b2,…,bm,bm+1];den为分母向量,den=[a1,a2,…,an-1,an]。 2.零极点描述法 MATLAB中使用zpk命令可以来实现由零极点得到传递函数模型。 语法: G=zpk(z,p,k) %由零点、极点和增益获得 说明:z为零点列向量;p为极点列向量;k为增益。 部分分式法是将传递函数表示成部分分式或留数形式: G(s)r1sp1r2sp2rnspnk(s) 线性系统模型转换函数表 函数 tf2ss tf2zp ss2tf 调用格式 [a,b,c,d]=tf2ss(num,den) [z,p,k]=tf2zp(num,den) 功能 传递函数转换为状态空间 传递函数转换为零极点描述 [num,den]=ss2tf(a,b,c,d,iu) 状态空间转换为传递函数 状态空间转换为零极点描述 零极点描述转换为状态空间 零极点描述转换为传递函数 ss2zp [z,p,k]=ss2zp(a,b,c,d,iu) zp2ss [a,b,c,d]=zp2ss(z,p,k) zp2tf [num,den]=zp2tf(z,p,k) 3.零输入响应分析 1. 连续系统的零输入响应 MATLAB中使用initial命令来计算和显示连续系统的零输入响应。 44 语法: initial(G,x0, Ts) %绘制系统的零输入响应曲线 initial(G1,G2,…,x0, Ts) %绘制系统多个系统的零输入响应曲线 [y,t,x]=initial(G,x0, Ts) %得出零输入响应、时间和状态变量响应 说明:G为系统模型,必须是状态空间模型;x0是初始条件;Ts为时间点,如果是标量则为终止时间,如果是数组,则为计算的时刻,可省略;y为输出响应;t为时间向量,可省略;x为状态变量响应,可省略。 2. 离散系统的零输入响应 离散系统的零输入响应使用dinitial命令实现。 语法: dinitial(a,b,c,d,x0) y= dinitial (a,b,c,d,x0) %绘制离散系统零输入响应 %得出离散系统的零输入响应 %得出离散系统n点的零输入响应 [y,x,n]= dinitial (a,b,c,d,x0) 说明:a、b、c、d为状态空间的系数矩阵;x0为初始条件;y为输出响应;t为时间向量;x为状态变量响应;n为点数。 3 连续系统的脉冲响应 连续系统的脉冲响应由impluse命令来得出。 语法: impulse(G, Ts) %绘制系统的脉冲响应曲线 [y,t,x]=impulse(G, Ts) %得出脉冲响应 说明:G为系统模型,可以是传递函数、状态方程、零极点增益的形式;y为时间响应;t为时间向量;x为状态变量响应,t和x可省略;Ts为时间点可省略。 4. 离散系统的脉冲响应 离散系统的脉冲响应使用dimpulse命令实现。 语法: dimpluse(a,b,c,d,iu) %绘制离散系统脉冲响应曲线 [y,x]=dimpluse(a,b,c,d,iu,n) %得出n点离散系统的脉冲响应 %由传递函数得出n点离散系统的脉冲响应 [y,x]=dimpluse(num,den,iu,n) 说明:iu为第几个输入信号;n为要计算脉冲响应的点数;y的列数与n对应;x为状态变量,可省略。 5. 连续阶跃响应 阶跃响应可以用step命令来实现。 语法: step(G, Ts) %绘制系统的阶跃响应曲线 [y,t,x]=step(G, Ts) %得出阶跃响应 说明:参数设置与impulse命令相同。 6. 离散系统的阶跃响应 离散系统阶跃响应使用dstep命令来实现,语法规则与dimpluse相同。 7. 连续系统的任意输入响应 连续系统对任意输入的响应用lsim命令来实现。 语法: 45 lsim(G,U,Ts) %绘制系统的任意响应曲线 %绘制多个系统任意响应曲线 lsim(G1,G2,…U,Ts) [y,t,x]=lsim(G,U,Ts) %得出任意响应 说明:U为输入序列,每一列对应一个输入;Ts为时间点,U的行数和Ts相对应;参数t和x可省略。 8. 离散系统的任意输入响应 离散系统的任意输入响应用dlsim命令来实现。 语法: dlsim(a,b,c,d,U) %绘制离散系统的任意响应曲线 %得出离散系统任意响应和状态变量响应 [y,x]=dlsim(num,den,U) [y,x]=dlsim(a,b,c,d,U) %得出离散系统响应和状态变量响应 说明:U为任意序列输入信号。 4. 极点和零点 1. pole命令计算极点 语法: p=pole(G) 说明:当系统有重极点时,计算结果不一定准确。 (2) tzero命令计算零点和增益 语法: z=tzero(G) %得出连续和离散系统的零点 %获得零点和零极点增益 [z,gain]=tzero(G) 说明:对于单输入单输出系统, tzero命令也用来计算零极点增益。 5.系统频域特性 频域特性由下式求出: Gw=polyval(num,j*w)./polyval(den,j*w) mag=abs(Gw) pha=angle(Gw) %幅频特性 %相频特性 说明:j为虚部变量。 1. bode图 bode图是对数幅频和对数相频特性曲线。 语法: bode(G,w) %绘制bode图 [mag,pha]=bode(G,w) [mag,pha,w]=bode(G) %得出w对应的幅值和相角 %得出幅值、相角和频率 说明:G为系统模型,w为频率向量,mag为系统的幅值,pha为系统的相角。 2. nyquist曲线 nyquist曲线是幅相频率特性曲线,使用nyquist命令绘制和计算。 语法: nyquist (G,w) %绘制nyquist曲线 46 nyquist (G1,G2,…w) %绘制多条nyquist曲线 [Re,Im]= nyquist (G,w) [Re,Im,w]= nyquist (G) %由w得出对应的实部和虚部 %得出实部、虚部和频率 说明:G为系统模型;w为频率向量,也可以用{wmin,wmax}表示频率的范围;Re为频率特性的实部,Im为频率特性的虚部。 47
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务