tracking_demo.m
上传用户:mozhenmi
上传日期:2008-02-18
资源大小:13k
文件大小:1k
源码类别:

其他小程序

开发平台:

Matlab

  1. % Make a point move in the 2D plane
  2. % State = (x y xdot ydot). We only observe (x y).
  3. % This code was used to generate Figure 17.9 of "Artificial Intelligence: a Modern Approach",
  4. % Russell and Norvig, 2nd edition, Prentice Hall, in preparation.
  5. % X(t+1) = F X(t) + noise(Q)
  6. % Y(t) = H X(t) + noise(R)
  7. ss = 4; % state size
  8. os = 2; % observation size
  9. F = [1 0 1 0; 0 1 0 1; 0 0 1 0; 0 0 0 1]; 
  10. H = [1 0 0 0; 0 1 0 0];
  11. Q = 0.1*eye(ss);
  12. R = 1*eye(os);
  13. initx = [10 10 1 0]';
  14. initV = 10*eye(ss);
  15. seed = 9;
  16. rand('state', seed);
  17. randn('state', seed);
  18. T = 15;
  19. [x,y] = sample_lds(F, H, Q, R, initx, T);
  20. [xfilt, Vfilt, VVfilt, loglik] = kalman_filter(y, F, H, Q, R, initx, initV);
  21. [xsmooth, Vsmooth] = kalman_smoother(y, F, H, Q, R, initx, initV);
  22. dfilt = x([1 2],:) - xfilt([1 2],:);
  23. mse_filt = sqrt(sum(sum(dfilt.^2)))
  24. dsmooth = x([1 2],:) - xsmooth([1 2],:);
  25. mse_smooth = sqrt(sum(sum(dsmooth.^2)))
  26. subplot(2,1,1)
  27. hold on
  28. plot(x(1,:), x(2,:), 'ks-');
  29. plot(y(1,:), y(2,:), 'g*');
  30. plot(xfilt(1,:), xfilt(2,:), 'rx:');
  31. for t=1:T, gaussplot(xfilt(1:2,t), Vfilt(1:2, 1:2, t), 1); end
  32. hold off
  33. legend('true', 'observed', 'filtered', 0)
  34. xlabel('X1')
  35. ylabel('X2')
  36. subplot(2,1,2)
  37. hold on
  38. plot(x(1,:), x(2,:), 'ks-');
  39. plot(y(1,:), y(2,:), 'g*');
  40. plot(xsmooth(1,:), xsmooth(2,:), 'rx:');
  41. for t=1:T, gaussplot(xsmooth(1:2,t), Vsmooth(1:2, 1:2, t), 1); end
  42. hold off
  43. legend('true', 'observed', 'smoothed', 0)
  44. xlabel('X1')
  45. ylabel('X2')