1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.estimation.measurements.generation;
18
19 import java.util.Map;
20
21 import org.hipparchus.random.CorrelatedRandomVectorGenerator;
22 import org.orekit.estimation.measurements.BistaticRangeRate;
23 import org.orekit.estimation.measurements.EstimationModifier;
24 import org.orekit.estimation.measurements.GroundStation;
25 import org.orekit.estimation.measurements.ObservableSatellite;
26 import org.orekit.propagation.SpacecraftState;
27 import org.orekit.propagation.sampling.OrekitStepInterpolator;
28 import org.orekit.time.AbsoluteDate;
29 import org.orekit.utils.ParameterDriver;
30
31
32
33
34
35
36 public class BistaticRangeRateBuilder extends AbstractMeasurementBuilder<BistaticRangeRate> {
37
38
39 private final GroundStation emitter;
40
41
42 private final GroundStation receiver;
43
44
45
46
47 private final ObservableSatellite satellite;
48
49
50
51
52
53
54
55
56
57 public BistaticRangeRateBuilder(final CorrelatedRandomVectorGenerator noiseSource,
58 final GroundStation emitter, final GroundStation receiver,
59 final double sigma, final double baseWeight,
60 final ObservableSatellite satellite) {
61 super(noiseSource, sigma, baseWeight, satellite);
62 this.emitter = emitter;
63 this.receiver = receiver;
64 this.satellite = satellite;
65 }
66
67
68 @Override
69 public BistaticRangeRate build(final AbsoluteDate date, final Map<ObservableSatellite, OrekitStepInterpolator> interpolators) {
70
71 final double sigma = getTheoreticalStandardDeviation()[0];
72 final double baseWeight = getBaseWeight()[0];
73 final SpacecraftState[] relevant = new SpacecraftState[] { interpolators.get(satellite).getInterpolatedState(date) };
74
75
76 final BistaticRangeRate dummy = new BistaticRangeRate(emitter, receiver, relevant[0].getDate(),
77 Double.NaN, sigma, baseWeight, satellite);
78 for (final EstimationModifier<BistaticRangeRate> modifier : getModifiers()) {
79 dummy.addModifier(modifier);
80 }
81
82
83 for (final ParameterDriver driver : dummy.getParametersDrivers()) {
84 if (driver.getReferenceDate() == null) {
85 final AbsoluteDate start = getStart();
86 final AbsoluteDate end = getEnd();
87 driver.setReferenceDate(start.durationFrom(end) <= 0 ? start : end);
88 }
89 }
90
91
92 double brr = dummy.estimateWithoutDerivatives(relevant).getEstimatedValue()[0];
93
94
95 final double[] noise = getNoise();
96 if (noise != null) {
97 brr += noise[0];
98 }
99
100
101 final BistaticRangeRate measurement = new BistaticRangeRate(emitter, receiver, relevant[0].getDate(),
102 brr, sigma, baseWeight, satellite);
103 for (final EstimationModifier<BistaticRangeRate> modifier : getModifiers()) {
104 measurement.addModifier(modifier);
105 }
106 return measurement;
107
108 }
109
110 }