信控学院上机实验
实 验 报 告
课程 线代控制理论基础 实验日期 2020 年 5 月 10 日
专业班级 自动化1702班 姓名 WGX
学号 同组人
实验名称 实验四 全维状态观测器的设计 评分
批阅教师签字
一、 实验目的
1. 学习用状态观测器获取系统状态估计值的方法,了解全维状态观测器的 极点对状态的估计误差的影响;
2. 掌握全维状态观测器的设计方法;
3. 掌握带有状态观测器的状态反馈系统设计方法。
二、实验环境
1、计算机 120 台;
2、MATLAB6.X 软件 1 套。
三、实验内容
开环系统⎩
⎨⎧=+=cx y bu Ax x
&,其中
[]0100001,0,10061161A b c ⎡⎤⎡⎤
⎢⎥⎢⎥===⎢⎥⎢⎥
⎢⎥⎢⎥--⎣⎦⎣⎦ a) 用状态反馈配置系统的闭环极点:5,322-±-j ; b) 设计全维状态观测器,观测器的极点为:10,325-±-j ; c) 研究观测器极点位置对估计状态逼近被估计值的影响; d) 求系统的传递函数(带观测器及不带观测器时); e)
绘制系统的输出阶跃响应曲线。
四、程序源代码
具体程序见电子文档(实验四源代码)
五、实验步骤及结果分析
设系统完全可观测,可得到如图1.1所示的状态观测器:
图1.1 (a):
运行结果如下:
K1 =
74 25 15
sysnew =
A =
x1 x2 x3
x1 0 1 0
x2 0 0 1
x3 -80 -36 -9
B =
u1
x1 0
x2 0
x3 1
C =
x1 x2 x3
y1 1 0 0
D =
u1
y1 0
Continuous-time state-space model.
>>
(b):
运行结果如下:
L =
26
282
1770
Anew =
-26 1 0
-282 0 1
-1776 -11 6
>>
(c):
答:观测器的极点距离虚轴越近,估计状态逼近被估计值的速度越快。
(d):
运行结果如下:
①无观测器:
K1 =
74 25 15
Gb =
1
-----------------------
s^3 + 9 s^2 + 36 s + 80
Continuous-time transfer function.
>>a
图1.2
②有观测器:
An =
1 至 4 列
0 1 0 0
0 0 1 0
-6 -11 6 -74
26 0 0 -26
282 0 0 -282
1770 0 0 -1850
5 至
6 列
0 0
0 0
-25 -15
1 0
0 1
-36 -9
Bn =
1
1
Cn =
1 0 0 0 0 0
Go =
s^3 + 20 s^2 + 137 s + 370
--------------------------------------------------- s^6 + 29 s^5 + 353 s^4 + 2403 s^3 + 9862 s^2 + 2.428e04 s + 2.96e04
Continuous-time transfer function. >>
图1.3
(e ): 分析可得:
σ%=10.8% tp=1.15s ts=1.63s 原系统框图:
图1.4
原系统阶跃响应:
图
1.5
Step
-6Gain2
-11Slider Gain1
6Slider Gain
Scope
1s Integrator2
1s Integrator1
1s Integrator
10
有观测器系统框图:
图1.6
六、思考题
根据实验内容,改用降阶观测器重新设计,试用 MATLAB 语言编制其程序,并求出其传递函数及系统的阶跃响应曲线。
Scope1:
图1.7
Scope2:
图1.8
Scope3:
图1.9
源代码:
(a):
A=[0 1 0;0 0 1;-6 -11 6];
B=[0;0;1];
C=[1 0 0];D=0;
P1=[-2+2*sqrt(3)*i;-2-2*sqrt(3)*i;-5];
K1=place(A,B,P1)
sysnew=ss(A-B*K1,B,C,D)
(b):
A=[0 1 0;0 0 1;-6 -11 6];
B=[0;0;1];
C=[1 0 0];D=0;
P2=[-5+2*sqrt(3)*i;-5-2*sqrt(3)*i;-10];
K2=acker(A',C',P2);L=K2'
Anew=A-L*C
(d)
①无观测器:
A=[0 1 0;0 0 1;-6 -11 6];
B=[0;0;1];
C=[1 0 0];D=0;
P1=[-2+2*sqrt(3)*i;-2-2*sqrt(3)*i;-5];
K1=place(A,B,P1)
sysnew=ss(A-B*K1,B,C,D);
[num,den]=ss2tf(A-B*K1,B,C,D);
Gb=tf(num,den)
step(Gb)
grid on;
title('无观测器的系统的阶跃响应曲线');
②有观测器:
源程序:
A=[0 1 0;0 0 1;-6 -11 6];
B=[0;0;1];
C=[1 0 0];D=0;
P1=[-2+2*sqrt(3)*i;-2-2*sqrt(3)*i;-5];
K1=place(A,B,P1);
sysnew=ss(A-B*K1,B,C,D);
P2=[-5+2*sqrt(3)*i;-5-2*sqrt(3)*i;-10];
K2=acker(A',C',P2);L=K2';
An=[A -B*K1;L*C A-B*K1-L*C]
Bn=[B;B]
Cn=[C 0 0 0]
Dn=0;
[num,den]=ss2tf(An,Bn,Cn,Dn);
Go=tf(num,den)
step(Go)
grid on;
title('有观测器的系统的阶跃响应曲线');。