aboutsummaryrefslogtreecommitdiff
path: root/src/modules/position_estimator_mc/positionKalmanFilter1D.m
blob: 144ff8c7c2b92faaa4d9ea2c6c5141a6ae895760 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function [x_aposteriori,P_aposteriori]=positionKalmanFilter1D(A,B,C,x_aposteriori_k,P_aposteriori_k,u,z,gps_update,Q,R,thresh,decay)
%prediction
    x_apriori=A*x_aposteriori_k+B*u;
    P_apriori=A*P_aposteriori_k*A'+Q;
    if abs(u)<thresh
        x_apriori(2)=decay*x_apriori(2);
    end
    %update
    if gps_update==1
        y=z-C*x_apriori;
        S=C*P_apriori*C'+R;
        K=(P_apriori*C')/S;
        x_aposteriori=x_apriori+K*y;
        P_aposteriori=(eye(size(P_apriori))-K*C)*P_apriori;
    else
        x_aposteriori=x_apriori;
        P_aposteriori=P_apriori;
    end
end