Class EwmaCovarianceProvider

Inheritance Relationships

Base Type

Class Documentation

class EwmaCovarianceProvider : public adi_imu::ImuCovarianceInterface

Exponentially Weighted Moving Average covariance estimator.

Computes variance using exponential smoothing: variance_t = alpha * (x_t - mean_t)^2 + (1-alpha) * variance_{t-1}

Adapts continuously with O(1) memory. Alpha controls responsiveness:

  • Higher alpha (0.1): Fast adaptation, more sensitivity

  • Lower alpha (0.01): Slow adaptation, smoother estimates

Public Functions

explicit EwmaCovarianceProvider(double alpha = DEFAULT_ALPHA, size_t warmup_samples = DEFAULT_WARMUP_SAMPLES, double min_variance = DEFAULT_MIN_VARIANCE, MotionDetector motion_detector = MotionDetector())

Construct EWMA covariance estimator.

Parameters:
  • alpha – Smoothing factor (0 < alpha < 1). Typical 0.01-0.1

  • warmup_samples – Samples before covariance is considered valid.

  • min_variance – Minimum variance floor.

  • motion_detector – Optional motion detector for stationary filtering.

virtual void addSample(const Vec3 &accel, const Vec3 &gyro) override

Process a new IMU sample for covariance estimation.

Parameters:
  • accel – Linear acceleration sample (m/s^2)

  • gyro – Angular velocity sample (rad/s)

virtual bool isReady() const override

Check if covariance estimation is ready (calibration complete).

Returns:

true if covariance values are valid and ready to use.

virtual CovarianceMatrix getAccelCovariance() const override

Get the linear acceleration covariance matrix.

Returns:

3x3 covariance matrix row-major order.

virtual CovarianceMatrix getGyroCovariance() const override

Get the angular velocity covariance matrix.

Returns:

3x3 covariance matrix row-major order.

virtual void reset() override

Reset the covariance extimator to initial state.

virtual double getCalibrationProgress() const override

Get the current calibration progress (0.0 to 1.0).

Returns:

Progress ratio, 1.0 when calibration is complete.

Public Static Attributes

static constexpr double DEFAULT_ALPHA = 0.02
static constexpr size_t DEFAULT_WARMUP_SAMPLES = 100
static constexpr double DEFAULT_MIN_VARIANCE = 1e-9