Simulated states with measurement generator

Hi All,

I am generating measurements with Orekit for an LEO satellite over multiple capture windows. The propagator can be accessed at the end of the measurement generation but it only gives the PV coordinates of the last timestamp. I need to access the PV coordinates at every measurement timestamp to compare with the estimation with KF.
I would like to know what is the way to do this ?
I tried to propagate and get the PV states from the propagator. But the the propagated states seem to be different.

Hi @niluj,

I’m not sure to fully understand. What type of measurements are you using?

In the measurements, the light time delay is taken into account so the PV at the measurement date are different from the actual PV used for the measurement.

In the KalmanObserver, at each step of the Kalman you have access to a KalmanEstimation object that has two interesting methods:

  • getPredictedMeasurement(): get the measurement before the correction step of the Kalman
  • getCorrectedMeasurement(): after the correction step
    Each one will return an EstimatedMeasurement. This last has a getStates() method that will return you the S/C state used to compute the theoretical measurement.
    Normally, getCorrectedMeasurement().getStates()[0] should return the same PV as the one estimated by the Kalman at this step.

Is that what you’re looking for?


Thank you for the reply.
Apologies for not making the equation clear. The issue is not related to light time delay. The measurement classes have considered the light time delay when generating measurements.

I am generating measurements using Orekit measurement generator for LEO satellite and using that simulated measurement to do OD.
Since the OD is performed with simulated measurements, I wanted to do a comparison of the state error. ( real simulated state vs estimated state).
I am getting a sort of offset in-state error that is independent of the measurement error.
I have initialized a propagator builder and passed that to a generator.

// In the measurement generation.. 
final NumericalPropagator propagatorForGen = propBuilder.buildPropagator(propBuilder.getSelectedNormalizedParameters());
final ObservableSatellite satellite = generator.addPropagator(propagatorForGen);

// Copy of the propagator to simulate the states
final NumericalPropagatorBuilder propagatorBuilderCopy = propBuilder.copy();
final NumericalPropagator propagatorCopy = propagatorBuilderCopy.buildPropagator(propagatorBuilderCopy.getSelectedNormalizedParameters());	

I am generating TDOA measurements using two locations and using Elevation Detector.
After measurement generation, I am taking the observation times and propagating the propagatorCopy to the measurement times to get the real simulated state.

I am not sure whether the propagation in the measurement generation and the propagation with the propagatorCopy outside measurement generation produces the same PVCoordinates sequence. I have another post with a related issue. Propagting with Numerical Propagator - #3 by luc

Therefore estimated state with the measurements and simulated states may not be comparable to finding the state error. !!
This is why I was asking whether there is a way to access the propagated states in the generator.

Hi @niluj,

Sorry for the delay.
Do you still have the same problem or @luc’s answer in your other post helped you?

Yes but still, sorry to insist, this will be a state without light-time delay.
When the EstimatedMeasurement is constructed it first uses the state at measurement’s date (your simulated state if I understand well), then shift it backward in time to take into account light time delay. See emitterState here for the TDOA case.
So the state in the estimated measurement is shifted with respect to the state at measurement’s date.
Do I still not understand what you are trying to achieve?


Hi @MaximeJ ,

Thank you for the response. I was actually able to solve the problem with @luc’s answer, that is by reducing the tolerance. The propagator gives PV coordinates accurate to mm level when the position error of the integrator is changed. Therefore I assumed that I can rely on the simulated states.

In od, the state is estimated at the observed Time and not the transmitted time. I needed to compare the simulated states and estimated states at the observed Time. Based on the measurement classes in Orekit, the measurement models handle the light time delay. The error was not creeping in due to light time delay, but due to the integrator of the propagator. This affected the accuracy of the simulated PV coordinates when propagating back and forth.

But it would be nice to get the simulated PV coordinates at measurement times ( observed time, not transmitted time) in the Orekit generator. As far as I understand, the Orekit generator class does not give access the states of the satellite at each simulated measurement time)