Kalman filtering and jitter
First blog post! It’s gotten rather technical - a bit more than initially aimed for - and if we discuss things in depth, we might as well go for a more academic style. I hope it’s sufficiently clear, and if not, be sure to share in the comments. Enjoy the read!
Introduction
The Kalman filter is one of the most widely employed estimators in robotics and other fields. Its robust capability to filter out noise, combined with its relative ease of tuning and extensive explainability, positions it as a straightforward choice. Consequently, its workings and implementation are extensively covered in numerous engineering books, as well as online such as kalmanfilter.net.
A subject rarely covered, however, is how to handle measurement timing noise or jitter. While the standard Kalman filter does take into account measurement noise (in the form of a covariance matrix), it still assumes that this measurement was taken at exactly the reported time instant
The first method addresses measurement time uncertainty by incorporating it into the innovation covariance matrix. It assumes that the timing error follows a known standard normal distribution and projects this uncertainty onto the innovation covariance along the state time derivative, enabling the derivation of a suitable Kalman gain. The second method takes this concept further - essentially taking the limit of timing uncertainty to infinity - and as such delivers a fully measurement time-invariant Kalman correction: the time at which the measurement was taken has negligible influence on the applied correction, assuming sufficient local linearity.
This blog post will discuss both methods, but, before going into details, we will first introduce the used symbols, and an example system such that the two methods can be evaluated with an application example.
Math terms
Here’s an overview of the symbols we will use:
Symbol | Name |
---|---|
State | |
State time derivative | |
State covariance | |
Measurement | |
Measurement noise | |
Measurement covariance | |
Measurement sensitivity | |
Innovation covariance | |
Measurement timing variance |
The state time derivative
Example system
To illustrate these methods, we will apply them to a straightforward system - an unmanned ground vehicle (UGV) with mecanum wheels operating in a room. The UGV can move horizontally (x and y axes) and due to its built-in compass and control system, it maintains a constant heading. (Allowing it to rotate is more realistic, but would add unnecessary complexity.) This system has four states, two positions and two velocities. The UGV is equipped with an accelerometer, measuring x- and y-acceleration, and these measurements propagate the filter. Additionally, a camera on the UGV observers a marker on the ceiling and outputs a position observation
In this example, the UGV drives a perfect circle of radius 2 m around the origin at a velocity of 1.5 m/s. The Kalman filter is propagated at 100 Hz and corrected at 2 Hz. The following measurement noise is present (standard deviations):
Sensor | Measurement | Symbol | Amount | Unit |
---|---|---|---|---|
accelerometer | acceleration | 0.5 | m/s² | |
camera | position | 0.05 | m | |
camera | position timestamp | 0.15 | s |
The figures below graph the position and velocity estimates, together with their two-sigma uncertainty in shaded, and the position ground truth and the camera observations. In the first figure, no timing noise is present, while in the second, minor timing noise was added to the camera observations. Both were derived using simulation, and the acceleration and position noise in the two is identical.


While the Kalman filter delivers an admirable estimation in both cases, in figure 2 the state estimate has become noticeably more jumpy. Notice in particular the jumps for the x-position between 6 and 8.3 s. Also worrying is that for several samples, the error is larger than the two-sigma uncertainty range, indicating that the state covariance
Let’s see whether we can improve on this baseline!
Method 1: Time error projection
Theory
The key issue is that, in its standard form, the Kalman filter is not aware of the timing noise. A timing error of duration
In practice,
and to account for the uncertainty resulting from the unknown timing error, we add the term
Graphical interpretation
Before delving into the simulation results, let’s visualize the errors in the system, as shown in figure 3 below. Take note of how adding the additional term causes the measurement uncertainty ellipse to grow from the default

Application example
Inserting this minor additional term into the simulation greatly changes the estimate, and for the better. As figure 4 below shows, all the large jumps are gone, and the uncertainty range now encompasses the actual error. Although this estimate doesn’t match the precision achieved in a system without timing noise, it comes remarkably close — particularly for the velocity, which is not even directly observed.

Method 2: Measurement time-invariant correction
What if… we could totally disregard time? A shortcut would be to greatly overestimate
Theory
The basic idea is that we project the observation onto a new space orthogonal to
Projecting the innovation to this orthogonal space is easily realized with
Of course, handling this different observation requires minor modifications to the Kalman gain and the covariance update. Both can be seen as using a modified observation matrix
Interpreting this visually, it is as if we would look to the observation in figure 3 along the
Application example
Figure 5 graphs the result of applying the position measurements this way. Compared with the previous method, some errors have become even smaller (those between 6 and 8.2 s for the x-position), while others have grown slightly (4.5 to 6.2 s for the y-position).

System observability
To finish, let’s briefly touch on system observability. Note in figure 5 how the covariances (shaded areas) vary over time. For the positions, they increase most rapidly when the position varies rapidly, and, on the other hand, reduce quickly when the position curve goes flatter. Qualitatively, this an expected result of observing the system only orthogonal to its time direction: the more rapidly a position estimate changes (compared to the other position estimate), the less observable it is because a particular time uncertainty implies a (relatively) larger position error. This is also reflected by the change in the observation matrix from
Conclusion
In conclusion, this blog article explores two approaches to handle timing noise in Kalman filters. A simulation of a virtual UGV demonstrated that both methods filter out the jitter effects almost completely, confirming that these methods effectively address jitter.
The first method incorporates the uncertainty of the measurement timing into the innovation covariance matrix, resulting in an adjusted Kalman gain. The second method goes a step further by assuming the timing uncertainty as infinite, yielding a measurement time-invariant Kalman correction. To realize this, this second approach projects observations onto a new space orthogonal to the state time derivative.
What are your thoughts on this? Did you already encounter timing issues, and if so, how did you resolve them? Share in the comments! Any questions are welcome as well, of course.
Enjoy Reading This Article?
Here are some more articles you might like to read next: