|
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