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

其他小程序

开发平台:

Matlab

  1. function [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, model)
  2. % Kalman filter.
  3. % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, model)
  4. %
  5. % Inputs:
  6. % y(:,t)   - the observation at time t
  7. % A(:,:,m) - the system matrix for model m
  8. % C(:,:,m) - the observation matrix for model m
  9. % Q(:,:,m) - the system covariance for model m
  10. % R(:,:,m) - the observation covariance for model m
  11. % init_x(:,m) - the initial state for model m
  12. % init_V(:,:,m) - the initial covariance for model m
  13. % model(t) - which model to use at time t (defaults to model 1 if not specified)
  14. %
  15. % Outputs:
  16. % x(:,t) = E[X_t | t]
  17. % V(:,:,t) = Cov[X_t | t]
  18. % VV(:,:,t) = Cov[X_t, X_t-1 | t] t >= 2
  19. % loglik = sum_t log P(Y_t)
  20. [os T] = size(y);
  21. ss = size(A,1);
  22. if nargin<8, model = ones(1, T); end
  23. x = zeros(ss, T);
  24. V = zeros(ss, ss, T);
  25. VV = zeros(ss, ss, T);
  26. loglik = 0;
  27. for t=1:T
  28.   m = model(t);
  29.   if t==1
  30.     prevx = init_x(:,m);
  31.     prevV = init_V(:,:,m);
  32.     initial = 1;
  33.   else
  34.     prevx = x(:,t-1);
  35.     prevV = V(:,:,t-1);
  36.     initial = 0;
  37.   end
  38.   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...
  39.       kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, initial);
  40.   loglik = loglik + LL;
  41. end