Covariance time series in an orbit determination analysis

Hello Orekit community,

I am working on an orbit determination project and I wanted to ask for some assistance on how to compute the covariance matrix as a time series, i.e. I want to be able to see the covariance at every single time step of my OD fit span. For the moment, I am able to successfully fit observation data with very low residuals while using an initial TLE (for the TLE epoch, i used the middle of the fit span) for IOD.

Is there such a function in orekit which computes the covariance time series for the entire duration of the fit span.

If you could give me some logical guidance or an implementable solution, I’d be very much appreciate.

Thanks in advance.

Alex

Hi @alexf

What you can do is a covariance propagation. Giving an initial covariance matrix, you can propagate it thanks to the state transition matrix between the state at a given epoch and the covariance matrix state.
The equation is J_propagated = Phi * J_0 * Phi^T (with J the covariance and Phi the state transition matrix).

A tutorial is available : src/main/java/org/orekit/tutorials/propagation/CovariancePropagation.java · master · Orekit / Orekit tutorials · GitLab

This toturial is simple because it provides the covariance just for the propagated spacecraft stare. To have the covariance for different epochs, you could include the computation in a step handler added to a propagator. To help you with the implementation of the step handler, you could look at the following topic: Covariance matrix before last measurements - #2 by bcazabonne

Please not that the step handler in the topic above corresponds to an old orekit version. You will have to update it following the objects used in the toturial.

Finally, as explained in the following topic, we will add a new function in Orekit 11.3 to easily perform covariance propagation: Covariance prop in DSST, "hansen" is null - #2 by bcazabonne

Best regards,
Bryan

1 Like

Hi Bryan,

Thank you so much for the initial guidance! I’ll take a look at the examples you pointed out.

Since my IOD epoch lies in the middle of the fit span, does it mean I need to “backward” propagate AND “forward” propagate to get my complete picture?

Cheers.

Alex

Hi,

Once the step handler added to the propagator, you can just call propagator.propagate(startEpoch, endEpoch);

Bryan

1 Like

Hi there,

I take this opportunity to outline something important in my opinion. The new built-in covariance propagation Bryan is talking about is the linear model, based on state transition matrices as popularized for example by Vallado.
However it is to be noted (and I hope this will be reflected in the documentation of Orekit 11.3) that there are other ways to propagate covariance matrices, potentially more complicated but also more accurate. It ranges from Monte Carlo to high order forms (a generalization of the linearized version), for the latter see the work of R. Armellin, P. Di Lizia, etc. with the Taylor Differential Algebra and nonlinear uncertainty propagation. Not to mention that they are also other ways to model uncertainties, especially of the epistemic kind.

Anyway over the span of a single OD, the linear model is probably not bad, but it also depends on the coordinates used.

Romain.

1 Like

Thank you for input @Serrof and @bcazabonne, much appreciate it!

Something also interesting for covariance propagation could be to use an unscented model with sigma points, like it is done to predict the covariance matrix in an unscented Kalman Filter.
It could be really better than the linear model to handle non linearities.

In addition, Hipparchus already has the methods to build sigma points.

Bryan

I see, thank you @bcazabonne and @Serrof.

I also wanted to know if it’s “better” to conduct the IOD:
A) at the fit span epoch (the earliest observation time/date), or
B) at the end of the fits span (the latest observation time/date), or
C) at the mid-point of the OD period?

@alexf I would say use the data in which you have the highest confidence. You can still perform a simplified propagation e.g. Keplerian to change the epoch for your OD process.

Coming back to the subject of covariances, here is a detailed report on it. Almost solely written by US-based authors (so maybe not super diversified in point of view) but still worth a read.

Best,
Romain.

1 Like