Как спроектировать наблюдателя для оценки всех состояний из одного состояния? - PullRequest
0 голосов
/ 23 декабря 2018

Я пытаюсь спроектировать наблюдатель Люнбергера (или наблюдатель с обратной связью по полному состоянию) так, чтобы при наличии одного датчика я мог оценить все состояния.Хороший учебник показан здесь .

Моя система 4-го порядка:

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)

Можно увидеть четыре выхода:

enter image description here

Следуя этой модели для наблюдателя обратной связи с полным состоянием:

enter image description here

Затем я пытаюсь проверить результаты на Simulink иУ меня проблема с блок-схемой.Как видно, у меня есть две модели пространства состояний, одна для реального растения и одна для наблюдателя.

На приведенной ниже диаграмме я сравниваю состояние 1, в результате чего второй график изображен ниже.

enter image description here

Я использую базовое рабочее пространство, сгенерированное приведенным выше кодом:

enter image description here

После запуска я получаю вывод от наблюдателя, который не отслеживает и не отслеживает установку, как ожидалось:

Фактическое состояние и состояние наблюдателя при сравнении состояния 4 с помощью блока суммирования:

enter image description here

Фактическое состояние и состояние наблюдателя при сравнении состояния 1 с помощью блока суммирования:

enter image description here

Любые предложения о том, почему состояние, которое я выбираю для сравнения через блок суммирования, влияют на оценки наблюдателей, будут оценены.


Параметры наблюдателя:

enter image description here

Параметры установки:

enter image description here

  1. Почему состояние, которое я сравниваю, влияет на реакцию наблюдателя?

1 Ответ

0 голосов
/ 24 декабря 2018

Вы не используете свою замкнутую систему для определения полюсов наблюдателя.Вы хотите выбирать полюсы наблюдателя быстрее, чем полюсы замкнутого контура.

Ваша замкнутая петля Матрица становится:

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, поскольку он основан на самом быстром полюсе), чтобы не сильно усиливать шум.

...