如何设计一个观察者从一个状态估计所有状态?

How to design an observer to estimate all states from a single state?

我正在尝试设计 Luenberger observer (or a full state feedback observer) such that with one sensor available I can estimate all the states. A good tutorial is shown here

我的系统是四阶:

num = [-0.00198 2];
den = [1 0.1201 12.22 0.4201 2];
sys = tf(num,den);
[A, B, C, D] = tf2ss(num,den);

首先我有一个极点行向量来获得我想要的响应:

poles = [-2.6 + 1i*2.39, -2.6 - 1i*2.39, -100, -120];
K = acker(A,B,poles)
rank(obsv(A,C));  % =4
Mo = rank([C;C*A;C*A^2;C*A^3]) % =4

然后我继续计算植物极点,因此我希望我的观察者的极点应该快 3 倍左右。

plant = (A-B*K);
poles_cl = eig(plant)

poles = 3*poles_cl  % THIS IS WRONG
des_poles = (min(real(poles_cl))*3)-(1:4); %This is better

des_poles =

 -361.0000 -362.0000 -363.0000 -364.0000

然后我继续使用阿克曼的公式来放置新的极点:

% design observer by placing poles of A-LC at des_poles 
L=acker(A',C',poles_des)'
eig_obs = eig(A-L*C) 

L =

   1.0e+09 *

    8.6121
    0.1037
    0.0005
    0.0000

eig_obs =

 -361.0000
 -362.0000
 -363.0000
 -364.0000

最后剧情。为了让观察者(软件)将所有状态作为输出,我们需要设置 C = eye(4):

C = eye(4);
mysys=ss(A-L*C,[B L],C,0); %Not sure if this is correct
tf(mysys)
step(mysys)

可以看到四个输出:

针对全状态反馈观察器遵循此模型:

然后我试图在 Simulink 上验证结果,但我对框图有疑问。可以看出,我有两种状态 space 模型,一种用于真实植物,一种用于观察者。

在下图中,我比较了状态 1,结果是下面描述的第二个图。

我正在使用上面代码生成的基础作品space:

运行 我从观察者那里得到一个输出,它没有按预期跟踪或跟随工厂:

通过求和块比较状态 4 时的实际状态和观察者状态:

通过求和块比较状态 1 时的实际状态和观察者状态:

对于我选择通过求和块比较的状态为何影响观察者估计的任何建议,我们将不胜感激。


观察者参数:

植物参数:

  1. 为什么我正在比较的状态会影响观察者的反应?

您没有使用闭环系统来确定您的观察极点。您想比闭环极点更快地选择观察者极点。

您的闭环 A 矩阵变为:

Ac = (A-B*K);

然后你的闭环极点变成,

poles_cl = eig(Ac);

你可以尝试让你的观察者极点比这些极点快 3 倍甚至 10 倍,否则,并根据最快的(真实的)极点设置它们:

factor = 3;
des_poles = (min(real(poles_cl))*factor)-(1:4);
L = place(A',C',des_poles)';

你可以玩弄这个因素,在嘈杂的条件下你可能想使用较慢的极点(即因子低于 1,因为它是基于最快的极点),不要把你的噪音放大那么多。