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.Collections;
20 import java.util.List;
21
22 import org.hipparchus.geometry.euclidean.threed.Vector3D;
23 import org.orekit.estimation.measurements.EstimatedMeasurement;
24 import org.orekit.estimation.measurements.EstimationModifier;
25 import org.orekit.estimation.measurements.gnss.Phase;
26 import org.orekit.frames.Transform;
27 import org.orekit.propagation.SpacecraftState;
28 import org.orekit.time.AbsoluteDate;
29 import org.orekit.utils.ParameterDriver;
30 import org.orekit.utils.TimeStampedPVCoordinates;
31
32
33
34
35
36 public class OnBoardAntennaPhaseModifier implements EstimationModifier<Phase> {
37
38
39 private final Vector3D antennaPhaseCenter;
40
41
42
43
44 public OnBoardAntennaPhaseModifier(final Vector3D antennaPhaseCenter) {
45 this.antennaPhaseCenter = antennaPhaseCenter;
46 }
47
48
49 @Override
50 public List<ParameterDriver> getParametersDrivers() {
51 return Collections.emptyList();
52 }
53
54
55 @Override
56 public void modify(final EstimatedMeasurement<Phase> estimated) {
57
58 final TimeStampedPVCoordinates[] participants = estimated.getParticipants();
59 final AbsoluteDate emissionDate = participants[0].getDate();
60 final Vector3D pReception = participants[1].getPosition();
61
62
63 final SpacecraftState refState = estimated.getStates()[0];
64 final SpacecraftState emissionState = refState.shiftedBy(emissionDate.durationFrom(refState.getDate()));
65 final Transform spacecraftToInert = emissionState.toTransform().getInverse();
66
67
68
69
70 final Vector3D pSpacecraft = spacecraftToInert.transformPosition(Vector3D.ZERO);
71 final double rangeUsingSpacecraftCenter = Vector3D.distance(pSpacecraft, pReception);
72
73
74
75 final Vector3D pAPC = spacecraftToInert.transformPosition(antennaPhaseCenter);
76 final double rangeUsingAntennaPhaseCenter = Vector3D.distance(pAPC, pReception);
77
78
79 final double[] value = estimated.getEstimatedValue();
80
81
82 value[0] += (rangeUsingAntennaPhaseCenter - rangeUsingSpacecraftCenter) / estimated.getObservedMeasurement().getWavelength();
83 estimated.setEstimatedValue(value);
84 }
85
86 }
87