Kalman Filter For Beginners With Matlab Examples Download Top
Goal: estimate x_k given measurements z_1..z_k. Predict: x̂_k = A x̂_k-1 + B u_k-1 P_k-1 = A P_k-1 A^T + Q
for k = 1:T % simulate true motion and measurement w = mvnrnd([0;0], Q)'; % process noise v = mvnrnd(0, R); % measurement noise x = A*x + w; z = H*x + v; % Predict xhat_p = A*xhat; P_p = A*P*A' + Q; % Update K = P_p*H'/(H*P_p*H' + R); xhat = xhat_p + K*(z - H*xhat_p); P = (eye(2) - K*H)*P_p; % store pos_true(k) = x(1); pos_meas(k) = z; pos_est(k) = xhat(1); end
% 1D constant velocity Kalman filter example dt = 0.1; A = [1 dt; 0 1]; H = [1 0]; Q = [1e-4 0; 0 1e-4]; % process noise covariance R = 0.01; % measurement noise variance x = [0; 1]; % true initial state xhat = [0; 0]; % initial estimate P = eye(2); Goal: estimate x_k given measurements z_1
Update: K_k = P_k H^T (H P_k-1 H^T + R)^-1 x̂_k = x̂_k-1 + K_k (z_k - H x̂_k) P_k = (I - K_k H) P_k
dt = 0.1; A = [1 0 dt 0; 0 1 0 dt; 0 0 1 0; 0 0 0 1]; H = [1 0 0 0; 0 1 0 0]; Q = 1e-3 * eye(4); R = 0.05 * eye(2); x = [0;0;1;0.5]; % true initial xhat = [0;0;0;0]; P = eye(4); T = 100; pos_true = zeros(1,T); pos_meas =
MATLAB code:
% plot results figure; plot(1:T, pos_true, '-k', 1:T, pos_meas, '.r', 1:T, pos_est, '-b'); legend('True position','Measurements','Kalman estimate'); xlabel('Time step'); ylabel('Position'); State: x = [px; py; vx; vy]. Measurements: position only. T = 100
T = 100; pos_true = zeros(1,T); pos_meas = zeros(1,T); pos_est = zeros(1,T);