实验一 状态反馈与状态观测器
给定系统:
A=[-2 2 -1;0 -2 0;1 -1 0];
一、系统能控性和能观性
通过计算系统的能控性矩阵和能观性矩阵来判断系统是否可控、可观测,从而确定是否可以进行极点配置。
fprintf('system is Controlable, \nrank of controllability matrix is %d',rank(Qc))
end
system is Controlable,
rank of controllability matrix is 3
fprintf('system is Observable, \nrank of observability matrix is %d',rank(Qo))
end
system is Observable,
rank of observability matrix is 3
二、设计状态反馈控制器
根据给出的性能指标要求,用极点配置的方法设计状态反馈控制器。可否通过状态反馈将系统极点配置在-1+i,-2和-1-i处?如可以,求出上述极点配置的反馈增益向量,并绘制零输入系统状态响应曲线;
(1) 由上节可知,该系统可控,可以通过状态反馈配置极点
(2) 确定极点配置的反馈增益向量
加入状态反馈之后系统的极点为(可以看出与要求的极点一致)
display(p)
-2.0000 + 0.0000i
-1.0000 + 1.0000i
-1.0000 - 1.0000i
(3) 绘制零输入系统状态响应曲线
[y,t,x]=initial(G,x0,Tfinal);
[y2,t2,x2]=initial(G2,x0,Tfinal);
label={'x1','x2','x3','y'};
specs={'r','g','b','c','b'};
plot(t,x(:,i),strcat(specs{i},'--'),'DisplayName',label{i})
plot(t2,x2(:,i),specs{i},'DisplayName',strcat('加入反馈后',label{i}))
plot(t,y,strcat(specs{i},'--'),'DisplayName',label{i})
plot(t2,y2,specs{i},'DisplayName',strcat('加入反馈后',label{i}))
title('使用状态反馈配置零极点后的状态响应与原系统比较')
三、设计全维状态观测器
3)根据状态观测器设计的要求,设计全维状态观测器,实现状态观测器的期望极点配置。若系统状态无法直接测量,可否通过状态观测器获取状态变量?若可以,设计一个极点位于-1,-2和-3处的全维状态观测器,并绘制在观测器初始状态为0时的零输入观测器状态响应曲线;
(1) 由一可知,系统可控,所以可以设计状态观测器
使用如下形式对系统进行建模,此时系统的极点与要求的极点一致,整个系统包含两次配置的所有极点
%K=zeros(1,length(A));%K可以直接用上面求到的K
A3=[A,-B*K;H*C,A-H*C-B*K];
C3=[C,zeros(1,length(A))];
[p,~]=pzmap(G3)
-3.0000 + 0.0000i
-1.0000 + 1.0000i
-1.0000 - 1.0000i
-1.0000 + 0.0000i
-2.0000 + 0.0000i
-2.0000 + 0.0000i
绘制系统状态与观测器状态的响应曲线,从曲线中,可以看出,观测器状态快速跟随目标系统状态
[~,t3,x3]=initial(G3,[x0;zeros(size(x0))],Tfinal);
figure('Position',[0,0,800,300]);
plot(t3,x3(:,1),'r', t3,x3(:,4),'r--',...
t3,x3(:,2),'g', t3,x3(:,5),'g--',...
t3,x3(:,3),'b', t3,x3(:,6),'b--');
legend({'x1','$\hat{x_1}$','x2','$\hat{x_2}$','x3','$\hat{x_3}$'},'Interpreter','latex');
title('观测器与原系统初始状态响应曲线');
plot(t3,x3(:,1:3)-x3(:,4:6));
legend({'$x_1-\hat{x_1}$','$x_2-\hat{x_2}$','$x_3-\hat{x_3}$'},'Interpreter','latex');
title('观测器与原系统初始状态响应差值曲线')
四、分析实验结果
综上,在加入状态反馈之后,系统的状态响应的快速性得到了很好的改善,但本实验中系统的超调有所增大。使用状态观测器之后,在零初始条件下,观测器状态与原系统一致,当含有初始状态时,观测器状态响应会跟随原系统状态,并逐渐趋于同步。
附:
加入状态观测器后零初始条件下的阶跃响应
legend({'x1','x2','x3','$\hat{x_1}$','$\hat{x_2}$','$\hat{x_3}$','y'},'Interpreter','latex');
title('初始条件为零的情况下的状态响应曲线');