I would like to implement a Kalman filter for a list of measurements. However, in order to build my Kalman filter, I need a NumericalPropagatorBuilder. I have constructed it using gravitational potential perturbations of the Earth and a drag force with a coefficient of 2.2 (as seen in the literature). I would like to predict the value of a cross-section, as it can have a significant impact on my orbit.
I’m wondering how to define my CovarianceMatrixProvider. If I assume I have a ConstantProcessNoise, I need to provide an initial estimate of my covariance matrix and a matrix representing the process noise. I don’t quite understand how to incorporate my various parameters into my covariance.
The documentation states:
The process noise matrix is a covariance matrix corresponding to the parameters managed by the Kalman estimator The number of rows/columns and their order are as follows:
The first 6 components correspond to the 6 orbital parameters of the associated propagator. All 6 parameters must always be present, regardless of the fact they are estimated or not.
The following components correspond to the subset of propagation parameters of the associated propagator that are estimated.
The remaining components correspond to the subset of measurements parameters that are estimated, considering all measurements, even the ones that correspond to spacecrafts not related to the associated propagator
If I want my first 6 rows to correspond to the covariance of my equinoctial parameters, and the last one to my cross-section in the drag force, I don’t see how to specify which parameter each row of my covariance matrix corresponds to.
Furthermore, while I can see how to predict the initial covariance for my equinoctial parameters (as in this this tuto) and my cross-section (I know the characteristic sizes of space debris), I have no idea how to initialize my process noise matrix. It seems to be a recurring issue. Do you have any insights to help me define this matrix so that it doesn’t affect my results too much, I’ve seen in this topic that i could set it to 0 but I’m not sure about the meaning of that.
That’s indeed a good question and Orekit documentation doesn’t help a lot…
A recommendation is to sort the parameters lexicographically. So, the values in the covariance matrix
That’s a good point. I recommend you to start with a ConstantProcessNoise. The constructor of ConstantProcessNoise asks for two matrices:
The initial covariance matrix representing the initial error you expect between your first guess and the true orbit. The diagonal elements shall be equal to the square of this initial error. Be careful that Orekit uses S.I units. As an example, I’m estimating the position and velocity vectors of a satellite. I initialize my first guess (at the first measurement epoch) with a TLE. Therefore, I expect theinitial error compare to the true orbit will be 100 meters in position and 1 meter per second for the velocity. The diagonal elements of my initial covariance will be [10000; 10000; 10000, 1; 1; 1].
The process noise matrix. This is where sorcery starts. This matrix represent the error of your model (i.e., measurement or propagation models depending the element of the matrix). Honestly, they are not perfect values for this covariance and it is very difficult to fill because it depends on the accuracy of the model you used. For instance, you will not set the same values inside the matrix if your are using a keplerian propagation model or a complex propagation model using 120x120 potential terms, drag, etc. I recommend you to start with small values (i.e., 10-9) and to increase it progressively until you are happy with your estimation.