1自由度振動系(2次遅れ系)のLQGサーボコントローラ

f:id:seinzumtode:20200912222206p:plain

clear; close all; clc;

A = [0 1;-1 -1];
B = [0; 1];
C = [1 0];
D = 0;
sys = ss(A,B,C,D);

nx = 2;    %Number of states
ny = 1;    %Number of outputs
Qn = [4 0; 0 1];
Rn = 0.7;
R = 1;
QXU = blkdiag(0.1*eye(nx),R);
QWV = blkdiag(Qn,Rn);
QI = eye(ny);
 
KLQG = lqg(sys,QXU,QWV)

KLQG1 = lqg(sys,QXU,QWV,QI,'1dof');
KLQG2 = lqg(sys,QXU,QWV,QI,'2dof');

G = tf(sys);

KLQG_TF1=tf(KLQG1);
C1 = KLQG_TF1;
step(feedback(C1*G,1));
title('位置xのステップ応答(1自由度)');

figure();
KLQG_TF2 = tf(KLQG2);
Cr = KLQG_TF2(1);
Cy = KLQG_TF2(2);
T1 = G*Cr/(1-G*Cy); %closed loop TFcn
step(T1);
title('位置xのステップ応答(2自由度)');

big;

f:id:seinzumtode:20200912222025p:plain
f:id:seinzumtode:20200912222043p:plain