|
EmrysFilter 0.1.0
State estimation utilities in C++23 using Eigen
|
One IMM prediction as its smoother needs it: the mode probabilities the step started from, each mode's Gaussian predicted through its own model as a PredictedJoint, and the chain's transition matrix. More...
#include <EmrysFilter/Filters/ImmFilter.h>
Public Types | |
| using | Scalar = Scalar_ |
| the scalar type | |
| using | SpaceType = Space_ |
| the continuous state space | |
| using | ModeSpaceType = ModeSpace_ |
| the discrete mode space | |
| using | ModesType = CategoricalParams<ModeSpace_, Scalar_> |
| the mode weights' type | |
| using | JointType = PredictedJoint<Space_, Scalar_> |
| one mode's joint | |
| using | JointsType = internal::Buffer<JointType, Allocator_> |
| the modes' joints | |
| using | TransitionsType = typename MarkovChain<ModeSpace_, Scalar_>::MatrixType |
| the chain's matrix | |
| using | PredictionsType = internal::Buffer<GaussianParams<Space_, Scalar_>, Allocator_> |
| predictions alone | |
Public Member Functions | |
| GaussianParams< Space_, Scalar_ > const & | predictedThrough (Eigen::Index from, Eigen::Index model) const |
Public Attributes | |
| ModesType | modes |
| \( \mu_{t \mid t} \), the mode probabilities before the step | |
| JointsType | joints |
| one per mode, in flat-index order | |
| TransitionsType | transitions |
| \( \Pi \), with \( \Pi_{ij} = P(r_{t+1} = j \mid r_t = i) \) | |
| PredictionsType | throughOtherModels |
| Mode j's filtered Gaussian moved through mode i's model for every i other than j, j major and i minor (see predictedThrough()). | |
One IMM prediction as its smoother needs it: the mode probabilities the step started from, each mode's Gaussian predicted through its own model as a PredictedJoint, and the chain's transition matrix.
ImmFilter::predictJoint() fills it before predicting, and a HybridGaussianHistory records it (decisions.md [smoothing]). joints[j] is mode j's filtered Gaussian \( p(x_t \mid r_t = j, z_{1:t}) \) moved through mode j's process model, with its cross-covariance, so that its filtered is the mode's Gaussian before the step; it is not the IMM's own prediction of mode j, which starts from the mixed Gaussian. This is the mode-matched prediction the IMM smoother's backward step is written against (see HybridGaussianHistory). throughOtherModels holds mode j's filtered Gaussian moved through each other mode i's model, \( p(x_{t+1} \mid r_t = j, r_{t+1} = i, z_{1:t}) \), from which the smoother weighs the modes (see predictedThrough()).
The joints come from Allocator_. Passing the same joint to each ImmFilter::predictJoint(dt, joint, inputs...) reuses their storage.
| Space_ | the continuous state space |
| ModeSpace_ | the discrete mode space |
| Scalar_ | scalar type, double by default |
| Allocator_ | allocator for the joints (see Allocation) |
|
inlinenodiscard |
joints[from].predicted when they are the same mode, and otherwise its entry of throughOtherModels