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 java.util.List;
20
21 import org.hipparchus.stat.descriptive.DescriptiveStatistics;
22 import org.junit.Assert;
23 import org.junit.Test;
24 import org.orekit.estimation.Context;
25 import org.orekit.estimation.EstimationTestUtils;
26 import org.orekit.estimation.measurements.EstimatedMeasurement;
27 import org.orekit.estimation.measurements.EstimationModifier;
28 import org.orekit.estimation.measurements.GroundStation;
29 import org.orekit.estimation.measurements.ObservedMeasurement;
30 import org.orekit.estimation.measurements.gnss.Phase;
31 import org.orekit.estimation.measurements.gnss.PhaseMeasurementCreator;
32 import org.orekit.gnss.Frequency;
33 import org.orekit.orbits.OrbitType;
34 import org.orekit.orbits.PositionAngle;
35 import org.orekit.propagation.Propagator;
36 import org.orekit.propagation.SpacecraftState;
37 import org.orekit.propagation.conversion.NumericalPropagatorBuilder;
38 import org.orekit.time.AbsoluteDate;
39
40 public class ShapiroPhaseModifierTest {
41
42
43 private static final Frequency FREQUENCY = Frequency.G01;
44
45 @Test
46 public void testShapiro() {
47 doTestShapiro(0.006850703, 0.008320738, 0.010297509);
48 }
49
50 private void doTestShapiro(final double expectedMin, final double expectedMean, final double expectedMax) {
51
52 Context context = EstimationTestUtils.eccentricContext("regular-data:potential:tides");
53
54 final NumericalPropagatorBuilder propagatorBuilder =
55 context.createBuilder(OrbitType.KEPLERIAN, PositionAngle.TRUE, true,
56 1.0e-6, 60.0, 0.001);
57
58
59 final Propagator propagator = EstimationTestUtils.createPropagator(context.initialOrbit,
60 propagatorBuilder);
61 final int ambiguity = 1234;
62 final double groundClockOffset = 12.0e-6;
63 for (final GroundStation station : context.stations) {
64 station.getClockOffsetDriver().setValue(groundClockOffset);
65 }
66 final double satClockOffset = 345.0e-6;
67 List<ObservedMeasurement<?>> measurements =
68 EstimationTestUtils.createMeasurements(propagator,
69 new PhaseMeasurementCreator(context, FREQUENCY,
70 ambiguity,
71 satClockOffset),
72 1.0, 3.0, 300.0);
73
74 propagator.clearStepHandlers();
75
76
77 final ShapiroPhaseModifier modifier = new ShapiroPhaseModifier(context.initialOrbit.getMu());
78
79 DescriptiveStatistics stat = new DescriptiveStatistics();
80 for (final ObservedMeasurement<?> measurement : measurements) {
81 final AbsoluteDate date = measurement.getDate();
82
83 final SpacecraftState refstate = propagator.propagate(date);
84
85 Phase phase = (Phase) measurement;
86 EstimatedMeasurement<Phase> evalNoMod = phase.estimate(12, 17, new SpacecraftState[] { refstate });
87 Assert.assertEquals(12, evalNoMod.getIteration());
88 Assert.assertEquals(17, evalNoMod.getCount());
89
90
91 phase.addModifier(modifier);
92 boolean found = false;
93 for (final EstimationModifier<Phase> existing : phase.getModifiers()) {
94 found = found || existing == modifier;
95 }
96 Assert.assertTrue(found);
97 EstimatedMeasurement<Phase> eval = phase.estimate(0, 0, new SpacecraftState[] { refstate });
98
99 stat.addValue(eval.getEstimatedValue()[0] - evalNoMod.getEstimatedValue()[0]);
100
101 }
102
103
104 final double wavelength = ((Phase) measurements.get(0)).getWavelength();
105
106 Assert.assertEquals(expectedMin, stat.getMin() * wavelength, 1.0e-9);
107 Assert.assertEquals(expectedMean, stat.getMean() * wavelength, 1.0e-9);
108 Assert.assertEquals(expectedMax, stat.getMax() * wavelength, 1.0e-9);
109
110 }
111
112 }
113
114