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.