|
1 | 1 | close all;
|
2 |
| -%% generate data |
| 2 | +%% Parameter |
3 | 3 | clear;
|
4 | 4 | d = 2;
|
5 |
| -k = 4; |
| 5 | +k = 2; |
6 | 6 | n = 50;
|
7 | 7 |
|
8 |
| -A = [1 0 1 0; |
9 |
| - 0 1 0 1; |
10 |
| - 0 0 1 0; |
11 |
| - 0 0 0 1]; |
12 |
| -G = 0.001*eye(k); |
| 8 | +A = [1,1; |
| 9 | + 0 1]; |
| 10 | +G = eye(k)*1e-3; |
13 | 11 |
|
14 |
| -C = [1 0 0 0; |
15 |
| - 0 1 0 0]; |
16 |
| -S = eye(d); |
| 12 | +C = [1 0; |
| 13 | + 0 1]; |
| 14 | +S = eye(d)*1e-1; |
17 | 15 |
|
18 |
| -mu0 = [8; 10; 1; 0]; |
| 16 | +mu0 = [0; 0]; |
19 | 17 | P0 = eye(k);
|
20 | 18 |
|
21 | 19 | model.A = A;
|
|
25 | 23 | model.mu0 = mu0;
|
26 | 24 | model.P0 = P0;
|
27 | 25 |
|
28 |
| -[z,x] = ldsRnd(model, n); |
| 26 | +%% Generate data |
| 27 | +[z,x] = ldsRnd(model,n); |
29 | 28 | figure;
|
30 | 29 | hold on
|
31 | 30 | plot(x(1,:), x(2,:), 'ro');
|
32 | 31 | plot(z(1,:), z(2,:), 'b*-');
|
33 | 32 | legend('observed', 'latent')
|
| 33 | +title('Generated Data') |
34 | 34 | axis equal
|
35 | 35 | hold off
|
36 |
| - |
37 |
| -%% filter |
38 |
| -[mu, V, llh] = kalmanFilter(model, x); |
| 36 | +%% Kalman filter |
| 37 | +[mu, V, llh] = kalmanFilter(model,x); |
39 | 38 | figure
|
40 | 39 | hold on
|
41 | 40 | plot(x(1,:), x(2,:), 'ro');
|
42 | 41 | plot(mu(1,:), mu(2,:), 'b*-');
|
43 | 42 | legend('observed', 'filtered')
|
| 43 | +title('Kalman filter') |
44 | 44 | axis equal
|
45 | 45 | hold off
|
46 |
| - |
47 |
| -%% smoother |
48 |
| -[nu, U, llh] = kalmanSmoother(model, x); |
| 46 | +%% Kalman smoother |
| 47 | +[nu, U, llh] = kalmanSmoother(model,x); |
49 | 48 | figure
|
50 | 49 | hold on
|
51 | 50 | plot(x(1,:), x(2,:), 'ro');
|
52 | 51 | plot(nu(1,:), nu(2,:), 'b*-');
|
53 | 52 | legend('observed', 'smoothed')
|
| 53 | +title('Kalman smoother') |
54 | 54 | axis equal
|
55 | 55 | hold off
|
56 |
| - |
57 |
| -%% EM |
58 |
| -[model, llh] = ldsEm(x,model); |
59 |
| -nu = kalmanSmoother(model, x); |
| 56 | +%% LDS Subspace |
| 57 | +[A,C,z] = ldsPca(x,k,3*k); |
| 58 | +y = C*z; |
| 59 | +t = size(z,2); |
| 60 | +figure; |
| 61 | +hold on |
| 62 | +plot(x(1,1:t), x(2,1:t), 'ro'); |
| 63 | +plot(y(1,1:t), y(2,1:t), 'b*-'); |
| 64 | +legend('observed', 'projected') |
| 65 | +title('LDS subspace learning') |
| 66 | +axis equal |
| 67 | +hold off |
| 68 | +%% LDS EM |
| 69 | +[model, llh] = ldsEm(x,k); |
| 70 | +nu = kalmanSmoother(model,x); |
| 71 | +y = model.C*nu; |
60 | 72 | figure
|
61 | 73 | hold on
|
62 | 74 | plot(x(1,:), x(2,:), 'ro');
|
63 |
| -plot(nu(1,:), nu(2,:), 'b*-'); |
64 |
| -legend('observed', 'smoothed with fitted model') |
| 75 | +plot(y(1,:), y(2,:), 'b*-'); |
| 76 | +legend('observed', 'learned') |
| 77 | +title('LDS EM learning') |
65 | 78 | axis equal
|
66 | 79 | hold off
|
67 | 80 | figure;
|
|
0 commit comments