root/matlab/testKF.m @ 32

Revision 32, 1.1 kB (checked in by smidl, 16 years ago)

test KF : estimation of R in KF is not possible! Likelihood of y_t is growing when R -> 0

  • Property svn:eol-style set to native
  • Property svn:keywords set to Rev Author Date
Line 
1function testKF(skipgen)
2if nargin<1, skipgen=0; end
3
4if ~skipgen
5        A=[1 -0.5; 1 0];
6        B=[1;0];
7        C=[1 0];
8        D=[0];
9        R=[1];
10        Q=[0.2 0 ; 0 0.02];
11
12        sQ = chol(Q)';
13        sR = chol(R)';
14
15        N =1000;
16        mu0 = [0;0];
17        P0 = 200*eye(2);
18
19        u = zeros(1,N);
20        x = zeros(2,N);
21        y = zeros(1,N);
22
23        x(:,1) = [10;10];
24        Et = sQ*randn(2,N);
25        Wt = sR*randn(1,N);
26        for i=2:N;
27                x(:,i) = A*x(:,i-1) + B*u(i) + Et(:,i);
28                y(:,i) = C*x(:,i) + D*u(i) + Wt(:,1);
29        end
30
31        d=[y;u];
32        itsave('testKF.it',d,A,B,C,D,Q,R,P0,mu0)
33        save testKF
34else
35        load testKF
36end
37% init
38mu = mu0;
39P = P0;
40EP = [0;0];
41
42Oxt = mu0;
43OPt = P0;
44ll =0;
45Oxt2 = mu0;
46OPt2 = P0;
47ll2=0;
48
49
50for t=2:N
51        mu = A*mu + B*u(t);
52        P  = A*P*A' + Q;
53
54        %Data update
55        Ry = C*P*C' + R;
56        iRy = inv(Ry);
57        K = P*C'*iRy;
58        P = P- K*C*P; % P = P -KCP;
59        mu = mu + K*(y(t)-C*mu-D*u(t));
60        Mu(1:2,t)=mu;
61
62        [Oxt,OPt,ll(t)] = Kalman(Oxt,y(t),A,C,Q,R,OPt);
63        [Oxt2,OPt2,ll2(t)] = Kalman(Oxt2,y(t),A,C,Q,R/10000,OPt2);
64end
65
66keyboard
67
68!cd ../;./tests/testKF
69itload('testKF_res.it');
70
71hold off
72plot(x');
73hold on
74plot(xth','--');
75plot(xth2','+');
76plot(xthE','o');
77plot(Mu',':');
78end
Note: See TracBrowser for help on using the browser.