Разработайте регулятор LQG

Как пример проекта LQG, рассмотрите следующую проблему регулирования.

Цель состоит в том, чтобы отрегулировать объект вывод y вокруг нуля. Входное воздействие d является низкой частотой со степенью спектральной плотностью (PSD), сконцентрированной ниже 10 рад/с. Поскольку LQG разрабатывают цели, это моделируется как белый шум, управляющий фильтром lowpass с сокращением на уровне 10 рад/с, показанных в следующей фигуре.

Для простоты этот шум моделируется как Гауссов белый шум с отклонением 1.

Следующие данные показывают Предвещать значение формирующий фильтра.

Предвещайте значение фильтра Lowpass

Существует некоторый шум измерения n с шумовой интенсивностью, данной

E(n2)=0.01

Используйте функцию стоимости

J(u)=0(10y2+u2)dt

задавать компромисс между производительностью регулирования и стоимостью управления. Следующие уравнения представляют модель в пространстве состояний разомкнутого цикла:

x˙=Ax+Bu+Bd(stateequations)y=Cx+n(measurements)

где (A, B, C) реализация пространства состояний 100/(s2+s+100).

Следующие команды разрабатывают оптимальный регулятор LQG F (s) для этой проблемы:

sys = ss(tf(100,[1 1 100])) % State-space plant model

% Design LQ-optimal gain K
K = lqry(sys,10,1)	 % u = -Kx minimizes J(u)

% Separate control input u and disturbance input d
P = sys(:,[1 1]);
% input [u;d], output y

% Design Kalman state estimator Kest.
Kest = kalman(P,1,0.01)

% Form LQG regulator = LQ gain + Kalman filter.
F = lqgreg(Kest,K)

Эти команды возвращают модель в пространстве состояний F регулятора LQG F (s). lqry, kalman и функции lqgreg выполняют дискретное время проект LQG, когда вы применяете их к дискретным объектам.

Чтобы подтвердить проект, замкните круг с feedback, создайте и добавьте фильтр lowpass последовательно с системой с обратной связью и сравните открытое - и импульсные ответы с обратной связью при помощи функции impulse.

% Close loop
clsys = feedback(sys,F,+1)
% Note positive feedback.

% Create the lowpass filter and add it in series with clsys.
s = tf('s');
lpf= 10/(s+10) ;
clsys_fin = lpf*clsys;

% Open- vs. closed-loop impulse responses
impulse(sys,'r--',clsys_fin,'b-')

Эти команды производят следующую фигуру, которая сравнивает открытое - и импульсные ответы с обратной связью для этого примера.

Сравнение открытых - и импульсный ответ с обратной связью

Смотрите также

|

Похожие темы