You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I'm starting a series of issues to track some potential ideas to accelerate and also increase the numerical stability of our Kálmán filter.
The $UDU$-decomposed formulation of Kálmán filtering replaces the storage of the full covariance matrix $C$ with two matrices, $U$ which is upper-unitriangular and $D$ which is diagonal. The logic is that the covariance matrix can be obtained using the equation $C = UDU^\intercal$. This formulation provides increased numerical stability and performance, but not increased precision. The storage of the parameter vector is untouched.
From an initial covariance matrix $C$, we can compute the $UDU$ decomposition with the following Python algorithm:
...that preserves the diagonality of $\overline{D}$ and $\overline{U}$. This can be achieved using a weighted modified Gram-Schmidt algorithm. For this, it would be nice to add an update_covariance method to a new $UDU$-decomposed track parameter class.
The Kálmán update step also changes, as the filtered covariance computation also changes. For this, we use the Agee-Turner algorithm.
Caution
I'm not currently sure if the $UDU$-decomposed Kálmán filter state also allows for more efficient smoothing.
Note
The diagonal matrix $D$ doesn't need to be stored in full, it can be stored as a vector of 6 floats. Similarly, the matrix $U$ can be stored as vector of 15 floats. This reduces the storage requirement from 72 floats to 21.
I'm starting a series of issues to track some potential ideas to accelerate and also increase the numerical stability of our Kálmán filter.
The$UDU$ -decomposed formulation of Kálmán filtering replaces the storage of the full covariance matrix $C$ with two matrices, $U$ which is upper-unitriangular and $D$ which is diagonal. The logic is that the covariance matrix can be obtained using the equation $C = UDU^\intercal$ . This formulation provides increased numerical stability and performance, but not increased precision. The storage of the parameter vector is untouched.
From an initial covariance matrix$C$ , we can compute the $UDU$ decomposition with the following Python algorithm:
The Kálmán prediction step becomes slightly more complicated than before. Instead of simply updating the covariance matrix with the Jacobian, i.e.:
We have to find updated$\overline{U}$ and $\overline{D}$ such that:
...that preserves the diagonality of$\overline{D}$ and $\overline{U}$ . This can be achieved using a weighted modified Gram-Schmidt algorithm. For this, it would be nice to add an $UDU$ -decomposed track parameter class.
update_covariancemethod to a newThe Kálmán update step also changes, as the filtered covariance computation also changes. For this, we use the Agee-Turner algorithm.
Caution
I'm not currently sure if the$UDU$ -decomposed Kálmán filter state also allows for more efficient smoothing.
Note
The diagonal matrix$D$ doesn't need to be stored in full, it can be stored as a vector of 6 floats. Similarly, the matrix $U$ can be stored as vector of 15 floats. This reduces the storage requirement from 72 floats to 21.
Useful documents: