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