1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.estimation.measurements.modifiers;
18
19 import org.hipparchus.geometry.euclidean.threed.Vector3D;
20 import org.hipparchus.util.FastMath;
21 import org.junit.jupiter.api.Assertions;
22 import org.junit.jupiter.api.BeforeEach;
23 import org.junit.jupiter.api.Test;
24 import org.orekit.Utils;
25 import org.orekit.bodies.GeodeticPoint;
26 import org.orekit.bodies.OneAxisEllipsoid;
27 import org.orekit.estimation.measurements.EstimatedMeasurement;
28 import org.orekit.estimation.measurements.GroundStation;
29 import org.orekit.estimation.measurements.ObservableSatellite;
30 import org.orekit.estimation.measurements.gnss.AmbiguityCache;
31 import org.orekit.estimation.measurements.gnss.Phase;
32 import org.orekit.frames.FramesFactory;
33 import org.orekit.frames.TopocentricFrame;
34 import org.orekit.gnss.PredefinedGnssSignal;
35 import org.orekit.orbits.CartesianOrbit;
36 import org.orekit.propagation.SpacecraftState;
37 import org.orekit.propagation.analytical.tle.TLE;
38 import org.orekit.propagation.analytical.tle.TLEPropagator;
39 import org.orekit.utils.Constants;
40 import org.orekit.utils.IERSConventions;
41 import org.orekit.utils.ParameterDriver;
42 import org.orekit.utils.TimeStampedPVCoordinates;
43
44 import java.util.Arrays;
45
46 public class RelativisticClockPhaseModifierTest {
47
48 @Deprecated
49 @Test
50 public void testRelativisticClockCorrectionDeprecated() {
51
52
53 final OneAxisEllipsoid earth = new OneAxisEllipsoid(Constants.WGS84_EARTH_EQUATORIAL_RADIUS,
54 Constants.WGS84_EARTH_FLATTENING,
55 FramesFactory.getITRF(IERSConventions.IERS_2010, true));
56 final GeodeticPoint point = new GeodeticPoint(FastMath.toRadians(42.0), FastMath.toRadians(1.0), 100.0);
57 final TopocentricFrame topo = new TopocentricFrame(earth, point, "");
58 final GroundStation station = new GroundStation(topo);
59
60
61 final TLE tle = new TLE("1 28474U 04045A 20252.59334296 -.00000043 00000-0 00000-0 0 9998",
62 "2 28474 55.0265 49.5108 0200271 267.9106 149.0797 2.00552216116165");
63 final TimeStampedPVCoordinates satPV = TLEPropagator.selectExtrapolator(tle).getPVCoordinates(tle.getDate(), FramesFactory.getEME2000());
64 final SpacecraftState state = new SpacecraftState(new CartesianOrbit(satPV, FramesFactory.getEME2000(), Constants.WGS84_EARTH_MU));
65
66
67 for (ParameterDriver driver : Arrays.asList(station.getClockOffsetDriver(),
68 station.getEastOffsetDriver(),
69 station.getNorthOffsetDriver(),
70 station.getZenithOffsetDriver(),
71 station.getPrimeMeridianOffsetDriver(),
72 station.getPrimeMeridianDriftDriver(),
73 station.getPolarOffsetXDriver(),
74 station.getPolarDriftXDriver(),
75 station.getPolarOffsetYDriver(),
76 station.getPolarDriftYDriver())) {
77 if (driver.getReferenceDate() == null) {
78 driver.setReferenceDate(state.getDate());
79 }
80 }
81
82
83 final Vector3D zero = Vector3D.ZERO;
84 final TimeStampedPVCoordinates stationPV = station.getOffsetToInertial(state.getFrame(), state.getDate(), false).transformPVCoordinates(new TimeStampedPVCoordinates(state.getDate(), zero, zero, zero));
85
86
87 final Phase phase = new Phase(station, state.getDate(), 26584264.45, PredefinedGnssSignal.G01.getWavelength(),
88 1.0, 1.0, new ObservableSatellite(0),
89 new AmbiguityCache());
90 final EstimatedMeasurement<Phase> estimated = new EstimatedMeasurement<>(phase, 0, 0,
91 new SpacecraftState[] {state},
92 new TimeStampedPVCoordinates[] {state.getPVCoordinates(), stationPV});
93 estimated.setEstimatedValue(phase.getObservedValue()[0]);
94 Assertions.assertEquals(0.0, estimated.getObservedValue()[0] - estimated.getEstimatedValue()[0], 1.0e-3);
95
96
97 final RelativisticClockPhaseModifier modifier = new RelativisticClockPhaseModifier();
98 modifier.modify(estimated);
99 Assertions.assertEquals(0, modifier.getParametersDrivers().size());
100
101
102 Assertions.assertEquals(-6.87 / PredefinedGnssSignal.G01.getWavelength(), estimated.getObservedValue()[0] - estimated.getEstimatedValue()[0], 1.0e-2);
103 Assertions.assertEquals(1,
104 estimated.getAppliedEffects().entrySet().stream().
105 filter(e -> e.getKey().getEffectName().equals("clock relativity")).count());
106
107 }
108
109 @Test
110 public void testRelativisticClockCorrection() {
111
112
113 final OneAxisEllipsoid earth = new OneAxisEllipsoid(Constants.WGS84_EARTH_EQUATORIAL_RADIUS,
114 Constants.WGS84_EARTH_FLATTENING,
115 FramesFactory.getITRF(IERSConventions.IERS_2010, true));
116 final GeodeticPoint point = new GeodeticPoint(FastMath.toRadians(42.0), FastMath.toRadians(1.0), 100.0);
117 final TopocentricFrame topo = new TopocentricFrame(earth, point, "");
118 final GroundStation station = new GroundStation(topo);
119
120
121 final TLE tle = new TLE("1 28474U 04045A 20252.59334296 -.00000043 00000-0 00000-0 0 9998",
122 "2 28474 55.0265 49.5108 0200271 267.9106 149.0797 2.00552216116165");
123 final TimeStampedPVCoordinates satPV = TLEPropagator.selectExtrapolator(tle).getPVCoordinates(tle.getDate(), FramesFactory.getEME2000());
124 final SpacecraftState state = new SpacecraftState(new CartesianOrbit(satPV, FramesFactory.getEME2000(), Constants.WGS84_EARTH_MU));
125
126
127 for (ParameterDriver driver : Arrays.asList(station.getClockOffsetDriver(),
128 station.getEastOffsetDriver(),
129 station.getNorthOffsetDriver(),
130 station.getZenithOffsetDriver(),
131 station.getPrimeMeridianOffsetDriver(),
132 station.getPrimeMeridianDriftDriver(),
133 station.getPolarOffsetXDriver(),
134 station.getPolarDriftXDriver(),
135 station.getPolarOffsetYDriver(),
136 station.getPolarDriftYDriver())) {
137 if (driver.getReferenceDate() == null) {
138 driver.setReferenceDate(state.getDate());
139 }
140 }
141
142
143 final Vector3D zero = Vector3D.ZERO;
144 final TimeStampedPVCoordinates stationPV = station.getOffsetToInertial(state.getFrame(), state.getDate(), false).transformPVCoordinates(new TimeStampedPVCoordinates(state.getDate(), zero, zero, zero));
145
146
147 final Phase phase = new Phase(station, state.getDate(), 26584264.45, PredefinedGnssSignal.G01.getWavelength(),
148 1.0, 1.0, new ObservableSatellite(0),
149 new AmbiguityCache());
150 final EstimatedMeasurement<Phase> estimated = new EstimatedMeasurement<>(phase, 0, 0,
151 new SpacecraftState[] {state},
152 new TimeStampedPVCoordinates[] {state.getPVCoordinates(), stationPV});
153 estimated.setEstimatedValue(phase.getObservedValue()[0]);
154 Assertions.assertEquals(0.0, estimated.getObservedValue()[0] - estimated.getEstimatedValue()[0], 1.0e-3);
155
156
157 final RelativisticClockPhaseModifier modifier = new RelativisticClockPhaseModifier();
158 modifier.modify(estimated);
159 Assertions.assertEquals(0, modifier.getParametersDrivers().size());
160
161
162 Assertions.assertEquals(-6.87 / PredefinedGnssSignal.G01.getWavelength(), estimated.getObservedValue()[0] - estimated.getEstimatedValue()[0], 1.0e-2);
163
164 }
165
166 @BeforeEach
167 public void setUp() {
168 Utils.setDataRoot("regular-data");
169 }
170
171 }