
How to define a Kalman filter with a delta time dependent process noise?
12 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hello,
I am using the trackingKF and trackingUKF functions from the Sensor Fusion and Tracking Toolbox to create kalman filters. I have been trying to figure out how to create a process noise function that is dependent delta time (dt), and give this process noise function to the trackingKF constructor function, or creating a KalmanFilter object without the TrackingKF. I have tried the first suggestions in set process noise 1D Constant Velocity - (mathworks.com), and from this I understood it in the following way:
If I use
sigmasq = 3;
EKF = trackingEKF(@constvel,@cvmeas,zeros(2,1),'HasAdditiveProcessNoise', false,'ProcessNoise',sigmasq);
to create my kalman filter for the IMM in the TOMHT, the process noise used by the EKF will be 3 * [0.25 * dt^4, 0.5 * dt^2; 0.5 * dt^2; dt].
Did I understand correctly? If so, where can I find the code where this is implemented? If not, how can I achieve this?
Thank you,
Joost
0 commentaires
Réponse acceptée
Prashant Arora
le 2 Mai 2022
Modifié(e) : Prashant Arora
le 2 Mai 2022
Hi Joost,
The “constvel” and other built-in motion models take advantage of the non-additive EKF/UKF process noise model to describe the process noise and time step impact.
The constvel motion model is defined as:

When you use an EKF with non-additive process noise (HasAdditiveProcessNoise = false), the Jacobian of the state transition with respect to noise (which is simply
in this case) takes care of the time-varying nature.
These analytical Jacobians are defined using constveljac as a function of time step. However, even numerical Jacobian should include the time impact. Here,
represents the ProcessNoise matrix defined as an N-D square matrix.
Similarly, when using an UKF, the random vector is sampled from the
matrix and the propagation of random vector using the motion model (
) automatically considers the impact of time-step.
Hope this helps
Thanks,
Prashant
3 commentaires
Prashant Arora
le 4 Mai 2022
Modifié(e) : Prashant Arora
le 4 Mai 2022
Hi Joost,
I apologize for the confusion. You are right. I meant that the random vector (
) is sampled deterministically using sigma-point calculation as a function of α, β and κ.
You are right that the w in the motion model must be non-zero sometimes. I could not reproduce this behavior at my end. I do see non-zero w in the motion model passed by UKF. For every call to "predict" method of UKF, the non-zero w is sent to motion model after
calls, where
is the number of states in your motion model. This is because the UKF first propagates sigma points for the state (x) with 0 process noise. Then, it propagates sigma points for process noise with mean state. Can you please try putting a conditional breakpoint (any(abs(w) > 0)) and check if the breakpoint is hit? If it doesn't get hit, please share the MATLAB release you're using and I can investigate further.
That said, the code for sigma point calculations for non-additive process noise should be available in the following file:
"matlabshared.tracking.internal.UKFPredictorNonAdditive"
This file should be available at:
matlabroot\toolbox\shared\tracking\trackinglib\+matlabshared\+tracking\+internal\UKFPredictorNonAdditive.m
Hope this helps.
Prashant
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Tracking and Sensor Fusion dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!