EmrysFilter 0.1.0
State estimation utilities in C++23 using Eigen
Loading...
Searching...
No Matches
Emrys::HybridPredictedJoint< Space_, ModeSpace_, Scalar_, Allocator_ > Struct Template Reference

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()).

Detailed Description

template<Space Space_, DiscreteSpace ModeSpace_, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator>
struct Emrys::HybridPredictedJoint< Space_, ModeSpace_, Scalar_, Allocator_ >

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.

Template Parameters
Space_the continuous state space
ModeSpace_the discrete mode space
Scalar_scalar type, double by default
Allocator_allocator for the joints (see Allocation)

Member Function Documentation

◆ predictedThrough()

template<Space Space_, DiscreteSpace ModeSpace_, RealScalar Scalar_ = double, typename Allocator_ = DefaultAllocator>
GaussianParams< Space_, Scalar_ > const & Emrys::HybridPredictedJoint< Space_, ModeSpace_, Scalar_, Allocator_ >::predictedThrough ( Eigen::Index from,
Eigen::Index model ) const
inlinenodiscard
Returns
mode from's filtered Gaussian moved through mode model's process model: joints[from].predicted when they are the same mode, and otherwise its entry of throughOtherModels

The documentation for this struct was generated from the following file: