实验一 MATLAB系统的传递函数和状态空间表达式的转换.

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一 MATLAB 系统的传递函数和状态空间表达式的转换
一、 实验目的
1、学习多变量系统状态空间表达式的建立方法;
2、通过编程、上机调试,掌握多变量系统状态空间表达式与传递函数之间相互转换的方法;
3、掌握相应的MATLAB 函数。

二、 实验原理
设系统的模型如式(1.1)所示:
⎩⎨⎧+=+=D
Cx y Bu Ax x ' x ''R ∈ u ∈R ’’’ y ∈R P (1.1) 其中A 为nXn 维系统矩阵、B 为nXm 维输入矩阵、C 为pXn 维输出矩阵,D 为直接传递函数。

系统的传递函数和状态空间表达式之间的关系如式(1.2)所示
G(s)=num(s)/den(s)=C (SI-A)-1 B+D (1.2)
式(1.2)中,num(s)表示传递函数的分子阵,其维数是pXm ,den(s)表示传递函数的按s 降幂排列的分母。

表示状态空间模型和传递函数的MATLAB 函数如下:
函数ss (state space 的首字母)给出了状态空间模型,其一般形式是: sys=ss(A,B,C,D)
函数tf (transfer function 的首字母)给出了传递函数,其一般形式是: G=tf(num ,den)
其中num 表示传递函数中分子多项式的系数向量(单输入单输出系统),den 表示传递函数中分母多项式的系数向量。

函数tf2ss 给出了传递函数的一个状态空间实现,其一般形式是:
[A,B,C,D]=tf2ss(num,den)
函数ss2tf 给出了状态空间模型所描述系统的传递函数,其一般形式是:
[num,den]=ss2tf(A,B,C,D,iu)
其中对于多输入系统,必须确定iu 的值。

例如,若系统有三个输入u 1,u 2,u 3,则iu 必须是1、2、或3,其中1表示u 1,2表示u 2,3表示u 3。

该函数的结果是第iu 个输入到所有输出的传递函数。

三.实验步骤及结果
1、应用MATLAB 对下列系统编程,求系统的A 、B 、C 、D 阵,然后验证传递函数是相同的。

G(s)= ⎥⎦
⎤⎢⎣⎡+++352^12s s
s s 3+4s 2+5s+1
程序和运行结果:
num=[0 0 2 1;0 1 5 3];
den=[1 4 5 1];
[A,B,C,D]=tf2ss(num,den)
A = -4 -5 -1
1 0 0
0 1 0
B = 1
C =0 2 1
1 5 3
D =0
A=[-4 -5 -1;1 0 0;0 1 0];
A=[-4 -5 -1;1 0 0;0 1 0];
B=[1;0;0];
C=[0 2 1;1 5 3];
D=[0;0];
[num1,den1]=ss2tf(A,B,C,D,1)
num1 = 0 0.0000 2.0000 1.0000
0 1.0000 5.0000 3.0000
den1 =1.0000 4.0000 5.0000 1.0000
2、给定系统G(s)=6112^63^5
42^+++++s s s s s ,求系统的零极点增益模型
和状态空间模型
程序和运行结果:
num=[0 1 4 5];
den=[1 6 11 6];
sys=tf(num,den)
Transfer function:
s^2 + 4 s + 5
----------------------
s^3 + 6 s^2 + 11 s + 6
>> sys1=tf2zp(num,den)
sys1 = -2.0000 + 1.0000i
-2.0000 - 1.0000i
>> [A,B,C,D]=tf2ss(num,den)
A =6 -11 -6
1 0 0
0 1 0
B =1
C =1 4 5
D =0
实验2 状态空间模型系统仿真及状态方程求解
一、实验目的
1、熟悉线性定常离散与连续系统的状态空间控制模型的输入方法;
2、熟悉系统模型之间的转换功能;
3、利用MATLAB对线性定常系统进行动态分析。

二、实验原理
函数step(sys)给出了系统的单位阶跃响应曲线,其中的sys表示贮存在计算机内的状态空间模型,它可以由函数sys=ss(A,B,C,D)得到。

函数impulse(sys)给出了系统的单位脉冲响应曲线。

函数[y,T,x]=Isim(sys,u,t,x0)给出了一个状态空间模型对任意输入的响应,x0是初始状态。

函数c2d将连续系统状态空间描述转化为离散系统状态空间形式,其一般形式为:[G,H]=c2d(A,B,T),其中的T是离散化模型的采样周期。

函数d2c将离散系统状态空间描述转化为连续系统状态空间描述,其一般形式为:sysc=d2c(sysd,Method),其中的Method默认值为‘zoh’方法,即带零阶保持器的z变换。

函数dstep(G,H,C,D)给出了离散系统的单位阶跃响应曲线。

三、实验步骤及结果
程序和运行结果:
T=0.5s时
T=1s时
T=2s时
A=[0 1 0;-2 -3 0;-1 1 -3];
B=[0;0;1];
C=[1 1 1];
D=1;
[G1 H1]=c2d(A,B,0.5)
G1 =0.8452 0.2387 0 -0.4773 0.1292 0
-0.3326 0.0508 0.2231 H1 = 0
0.2590
>> dstep(G1,H1,C,D,1)
>> dstep(G1,H1,C,D,1)
>> [G2 H2]=c2d(A,B,1)
G2 =0.6004 0.2325 0
-0.4651 -0.0972 0
-0.3795 -0.0614 0.0498 H2 =0
0.3167
>> dstep(G2,H2,C,D,1)
>> [G3 H3]=c2d(A,B,2)
[G3 H3]=c2d(A,B,2)
G3 =0.2524 0.1170 0 -0.2340 -0.0987 0
-0.2182 -0.0853 0.0025 H3 =0
0.3325
>> dstep(G3,H3,C,D,1) 程序和运行结果:
Z域仿真图形:
连续域仿真图形:
程序:
G=[0 1;-0.16 1];
H=[1;1];
C=[1 1];
D=0;
u=1;
dstep(G,H,C,D,u) sysd=ss(G,H,C,D,0.05) a = x1 x2
x1 0 1
x2 -0.16 1 b = u1
x1 1
x2 1
c = x1 x2
y1 1 1
d = u1
y1 0 Sampling time: 0.05 Discrete-time model.
>> sysc=d2c(sysd,'zoh')
a = x1 x2
x1 -41.43 46.21
x2 -7.394 4.779
b = u1
x1 16.34
x2 21.12
c = x1 x2
y1 1 1
d = u1
y1 0 Continuous-time model.
>> step(sysc);
实验3 能控能观判据及稳定性判据
一、实验目的
1、利用MATLAB分析线性定常及离散系统的可控性与可观性;
2、利用MATLAB判断系统的稳定性。

二、实验原理
给定系统状态空间描述[A,B,C,D],函数ctrb(A,B)计算能控性判别矩阵;
函数obsv(A,C)计算能观测性判别矩阵;
函数P=lyap(A,Q)求解李雅普诺夫方程A T P+PA=-Q,Q为正定对称矩阵;
函数[D p]=chol(P)可用于判断P矩阵是否正定,p=0,矩阵正定,p为其它值,矩阵非正定。

三、实验步骤及结果
1)(2)
A=[1 0 0 0;2 -3 0 0;1 0 -2 0;4 -1 -2 -4];
B=[0;0;1;2];
C=[3 0 1 0];
Qc=ctrb(A,B)
Qc =0 0 0 0
0 0 0 0
1 -
2 4 -8
2 -10 44 -184
>> rank(Qc)
ans =2
>> rank(obsv(A,C))
ans =2
能控性判别矩阵Qc和能观性判别矩阵都不满秩,故系统既不能控,也不能观。

(3)A=[1 0 0 0;2 -3 0 0;1 0 -2 0;4 -1 -2 -4];
B=[0;0;1;2];
C=[3 0 1 0];
D=[0];
[z,p,k]=ss2zp(A,B,C,D,1);
Flagz=0;
n=length(A);
for i=1:n
if real(p(i))>0
Flagz=1;
end
end
>> disp('系统的零极点模型为');z,p,k
系统的零极点模型为
z = 1.0000
-4.0000
-3.0000
p =-4
-3
-2
1
k =1.0000
>> if Flagz==1
disp('系统不稳定');
else disp('系统是稳定的');
end
系统不稳定
>> step(A,B,C,D);
时间响应曲线为:
实验4 状态反馈及状态观测器的设计
一、实验目的
1、熟悉状态反馈矩阵的求法;
2、熟悉状态观测器设计方法。

二、实验原理
MATLAB 软件提供了两个函数acker 和place 来确定极点配置状态反馈控制器的增益矩阵K ,函数acker 是基于求解极点配置问题的艾克曼公式,它只能应用到单输入系统,要配置的闭环极点中可以包括多重极点。

函数place 用于多输入系统,但配置极点不可以包括多重极点。

函数acker 和place 的一般形式是:
K=acker(A,B,P)
K=place(A,B,P)
其中的P 是一个向量,P=[n λλλ,...2,1],n λλλ,...2,1是n 个期望的闭环极点。

得到了所要求得反馈增益矩阵后,可以用命令eig(A-B*K)来检验闭环极点。

由状态反馈极点配置和观测器设计问题直接的对偶关系,观测器设计是状态反馈设计的转置,可以用H=(acker(A ’,C ’,V ’))’来确定一般系统的观测器矩阵,用命令eig(estim(sysold,H))来检验极点配置。

三、实验步骤及结果
step(A,B,C,D);
num=[0 0 1];
den=[1 3 2];
[A,B,C,D]=tf2ss(num,den)
A =-3 -2
1 0
B =1
C = 0 1
D = 0
2、配置后系统的时间响应曲线为:
A=[-3 -2;1 0];
B=[1;0];
C=[0 1];
D=0;
P=[-1+sqrt(-1);-1-sqrt(-1)];
K=acker(A,B,P)
K = -1 0
>> disp('极点配置后的闭环系统为') 极点配置后的闭环系统为
>> sysnew=ss(A-B*K,B,C,D)
a = x1 x2
x1 -2 -2
x2 1 0
b = u1
x1 1
x2 0
c = x1 x2
y1 0 1
d = u1
y1 0 Continuous-time model. >> step(sysnew)
所以:K=[-1 0]
A=[-3 -2;1 0];
B=[1;0];
C=[0 1];
D=0;
V=[-3;-3];
sysold=ss(A,B,C,D);
p=eig(A)
p =-2
-1
Q=obsv(A,C);
m=rank(Q);
n=length(A);
if m==n
H=acker(A',C',V')'
else
disp('系统不是状态完全可观测') end
H =-2
3
所以:H=[-2 3]。

相关文档
最新文档