Main Content

Design d'un régulateur LQG

À titre d'exemple pour le design d'une commande LQG, considérons le problème de régulation suivant.

L'objectif est de réguler la sortie du système physique y autour de zéro. La perturbation d'entrée d est de basse fréquence avec une densité spectrale de puissance (DSP) concentrée en dessous de 10 rad/s. Pour les besoins du design d'une commande LQG, elle est modélisée comme un bruit blanc à travers un filtre passe-bas avec une coupure à 10 rad/s, comme le montre la figure suivante.

Pour simplifier, ce bruit est modélisé comme un bruit blanc gaussien avec une variance de 1.

La figure suivante montre l'amplitude du diagramme de Bode pour un filtre de mise en forme.

Amplitude du diagramme de Bode pour un filtre passe-bas

Il y a un certain bruit de mesure n, avec une intensité de bruit donnée par

E(n2)=0.01

Utilisez la fonction de coût

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

pour spécifier le compromis entre les performances de régulation et le coût du contrôle. Les équations suivantes représentent un modèle de représentation d'état en boucle ouverte :

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

où (A,B,C) est une représentation d'état de 100/(s2+s+100).

Les commandes suivantes conçoivent le régulateur LQG optimal F(s) pour ce problème :

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)

Ces commandes renvoient un modèle de représentation d'état F du régulateur LQG F(s). Les fonctions lqry, kalman et lqgreg effectuent un design de commande LQG en temps discret lorsque vous les appliquez à des systèmes physiques discrets.

Pour valider le design, fermez la boucle avec feedback, créez et ajoutez le filtre passe-bas en série avec le système fermé, et comparez les réponses impulsionnelles en boucle ouverte et fermée à l'aide de la fonction 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-')

Ces commandes produisent la figure suivante, qui compare les réponses impulsionnelles en boucle ouverte et fermée pour cet exemple.

Comparaison de la réponse impulsionnelle en boucle ouverte et fermée

Voir aussi

|

Sujets associés