Eckstein-Hechler initialization and accuracy

Hi everybody,

I would like to us the Eckstein-Hechler propagator for orbit prediction in the timeframe of a few hours up to a day.
Unforatunately I have some difficulities to get the orbit initialization running.

My test-data is from the Sentinal 3A GPS receiver in ECEF frame for one day. I first compared it to a numerical high precision orbit propagator and got a good match for 24 hours.

Then I first initialized the EH propagator using only one datapoint (after conversion to J2000 frame) at the beginning of my time interval like this:

TimeScale utc = TimeScalesFactory.getUTC();
Frame gcrf = FramesFactory.getEME2000();

AbsoluteDate initialDate = new AbsoluteDate(2024, 01, 11, 21, 59, 42.000, utc);
PVCoordinates initialCoordinates = new PVCoordinates(new Vector3D(-1000585.869,652455.908,-7088912.042), new Vector3D(1279.54,7308.556,491.82));
AbsolutePVCoordinates initialAbsolutePV = new AbsolutePVCoordinates(gcrf, initialDate, initialCoordinates);

Orbit initialOrbit = new CartesianOrbit(initialAbsolutePV, gcrf, initialDate, mu);

EcksteinHechlerPropagator eckstein = new EcksteinHechlerPropagator(initialOrbit, referenceRadius, mu, c20, c30, c40, c50 ,c60);

// Propagate
AbsoluteDate startDate = new AbsoluteDate(2024, 01, 11, 21, 59, 42.000, utc);
double duration = 93600.;
AbsoluteDate finalDate = startDate.shiftedBy(duration);
double stepT = 10.;

SpacecraftState currentState = eckstein.propagate(initialDate);

for (AbsoluteDate extrapDate = initialDate; extrapDate.compareTo(finalDate) <= 0; extrapDate = extrapDate.shiftedBy(stepT)) {
	currentState = eckstein.propagate(extrapDate);
	System.out.println(currentState.getPVCoordinates());
}

After that I initialized the mean parameters of the EH propagator for approx. three orbits with the GPS measurement (30s timesteps and posiotionScale = 1; expected good acuracy of the GPS measurements) like this:

// initial orbit
AbsoluteDate initialDate = new AbsoluteDate(2024, 01, 11, 21, 59, 42.000, utc);
PVCoordinates initialCoordinates = new PVCoordinates(new Vector3D(-1000585.869,652455.908,-7088912.042), new Vector3D(1279.54,7308.556,491.82));
AbsolutePVCoordinates initialAbsolutePV = new AbsolutePVCoordinates(gcrf, initialDate, initialCoordinates);

Orbit initialOrbit = new CartesianOrbit(initialAbsolutePV, gcrf, initialDate, mu);
readOrbitData readOrbitData = new readOrbitData();
List<SpacecraftState> states = readOrbitData.getStates();
// EH Propagator Builder
PropagatorBuilder builder = new EcksteinHechlerPropagatorBuilder(initialOrbit, referenceRadius, mu, TideSystem.TIDE_FREE, c20, c30, c40, c50 ,c60, OrbitType.CARTESIAN, PositionAngleType.TRUE, 1.);
// Propagator fitter
final PropagatorConverter fitter = new FiniteDifferencePropagatorConverter(builder, 1.e-6, 5000);

// Resulting Propagator
final EcksteinHechlerPropagator eckstein = (EcksteinHechlerPropagator)fitter.convert(states, true);

The propagation was done the same way as before.

The position error of the EH propagator with and without initialization vs the GPS measurements looks like this:

The propagated position of the satellite is better for the first three orbits (approx. 20.000s) wich corrensponds with three orbits I used for the initialization. After that the accuracy is worse compared to the propagation with only one state for initialization. I would have expected a much better performance after the (hopefully correct) initialization of the model. Also I expected more like one kilometer per day error using the EH model.

Can somebdy help me? Is there maybe an error in my initialization of the model? Or is the output plausible?

Thank you very much in advance!

Best

Simon

Hello @SimonKrebietke,

I’m upping your thread.

A few remarks from what you provide :

I think you meant eme2000 and not gcrf :slight_smile: !

You should try to use a OrekitFixedStepHandler instead to do so.

You can lower the position scale to 1e-3 or less.

I’m afraid these remarks will not solve your issue but will at least help a bit :sweat:.

Cheers,
Vincent

Hi @SimonKrebietke

Sorry for the late answer but I would like to add some comments on your simulation.
I’m not surprised by the performance of EH model for the first 20k seconds. FiniteDifferencePropagatorConverter performs a least squares fitting of the input data based on the propagation model you want to generate. In other words, your EH model is optimized on the first 20k seconds on the input data.
Your initialization looks good and that’s an interesting method.

I’m not surprised by the obtained accuracy for the next data. EH model only consider zonal harmonics from J2 to J6 in its perturbation model. Probably, your GPS data consider a more complex dynamical model (i.e. higher zonal harmonics, tesseral harmonics, lunisolar attraction, SRP, and maybe some drag). Therefore, there is a big difference on the orbit modelling between the input data and the propagation model.

In the past I compared the accuracy of SGP4 propagation model with GPS data. The difference was on the same order of magnitude as the one you obtain for EH model.

Best regards,
Bryan