root/matlab/testKF.m @ 10

Revision 9, 0.8 kB (checked in by smidl, 16 years ago)
  • Property svn:eol-style set to native
  • Property svn:keywords set to Rev Author Date
Line 
1function testKF(skipgen)
2if nargin<1, skipgen=0;
3
4if ~skipgen
5        A=[1 -0.5; 1 0];
6        B=[1;0];
7        C=[1 0];
8        D=[0];
9        R=[0.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 = ones(1,N);
20        x = zeros(2,N);
21        y = zeros(1,N);
22
23        x(:,1) = [10;10];
24        for i=2:N;
25                et(1:2,i) = sQ*randn(2,1);
26                x(:,i) = A*x(:,i-1) + B*u(i) + et(:,i);
27                y(:,i) = C*x(:,i) + D*u(i) + sR*randn(1,1);
28        end
29
30        d=[y;u];
31        itsave('testKF.it',d,A,B,C,D,Q,R,P0,mu0)
32        save testKF
33else
34        load testKF
35end
36% init
37mu = mu0;
38P = P0;
39EP = [0;0];
40
41for t=2:N
42        mu = A*mu + B*u(t);
43        P  = A*P*A' + Q;
44
45        %Data update
46        Ry = C*P*C' + R;
47        iRy = inv(Ry);
48        K = P*C'*iRy;
49        P = P- K*C*P; % P = P -KCP;
50        mu = mu + K*(y(t)-C*mu-D*u(t));
51        Mu(1:2,t)=mu;
52end
53
54!./testKF
55itload('testKF_res.it');
56
57hold off
58plot(x');
59hold on
60plot(xth','--');
61plot(xth2','+');
62plot(Mu',':');
63end
Note: See TracBrowser for help on using the browser.