What a mixture filter's update did: each prior component's update before reduction, the observation's log-likelihood under the whole mixture, and whether any component accepted the measurement.
More...
template<typename ComponentUpdate, typename Scalar = double, typename Allocator = DefaultAllocator>
struct Emrys::MixtureFilterUpdate< ComponentUpdate, Scalar, Allocator >
What a mixture filter's update did: each prior component's update before reduction, the observation's log-likelihood under the whole mixture, and whether any component accepted the measurement.
components[i] is the update of the prior's component i by its recursion: a FilterUpdate for a Gaussian, with its own log-likelihood \( \log p(z \mid i) \), its noise components' posterior probabilities, and their NIS; an ImmFilterUpdate for a hybrid state. Its accepted is false when the recursion, such as a Gate's policy, dropped that component. When accepted is false here, no component with a nonzero weight accepted the measurement and the state kept its prior (decisions.md [update-outcomes]). Prior weights that cannot be normalized are an error of the update, not a result. posteriorIndices(i) gives the components of the state that prior component i became.
The components and the posterior indices come from Allocator, the indices reserved by the state's capacity where it has one. Passing the same result, made from the allocator, to each MixtureFilter::update(measurement, policy, result) reuses their storage.
- Template Parameters
-
| ComponentUpdate | what the recursion's update returns for one component |
| Scalar | scalar type, double by default |
| Allocator | allocator for the components' updates (see Allocation) |