EmrysFilter 0.1.0
State estimation utilities in C++23 using Eigen
Loading...
Searching...
No Matches
Emrys::OrnsteinUhlenbeck< Path, Scalar_ > Class Template Reference

A zero-mean Ornstein-Uhlenbeck (first-order Gauss-Markov) process on each coordinate of the block named by Path, such as a slowly varying sensor bias. More...

#include <EmrysFilter/Models/ProcessModel.h>

Inheritance diagram for Emrys::OrnsteinUhlenbeck< Path, Scalar_ >:
Emrys::ProcessFunction< internal::OrnsteinUhlenbeckStep< double >, internal::ReadsOne< Path >, internal::WritesOf< Path >, AffineIn< internal::PathTag< Path > >, internal::DiscreteNoise< internal::OrnsteinUhlenbeckNoise< double > > >

Public Types

using Scalar = Scalar_
 the scalar type of the parameters

Public Member Functions

 OrnsteinUhlenbeck (TimeConstant< Scalar_ > timeConstant, StationaryVariance< Scalar_ > variance)
 Time constant timeConstant and stationary variance variance.
Scalar_ timeConstant () const
Scalar_ variance () const

Detailed Description

template<typename Path, RealScalar Scalar_ = double>
class Emrys::OrnsteinUhlenbeck< Path, Scalar_ >

A zero-mean Ornstein-Uhlenbeck (first-order Gauss-Markov) process on each coordinate of the block named by Path, such as a slowly varying sensor bias.

With time constant \( \tau \) and stationary variance \( \sigma^2 \), a step \( \Delta t \) gives \( x' = \phi x \) with \( \phi = e^{-\Delta t / \tau} \) and noise \( \sigma^2 (1 - \phi^2) \) on each coordinate, the exact discretization of the Ornstein-Uhlenbeck process, the first-order Gauss-Markov process of Gelb (1974), that models slowly varying sensor errors. The model is affine in its block and returns its Jacobian.

Scalar_ is the type of \( \tau \) and \( \sigma^2 \). The step computes in the scalar of the step it is given, as Kinematic's does. The two are given by name, OrnsteinUhlenbeck<Bias>{TimeConstant{60.0}, StationaryVariance{0.25}}, since as two numbers of one type they would swap silently. Each coordinate of the block takes the same \( \tau \) and \( \sigma^2 \); coordinates that differ are blocks of their own (decisions.md [continuous-time-noise]).

Member Function Documentation

◆ timeConstant()

template<typename Path, RealScalar Scalar_ = double>
Scalar_ Emrys::OrnsteinUhlenbeck< Path, Scalar_ >::timeConstant ( ) const
inlinenodiscard
Returns
the time constant \( \tau \)

◆ variance()

template<typename Path, RealScalar Scalar_ = double>
Scalar_ Emrys::OrnsteinUhlenbeck< Path, Scalar_ >::variance ( ) const
inlinenodiscard
Returns
the stationary variance \( \sigma^2 \)

The documentation for this class was generated from the following file: