I’m pleased to announce KalmanFilters.jl.
Currently it supports the following filter types:
- (Square Root) Kalman Filter ((SR-)KF)
- (Square Root) Unscented Kalman Filter ((SR-)UKF)
- (Square Root) Augment Unscented Kalman Filter ((SR-)AUKF)
It has very flexible structure. For example you are free to choose the type of the Kalman-Filter for the time update and measurement update independently. If you have a linear time update, you may choose the (linear) Kalman-Filter and if the measurement update is non-linear, you can choose the Unscented-Kalman-Filter for that or vice versa.
The distinction between the different Kalman-Filters is simply made by the input types:
If the model is defined by a Matrix, the linear Kalman-Filter will be used. If the model is defined by a function or a functor (in case you need to pass additional information), the implementation will assume, that the model is non-linear, and will, therefore, use the Unscented-Kalman-Filter.
If you’d like to augment the noise covariance, you will have to wrap the noise covariance by the Augment
type.
All Kalman-Filter types support the square root variant. Those have an advantage compared to the normal Kalman-Filters in terms of numerical stability. In some cases they are even faster than the normal pendant. The square root variant is again determined by the input types: If you pass the cholesky factorizations of the covariances (instead of the covariances itself), the square root variant will be used.
All Kalman-Filters support to consider a subset of states. Considered states are states, that are considered in the model with its mean and variance, but are not updated in the update procedure.
This module is build with performance in mind. For every variant you will find an inplace version, that minimizes the allocation. However, in some cases the inplace version is slower than the allocating version.
This is my first package announcement, so any feedback is welcome .