Karlman.m
上传用户:shigeng
上传日期:2017-01-30
资源大小:122k
文件大小:1k
开发平台:

Matlab

  1. function [S,M]=Karlman(S_forward,M_forward,X,A,Q,C,H)
  2. %卡尔曼滤波
  3. %参数说明
  4. %       X--观测数据矢量
  5. %       A--状态矩阵
  6. %       Q--驱动噪声协方差
  7. %       C--观测噪声协方差
  8. %       H--观测方程句柄
  9. %       S--输出数据矢量
  10. %       S_foward--前次输出矢量
  11. %       M_forward--前次预测矩阵
  12. global T;
  13. %预测
  14. S=feval(A,S_forward);  
  15. %状态转换矩阵
  16. % A=[1,0,-S(4)/2*sin(S(3)/2)*T,cos(S(3)/2)*T,0;...
  17. %    0,1,-S(4)/2*cos(S(3)/2)*T,-sin(S(3)/2)*T,0;...
  18. %    0,0,1,-S(5)*T/(S(4))^2,T/S(4);...
  19. %    0,0,0,1,0;...
  20. %    0,0,0,0,1];
  21. A=[1,0,-S(4)/2*sin(S(3)/2)*T,cos(S(3)/2)*T,0;...
  22.     0,1,-S(4)/2*cos(S(3)/2)*T,-sin(S(3)/2)*T,0;...
  23.     0,0,1,-S(5)*T/(S(4))^2,T/S(4);...
  24.     0,0,0,1,0;...
  25.     0,0,0,0,1];
  26. %最小预测MSE矩阵
  27. M=M_forward;
  28. M=A*M*A'+Q;
  29. %卡尔曼增益矩阵
  30. K=M*H'*inv(C+H*M*H');
  31. %修正
  32. S=S+K*(X-H*S);
  33. %最小MSE矩阵
  34. M=M-K*H*M;