Uppgift 12 - Kalmanfilter

Gör observatören i föregående uppgift till ett Kalmanfilter genom att beräkna ett optimalt K.

Contents

g=0.7*[1 1]; %Väljer gamma
u0=[4 4]; %Väljer u0
x0=statpoint(u0,[],g); %Stationära nivåer
disp('Systemets stationära nivåer är')
disp(x0)
[A,B,C,D]=tanklin(x0,g); %Linjäriserat system
x0obs=[0 0 0 0]; %Initialvärde för observatören
Systemets stationära nivåer är
   18.0035   28.0675    1.6339    2.5050

Fall 1 - Samma storlek på systembruset och mätbruset

r1=0.01; %Varians för processbruset
r2=0.01; %Varians för mätbruset
Q=r1*eye(2); %Kovariansmatrisen för systembruset
R=r2*eye(2); %Kovariansmatrisen för systembruset
N=zeros(2,2); %Korskovariansen mellan systembruset och mätbruset
[K,P,E]=lqe(A,B,C,Q,R,N);
disp('Observatörens egenvärden (eig(A-KC)) är')
disp(E)
Observatörens egenvärden (eig(A-KC)) är
  -0.0831          
  -0.0631 + 0.0058i
  -0.0631 - 0.0058i
  -0.0169          

Fall 2 - Systembruset är större än mätbruset

r1=0.1; %Varians för processbruset
r2=0.01; %Varians för mätbruset
Q=r1*eye(2); %Kovariansmatrisen för systembruset
R=r2*eye(2); %Kovariansmatrisen för systembruset
N=zeros(2,2); %Korskovariansen mellan systembruset och mätbruset
[K,P,E]=lqe(A,B,C,Q,R,N);
disp('Observatörens egenvärden (eig(A-KC)) är')
disp(E)
Observatörens egenvärden (eig(A-KC)) är
   -0.2625
   -0.2322
   -0.0519
   -0.0173

Fall 3 - Mätbruset är större än systembruset

r1=0.01; %Varians för processbruset
r2=0.1; %Varians för mätbruset
Q=r1*eye(2); %Kovariansmatrisen för systembruset
R=r2*eye(2); %Kovariansmatrisen för systembruset
N=zeros(2,2); %Korskovariansen mellan systembruset och mätbruset
[K,P,E]=lqe(A,B,C,Q,R,N);
disp('Observatörens egenvärden (eig(A-KC)) är')
disp(E)
Observatörens egenvärden (eig(A-KC)) är
  -0.0431          
  -0.0328 + 0.0097i
  -0.0328 - 0.0097i
  -0.0140          

Fall 4 - Antar att systembruset är mindre än det egentligen är

Vi simulerar med r1 och r2 men skattar K med 0.1*r1 och r2

r1=0.01; %Varians för processbruset
r2=0.01; %Varians för mätbruset
Q=0.1*r1*eye(2); %Kovariansmatrisen för systembruset
R=r2*eye(2); %Kovariansmatrisen för systembruset
N=zeros(2,2); %Korskovariansen mellan systembruset och mätbruset
[K,P,E]=lqe(A,B,C,Q,R,N);
disp('Observatörens egenvärden (eig(A-KC)) är')
disp(E)
Observatörens egenvärden (eig(A-KC)) är
  -0.0431          
  -0.0328 + 0.0097i
  -0.0328 - 0.0097i
  -0.0140          

Fall 5 - Antar att mätbruset är mindre än det egentligen är

Vi simulerar med r1 och r2 men skattar K med r1 och 0.1*r2

r1=0.01; %Varians för processbruset
r2=0.01; %Varians för mätbruset
Q=r1*eye(2); %Kovariansmatrisen för systembruset
R=0.1*r2*eye(2); %Kovariansmatrisen för systembruset
N=zeros(2,2); %Korskovariansen mellan systembruset och mätbruset
[K,P,E]=lqe(A,B,C,Q,R,N);
disp('Observatörens egenvärden (eig(A-KC)) är')
disp(E)
Observatörens egenvärden (eig(A-KC)) är
   -0.2625
   -0.2322
   -0.0519
   -0.0173

Resultat

Den redan färdiga modellen watertanks11.mdl simuleras med ovanstående inställningar för x0, u0, x0obs, r1 och r2. Glöm inte att koppla in bruset samt ställa in g1=g2=0.7. Nedan ges en jämförelse med fallet då systembruset och mätbruset har samma storlek. På det stora hela kan man säga att detta är en mycket bättre metod än att bestämma var polerna ska hamna.

Systembruset är större än mätbruset

Här litar man mer på mätningarna vilket innebär att systemet är snabbare.

Mätbruset är större än systembruset

Här litar man inte lika mycket på mätningarna vilket gör att systemet blir långsammare men skattningen blir samtidigt mer mjuk.

Antar att systembruset är mindre än det egentligen är

Långsammare system vilket innebär att skattningen inte kan följa de sanna tillstånden.

Antar att mätbruset är mindre än det egentligen är

Här blir skattningen mycket brusig efter som man har räknat med att mätbruset är mindre än vad det är. Polerna har nu hamnat längre in i vänster halvplan eftersom man inte tror att bruset ska bli stort efter det har förstärkts.