FirstOrderGaussMarkov#
- class FirstOrderGaussMarkov(state_array: StateArray, spacecraft: Spacecraft, base_frame: Frame, default_beta: ndarray | None = None)#
Bases:
DynamicModelModels a first-order exponentially correlated Gauss-Markov acceleration process.
An empirical acceleration state \(\mathbf{a}_{gm}\) is added to the equations of motion and evolves according to exponential decay:
\[\dot{\mathbf{a}}_{gm} = -\mathbf{B}\,\mathbf{a}_{gm}\]where \(\mathbf{B} = \mathrm{diag}(\beta_x, \beta_y, \beta_z)\) with \(\beta_i = 1/\tau_i\) being the inverse correlation times. The spacecraft translational dynamics become \(\ddot{\mathbf{r}} = \mathbf{a}_{\mathrm{other}} + \mathbf{a}_{gm}\). The \(\beta_i\) can be estimated as static parameters via
("beta_fogm", spice_id)state entries.In deterministic propagation only the drift term is used:
\[\dot{\mathbf a}_{gm} = -\mathbf B \, \mathbf a_{gm}\]The continuous-time process noise intensity consistent with the stationary first-order Gauss-Markov model is:
\[q_i = 2 \, \beta_i \, \sigma_i^2\]where \(\sigma_i^2\) is the stationary variance of the corresponding acceleration component.
- Parameters:
state_array (
StateArray) – State definition containing thea_fogmGauss-Markov acceleration state and, optionally, thebeta_fogminverse correlation coefficients.spacecraft (
Spacecraft) – Spacecraft object associated with the propagated body.base_frame (
Frame) – Reference frame of the propagator.default_beta (
np.ndarray, optional) – Default inverse correlation coefficients \([\beta_x, \beta_y, \beta_z]\) in 1/TU. Used whenbeta_fogmis not found in the state array. Defaults to isotropic unit decay[1, 1, 1].
Notes
The state vector must contain entries of the form:
('a_fogm', 3, 'estimated', 'dynamic', owner, value)
Optionally, if the inverse correlation times are themselves estimated:
('beta_fogm', 3, 'estimated', 'static', owner, value)
The model is linear in \(\mathbf a_{gm}\) for fixed \(\mathbf B\). If process noise is needed in a filter, this class provides the deterministic drift and Jacobians; the user should inject the corresponding process noise covariance separately.
See also
scarabaeus.StateArrayState vector used to initialize the model.
scarabaeus.PropagatorPropagator that integrates the augmented state.
scarabaeus.DynamicModelAbstract base class for all force model components.
scarabaeus.PiecewiseFirstOrderGaussMarkovBatch-segmented variant of this model.
References
Maybeck, P. S. (1979). Stochastic Models, Estimation, and Control. Brown, R. G., & Hwang, P. Y. C. (2012). Introduction to Random Signals and Applied Kalman Filtering.
Examples
import scarabaeus as scb state = [ ("position", 3, "estimated", "dynamic", sc, [7000, 0, 0]), ("velocity", 3, "estimated", "dynamic", sc, [0, 7.5, 0]), ("a_fogm", 3, "estimated", "dynamic", sc, [1e-9, 0.0, 0.0]), ("beta_fogm", 3, "estimated", "static", sc, [1/3600, 1/3600, 1/3600]), ] state_vector = scb.StateArray( epoch=epochs[0], frame="J2000", origin=scb.CelestialBody("Earth"), state=state, ) gm_model = FirstOrderGaussMarkov( state_array=state_vector, spacecraft=sc, base_frame="J2000", )
- Attributes:
default_betaDefault inverse correlation coefficients used when not specified in state.
originCelestial body serving as origin of the state vector.
origin_nameName of the origin body.
ref_frameReference frame used by the model.
Methods
compute_acceleration(position, ...)Returns the current Gauss-Markov acceleration applied to the body.
- compute_acceleration(position: ndarray, current_state: dict, epoch: float, body: Body) ndarray#
Returns the current Gauss-Markov acceleration applied to the body.
- Parameters:
position (
np.ndarray) – Spacecraft position vector, unused in this model but kept for API consistency.current_state (
dict) – Dictionary containing the propagated state.epoch (
float) – Current epoch, unused in this model but kept for API consistency.body (
Body) – Body for which the acceleration is evaluated.
- Returns:
Current acceleration vector \(\mathbf a_{gm}\) in km/s^2.
- Return type:
np.ndarray