6#include <janus/janus.hpp>
25template <
typename Scalar>
struct State {
48template <
typename Scalar>
85 double phi = std::exp(-dt / tau);
86 double q = sigma * std::sqrt(1.0 - phi * phi);
87 return Coeffs{.phi = phi, .q = q};
106 return 2.0 * sigma * sigma / tau;
119 return std::sqrt(2.0 / tau) * sigma;
138template <
typename Scalar>
140 const Scalar &noise_input) {
141 state.x = coeffs.
phi * state.x + coeffs.
q * noise_input;
158template <
typename Scalar>
160 const Scalar &noise_input) {
162 return step(state, coeffs, noise_input);
181 return sigma * sigma * std::exp(-std::abs(tau_lag) / tau);
198 double omega_tau = 2.0 * M_PI * f * tau;
199 return sigma * sigma * 2.0 * tau / (1.0 + omega_tau * omega_tau);
Definition MarkovProcess.hpp:8
double autocorrelation(double tau, double sigma, double tau_lag)
Compute autocorrelation at lag τ_lag.
Definition MarkovProcess.hpp:180
double psd_at_frequency(double tau, double sigma, double f)
Compute power spectral density at frequency f.
Definition MarkovProcess.hpp:197
Coeffs discretize(double tau, double sigma, double dt)
Discretize first-order Markov process.
Definition MarkovProcess.hpp:84
Scalar step(State< Scalar > &state, const Coeffs &coeffs, const Scalar &noise_input)
Step the first-order Markov process.
Definition MarkovProcess.hpp:139
double process_noise_psd(double tau, double sigma)
Compute continuous-time process noise PSD.
Definition MarkovProcess.hpp:105
State< Scalar > init_state()
Initialize state to zero.
Definition MarkovProcess.hpp:35
double process_noise_intensity(double tau, double sigma)
Compute continuous-time process noise intensity.
Definition MarkovProcess.hpp:118
Discretized first-order Markov process coefficients.
Definition MarkovProcess.hpp:68
double q
Process noise gain: σ·√(1-φ²).
Definition MarkovProcess.hpp:70
double phi
State transition: exp(-Δt/τ).
Definition MarkovProcess.hpp:69
First-order Gauss-Markov process state.
Definition MarkovProcess.hpp:25
Scalar x
Process state.
Definition MarkovProcess.hpp:26