資源簡介
無損卡爾曼濾波程序,輸入參數即可使用,程序注釋詳細,適合初學者
代碼片段和文件信息
function?[xP]=ukf(fstatexPhmeaszQR)
%?UKF???Unscented?Kalman?Filter?for?nonlinear?dynamic?systems
%?[x?P]?=?ukf(fxPhzQR)?returns?state?estimate?x?and?state?covariance?P?
%?for?nonlinear?dynamic?system?(for?simplicity?noises?are?assumed?as?additive):
%???????????x_k+1?=?f(x_k)?+?w_k
%???????????z_k???=?h(x_k)?+?v_k
%?where?w?~?N(0Q)?meaning?w?is?gaussian?noise?with?covariance?Q
%???????v?~?N(0R)?meaning?v?is?gaussian?noise?with?covariance?R
%?Inputs:???f:?function?handle?for?f(x)
%???????????x:?“a?priori“?state?estimate
%???????????P:?“a?priori“?estimated?state?covariance
%???????????h:?fanction?handle?for?h(x)
%???????????z:?current?measurement?實際的觀測值
%???????????Q:?process?noise?covariance?
%???????????R:?measurement?noise?covariance
%?Output:???x:?“a?posteriori“?state?estimate
%???????????P:?“a?posteriori“?state?covariance
%
%?Example:?demo.m
%第一步?參數計算;
L=numel(x);?????????????????????????????????%numer?of?states
m=numel(z);?????????????????????????????????%numer?of?measurements
alpha=1e-3;?????????????????????????????????%default?tunable
ki=0;???????????????????????????????????????%default?tunable
beta=2;?????????????????????????????????????%default?tunable
lambda=alpha^2*(L+ki)-L;????????????????????%scaling?factor
c=L+lambda;?????????????????????????????????%scaling?factor
Wm=[lambda/c?0.5/c+zeros(12*L)];???????????%weights?for?means
Wc=Wm;
Wc(1)=Wc(1)+(1-alpha^2+beta);???????????????%weights?for?covariance
c=sqrt(c);
%第二步?計算Sigma點集X
X=sigmas(xPc);????%sigma?points?around?x?(共2*3+1個)
%第三步?時間更新:將Sigma點集X經過非線性函數fstate向前一步傳播(預測),并計算以下幾個值
%???x1:預測均值(先驗)
%???P1:預測方差
%???X1:?傳播后點集
%???X2:X1點集與均值的偏差
[x1X1P1X2]=ut(fstateXWm
- 上一篇:線性系統基于觀測器的狀態反饋控制的切換控制
- 下一篇:3機9節點潮流計算編程
評論
共有 條評論