Noise and Approximate-Bias Estimators
| This documentation was generated with the assistance of AI. Please report any inaccuracies. |
Classes: com.irurueta.navigation.inertial.calibration.noise (37 classes),
com.irurueta.navigation.inertial.calibration.bias (5 classes), plus the root-level interfaces
AccelerometerNoiseRootPsdSource, GyroscopeNoiseRootPsdSource, AccelerometerBiasUncertaintySource,
GyroscopeBiasUncertaintySource, AccelerometerCalibrationSource, GyroscopeCalibrationSource.
These classes don’t perform full calibration — they estimate simpler statistics (noise level, or an approximate bias) that either feed into static-interval detection, seed a non-linear calibrator’s initial guess, or configure a Kalman filter’s initial uncertainty.
Noise estimators: PSD and root-PSD
All noise estimators reduce to two orthogonal choices — what statistic, and how much history:
| Family | Behavior |
|---|---|
|
A single running (recursive) mean/variance over all samples seen so far, using a biased (divide-by-N) variance estimator that converges to the unbiased one for large . Intended for use when the device is static for the entire capture. |
|
Recomputes mean/variance over only the most recent |
Each of those two comes in a single-axis form (*MeasurementNoiseEstimator, for a plain
Acceleration/AngularSpeed/MagneticFluxDensity value) and a 3-axis form
(*TriadNoiseEstimator), and both single-axis and triad forms are further specialized per sensor
(Acceleration, AngularSpeed, MagneticFluxDensity) — that specialization only binds generic types and
adds no new algorithm, which is why 4 conceptual families expand into most of the package’s 37 classes.
AccumulatedBodyKinematicsNoiseEstimator / WindowedBodyKinematicsNoiseEstimator run the accelerometer
and gyroscope triad versions together for a combined BodyKinematics stream.
The recursive (online) update, common to every Accumulated* estimator:
and the PSD / root-PSD relation used throughout (both families, all sensors):
where TimeIntervalEstimator in
Static/Dynamic Interval Detection and Measurement Generation). For a triad, the norm of the per-axis root-PSDs
( AccelerometerNoiseRootPsdSource / GyroscopeNoiseRootPsdSource (below) report.
AccumulatedAccelerationTriadNoiseEstimator noiseEstimator =
new AccumulatedAccelerationTriadNoiseEstimator();
// feed samples while the device is known to be static
for (double[] fxyz : staticSpecificForceSamples) {
noiseEstimator.addTriad(fxyz[0], fxyz[1], fxyz[2]);
}
double stdNorm = noiseEstimator.getStandardDeviationNorm(); // m/s^2
double rootPsdNorm = noiseEstimator.getAccelerometerBaseNoiseLevelRootPsd(); // m/s^1.5 (AccelerometerNoiseRootPsdSource)
Approximate bias estimators
Unlike the full calibrators in Accelerometer Calibration, Gyroscope Calibration,
and Magnetometer Calibration, the bias package’s two estimators assume the device is
static at a single known position/orientation and neglect cross-coupling entirely — they only
average measurements to get a quick bias (and noise PSD) estimate, good enough to seed a non-linear
calibrator’s initial guess, or to use directly when cross-coupling errors are known to be negligible:
| Class | Purpose |
|---|---|
|
Averages |
|
Averages magnetic flux density samples at a known static position/orientation/instant (using the WMM for the expected field) to estimate hard-iron bias plus noise PSD. |
Both classes' Javadoc explicitly point back to the noise estimators above for the case where only PSD
(not bias) is needed and no known frame is available.
double latitude = Math.toRadians(41.3851);
double longitude = Math.toRadians(2.1734);
double height = 0.0;
BodyKinematicsBiasEstimator biasEstimator =
new BodyKinematicsBiasEstimator(latitude, longitude, height);
// feed samples while the device is known to be static at this position
for (BodyKinematics sample : staticKinematicsSamples) {
biasEstimator.addBodyKinematics(sample);
}
Matrix accelerometerBias = biasEstimator.getAccelerometerBias(); // 3x1, m/s^2
Matrix gyroBias = biasEstimator.getGyroBias(); // 3x1, rad/s
Root-level interfaces: how components exchange calibration results
These small interfaces are how IMUErrorsCreator and Kalman-filter
configuration classes stay decoupled from which specific calibrator/estimator produced a value:
| Interface | Purpose |
|---|---|
|
Exposes a single |
|
Exposes the norm of the estimated bias’s standard deviation, used to seed a Kalman filter’s initial
uncertainty configuration ( |
|
Exposes the estimated bias vector plus |
Where to go next
-
Static/Dynamic Interval Detection and Measurement Generation — how these noise estimators feed static/dynamic interval detection.
-
Fixers: Undoing the Sensor Error Model —
IMUErrorsCreator, which assembles a fullIMUErrorsfrom these sources. -
reference.adoc#bibliography — bibliography.