Class SRIF¶
Defined in File srif.h
Inheritance Relationships¶
Base Type¶
public lupnt::EKF(Class EKF)
Class Documentation¶
-
class SRIF : public lupnt::EKF¶
Square-Root Information Filter (SRIF): an
EKFthat stores and updates the covariance as an upper-triangular information square rootR(R^T R = P^{-1}, soP = R^{-1} R^{-T}) instead of a dense matrix.A drop-in
EKFreplacement (registered with theFilterasset factory as"SRIF"), analogous toUDUEKFbut factoring the information matrix rather than the covariance.PredictandUpdateare performed by orthogonal (Householder QR) triangularizations of the information array, which are far better conditioned than the covariance-form Kalman recursions — the estimate stays consistent even where the geometry is nearly unobservable (e.g. an unobserved coast between tracking passes). The denseP_/x_maintained by the base class are kept in sync after every step (P_ = R^{-1} R^{-T}), so the inherited outlier rejection, fault detection, logging, and Rauch-Tung-Striebel (RTS) smoother (InitializeLogger/InitializeSmootherState/LogFilterEstimate/UpdateSmoother) all work unchanged. The filter re-linearizes about its own estimate each step (extended SRIF), like the EKF.Public Functions
-
SRIF() = default¶
-
~SRIF() override = default¶
-
virtual void SetCovariance(const MatXd &P) override¶
Set the initial state covariance
P_(viaFilter::SetCovariance) and immediately factor it into the information square rootR_info_.
-
virtual void Predict(Real t, const State *u = nullptr) override¶
SRIF predict step: same propagation as
EKF::Predict(state viaf_dyn_/F_, process noiseQ_viaf_proc_), but the a-priori information square root is formed by a Householder QR of the Dyer-McReynolds time-update array instead of formingF P F^T + Qdirectly.P_is reconstructed fromR_info_afterward (equal toF P F^T + Qfor a full-rankQ).
-
virtual void Update(const VecX &z_true) override¶
SRIF update step: same outlier handling as
EKF::Update, but the correction is applied via the square-root information measurement update (InformationUpdate) instead of a batch Joseph-form Kalman update.
Protected Functions
-
void SetInfoSqrt()¶
Factor the current dense covariance
P_intoR_info_via a Cholesky ofP_^{-1}(soR_info_is upper-triangular withR_info_^T R_info_ = P_^{-1}).Called by
SetCovariance(on initialization) and is kept consistent withP_byPredict/Updatethereafter.
-
void InformationUpdate()¶
Information-form measurement update on the finalized
dz_/H_/R_: whitens the rows byR_^{-1/2}, folds them intoR_info_by a QR triangularization of[[R_info_]; [H_w]], applies the resulting state correctiondx_tox_, and reconstructsP_from the updatedR_info_.Called by
Updateonce outlier rejection has finalizeddz_/H_/R_.
-
SRIF() = default¶