📄 ekf.m
字号:
function [xh, Px] = ekf(state, Pstate, pNoise, oNoise, obs)% EKF ----- Main Code% Reference: ReBEL, Rudolph van der Merwe% (c) Shi Heng (2007)Xdim = 6; % 状态向量维数Odim = 6; % 观测向量维数Vdim = 6; % 系统噪声向量维数Ndim = 6; % 观测噪声向量维数NOV = size(obs,2); % 观测向量个数xh = zeros(Xdim,NOV);xh_ = zeros(Xdim,NOV);zh_ = zeros(Odim,NOV);inov = zeros(Odim,NOV);%----------------滤波递推--------------for i=1:NOV, % Time Update [A] = feval(@linearize, state, pNoise.mu, oNoise.mu,'A'); [G] = feval(@linearize, state, pNoise.mu, oNoise.mu,'G'); xh_(:,i) = feval(@ffun, state, pNoise.mu); Px_ = A*Pstate*A' + G*pNoise.cov*G'; % Measurement Update [C] = feval(@linearize, xh_(:,i), pNoise.mu, oNoise.mu,'C'); [H] = feval(@linearize, state, pNoise.mu, oNoise.mu,'H'); Py = C*Px_*C' + H*oNoise.cov*H'; KG = Px_ * C' * inv(Py);%%%%%%%%%%%%%%%%%%%%%%%!!!!!!! yh_(:,i) = feval(@hfun, xh_(:,i), oNoise.mu); inov(:,i) = obs(:,i) - yh_(:,i); xh(:,i) = xh_(:,i) + KG * inov(:,i); Px = Px_ - KG*Py*KG'; state = xh(:,i); Pstate = Px; end % loop end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -