Vulcan
Aerospace Engineering Utilities Built on Janus
Loading...
Searching...
No Matches
BiasInstability.hpp
Go to the documentation of this file.
1// Bias Instability Noise Model
2// Long-correlation-time Markov process for sensor bias drift
3#pragma once
4
5#include <cmath>
6#include <janus/janus.hpp>
8
10
11// =============================================================================
12// Bias Instability State
13// =============================================================================
14
24template <typename Scalar> struct State {
25 Scalar bias;
26};
27
34template <typename Scalar> State<Scalar> init_state() {
35 return State<Scalar>{.bias = Scalar(0)};
36}
37
45template <typename Scalar>
46State<Scalar> init_state(const Scalar &initial_bias) {
47 return State<Scalar>{.bias = initial_bias};
48}
49
50// =============================================================================
51// Discretized Coefficients
52// =============================================================================
53
60struct Coeffs {
61 double a;
62 double b;
63};
64
73inline Coeffs compute_coeffs(double sigma_b, double tau, double dt) {
74 double a = std::exp(-dt / tau);
75 double b = sigma_b * std::sqrt(1.0 - a * a);
76 return Coeffs{.a = a, .b = b};
77}
78
79// =============================================================================
80// Simulation Step
81// =============================================================================
82
95template <typename Scalar>
96Scalar step(State<Scalar> &state, const Coeffs &coeffs,
97 const Scalar &noise_input) {
98 state.bias = coeffs.a * state.bias + coeffs.b * noise_input;
99 return state.bias;
100}
101
115template <typename Scalar>
116Scalar step(State<Scalar> &state, double sigma_b, double tau, double dt,
117 const Scalar &noise_input) {
118 Coeffs coeffs = compute_coeffs(sigma_b, tau, dt);
119 return step(state, coeffs, noise_input);
120}
121
122// =============================================================================
123// Analysis Utilities
124// =============================================================================
125
134inline double steady_state_variance(double sigma_b) {
135 return sigma_b * sigma_b;
136}
137
148inline double time_to_fraction(double tau, double fraction) {
149 return -tau / 2.0 * std::log(1.0 - fraction);
150}
151
152} // namespace vulcan::bias_instability
Definition BiasInstability.hpp:9
State< Scalar > init_state()
Initialize state to zero bias.
Definition BiasInstability.hpp:34
Scalar step(State< Scalar > &state, const Coeffs &coeffs, const Scalar &noise_input)
Step the bias instability process.
Definition BiasInstability.hpp:96
double time_to_fraction(double tau, double fraction)
Time to reach fraction of steady-state variance.
Definition BiasInstability.hpp:148
Coeffs compute_coeffs(double sigma_b, double tau, double dt)
Compute bias instability coefficients.
Definition BiasInstability.hpp:73
double steady_state_variance(double sigma_b)
Steady-state variance of bias instability.
Definition BiasInstability.hpp:134
Discretized bias instability coefficients.
Definition BiasInstability.hpp:60
double b
Input gain: σ_b·√(1-a²).
Definition BiasInstability.hpp:62
double a
State transition coefficient: exp(-Δt/τ).
Definition BiasInstability.hpp:61
Bias instability state.
Definition BiasInstability.hpp:24
Scalar bias
Current bias value.
Definition BiasInstability.hpp:25