Engineering Guides · Module 10
Obtaining IMU noise parameters
Record the IMU still for hours, compute the Allan deviation, and read the noise density at one second. Check the units your estimator expects.
Assumptions: Numbers in the examples are illustrative and the code is executed by the site’s tests. Facts taken from a cited source are marked; other statements are general engineering knowledge and must be confirmed on the datasheet of the part you use.
1. Engineering problem
Visual-inertial and LiDAR-inertial estimators weight the IMU against other sensors using its noise parameters. Too small and the estimator over-trusts the IMU; too large and it ignores it. Datasheet values are a start, and a measured Allan deviation shows the real noise with your power supply and mounting.
2. When is this needed?
- Setting up a VIO or LIO estimator.
- When the estimator is over- or under-confident.
- After changing the IMU rate or filter.
3. Selection and design decisions
The Allan deviation is computed from a long static recording by averaging over clusters of length τ and comparing neighbouring averages. For white rate noise it falls with slope −1/2 on a log-log plot; its value at τ = 1 s gives the noise density (units rad/s/√Hz for a gyro, m/s²/√Hz for an accelerometer, under the convention where density = per-sample standard deviation ÷ √sample rate). The rising part at long τ gives the bias random walk. Estimators differ in conventions (continuous or discrete time, Hz or sample rate), so read the documentation of yours; the Kalibr README (read 2026-11-06) lists calibration of IMU intrinsic parameters, and its documentation describes the noise model it expects.
| Parameter | Read from | Typical estimator input |
|---|---|---|
| Gyro noise density | Allan deviation at τ = 1 s (slope −1/2 region) | rad/s/√Hz |
| Gyro bias random walk | Slope +1/2 region at long τ | rad/s²/√Hz |
| Accel noise density | Allan deviation at τ = 1 s | m/s²/√Hz |
| Accel bias random walk | Slope +1/2 region | m/s³/√Hz |
| Bias instability | Minimum of the curve | Informational |
4. Advantages and disadvantages
- Longer recordings reveal the random-walk region (hours) and cost time.
- Inflating the noise slightly (a common practice) makes the estimator more tolerant of unmodelled errors and loses some accuracy.
- Temperature changes during the recording bias the result.
5. Requirements and constraints
- The robot is perfectly still and the temperature stable during the recording.
- The sample rate and any internal filter are the ones used in operation.
- Units and conventions match the estimator’s documentation.
6. Architecture
static recording (hours) ─▶ Allan deviation vs τ ─▶ read density at τ = 1 s and random-walk slope ─▶ estimator config7. Implementation
- Record the IMU still for at least several hours at the operating rate.
- Compute the Allan deviation for τ from the sample period up to a fraction of the recording.
- Read the noise density at τ = 1 s on the −1/2 slope and the random walk on the +1/2 slope.
- Convert to the estimator’s convention and units.
- Optionally inflate by a small factor and validate on a real run.
import numpy as np
rng = np.random.default_rng(1)
fs = 100.0
sigma = 0.002 # white gyro noise, rad/s per sample (illustrative)
w = rng.normal(0, sigma, 200000)
def adev(x, m): # overlapping Allan deviation at tau = m / fs
c = np.cumsum(np.insert(x, 0, 0.0))
avg = (c[m:] - c[:-m]) / m
d = avg[m:] - avg[:-m]
return np.sqrt(0.5 * np.mean(d ** 2))
taus = [1, 10, 100, 1000]
vals = [adev(w, m) for m in taus]
for m, v in zip(taus, vals):
print(f"tau {m / fs:7.2f} s: Allan deviation {v:.6f} rad/s")
slope = np.polyfit(np.log(taus), np.log(vals), 1)[0]
n_density = adev(w, int(fs))
print(f"log-log slope {slope:.2f} (white noise: -0.5)")
print(f"noise density from tau = 1 s: {n_density:.6f} rad/s/sqrt(Hz); direct from sigma: {sigma / np.sqrt(fs):.6f}")Printed (checked by the site’s tests):
tau 0.01 s: Allan deviation 0.001999 rad/s
tau 0.10 s: Allan deviation 0.000629 rad/s
tau 1.00 s: Allan deviation 0.000195 rad/s
tau 10.00 s: Allan deviation 0.000064 rad/s
log-log slope -0.50 (white noise: -0.5)
noise density from tau = 1 s: 0.000195 rad/s/sqrt(Hz); direct from sigma: 0.000200Reading it: synthetic white noise of 0.002 rad/s per sample at 100 Hz gives an Allan deviation that falls by √10 for each decade of τ (log-log slope −0.50), with 0.000195 rad/s at τ = 1 s against the true 0.000200 rad/s/√Hz. The recording is synthetic and short; a real IMU adds a rising random-walk branch at long τ.
8. Real examples
- VIO setup: noise densities from a 3 h Allan run entered in the estimator’s configuration, inflated by a small factor.
9. Failure scenarios
- Using datasheet values at a different bandwidth than the recorded rate.
- A recording with the robot on a vibrating floor.
- Confusing per-sample standard deviation with density.
10. Troubleshooting
- If the slope is not −1/2 at short τ, there may be filtering or quantisation.
- If the curve never rises, the recording is too short for the random walk.
- If the estimator is over-confident, increase the noise slightly.
11. Validation
- The example prints the lines shown (executed by the site tests).
- The estimator’s innovation statistics are consistent with its noise assumptions on a real run.
12. Engineering checklist
13. Further references
- Kalibr README: ethz-asl/kalibr, read 2026-11-06 (it states that Kalibr performs visual-inertial calibration: spatial and temporal calibration of an IMU with respect to a camera system, along with IMU intrinsic parameters).
- Allan variance and its application to IMUs follow IEEE Std 952 and standard texts; they were not read for this page.