Class RtsSmoother
- All Implemented Interfaces:
KalmanObserver
The Kalman and Unscented sequential estimators produce a state (mean and covariance) after processing each measurement. This state is a statistical summary of all the information provided to the filter, from the measurements and model of the spacecraft motion, up until the latest measurement. A smoother produces estimates that are summaries of information over all measurements, both past and future.
For example, if a filter processes measurements from time 1 to 10, then the filter state at time 5 uses measurement information up to time 5, while the smoother state at time 5 uses measurement information from the entire interval, times 1 to 10. This typically results in more accurate estimates, with more information reducing the uncertainty.
This smoother is implemented using the KalmanObserver mechanism. The
smoother collects data from the forward estimation over the measurements, then applies a backward pass to
calculate the smoothed estimates. Smoothed estimates are collected into a list of
PhysicalEstimatedState, containing a timestamp, mean and covariance over all estimated parameters
(orbital, propagation and measurement). The order of the parameters in these states is the same as the
underlying sequential estimator, for example from a call to AbstractKalmanEstimator.getPhysicalEstimatedState().
The smoother is compatible with the Kalman and Unscented sequential estimators, but does not support the semi-analytical equivalents.
The following code snippet demonstrates how to attach the smoother to a filter and retrieve smoothed states:
// Build the Kalman filter
final KalmanEstimator kalmanEstimator = new KalmanEstimatorBuilder().
addPropagationConfiguration(propagatorBuilder, new ConstantProcessNoise(initialP, Q)).
build();
// Add smoother observer to filter
final RtsSmoother rtsSmoother = new RtsSmoother(kalmanEstimator);
kalmanEstimator.setObserver(rtsSmoother);
// Perform forward filtering over the measurements
Propagator[] estimated = kalmanEstimator.processMeasurements(measurements);
// Perform backwards smoothing and collect the results
rtsSmoother.backwardsSmooth();
Note that the smoother stores data from every filter step, leading to high memory usage for long-duration runs with numerous measurements.
- Since:
- 13.0
- Author:
- Mark Rutten
- See Also:
-
Constructor Summary
ConstructorsConstructorDescriptionRtsSmoother(AbstractKalmanEstimator estimator) Smoother observer constructor from a sequential estimator. -
Method Summary
Modifier and TypeMethodDescriptionPerform a RTS backwards smoothing recursion over the filtered states collected by the observer.voidevaluationPerformed(KalmanEstimation estimation) Notification callback after each one of a Kalman filter estimation.voidinit(KalmanEstimation estimation) Initialise the observer on the initial state of the filter, before processing the first measurement.
-
Constructor Details
-
RtsSmoother
Smoother observer constructor from a sequential estimator. This smoother constructor requires access to the underlying estimator to initialise some information not available fromKalmanEstimationduringinit(org.orekit.estimation.sequential.KalmanEstimation), including the estimated parameters drivers (orbital, propagation and measurements).- Parameters:
estimator- the Kalman estimator
-
-
Method Details
-
init
Initialise the observer on the initial state of the filter, before processing the first measurement.- Specified by:
initin interfaceKalmanObserver- Parameters:
estimation- estimation performed by Kalman estimator
-
evaluationPerformed
Notification callback after each one of a Kalman filter estimation. This accumulates the filter states as the sequential estimator processes measurements.- Specified by:
evaluationPerformedin interfaceKalmanObserver- Parameters:
estimation- estimation performed by Kalman estimator
-
backwardsSmooth
Perform a RTS backwards smoothing recursion over the filtered states collected by the observer.- Returns:
- a list of
PhysicalEstimatedState
-