@@ -25,7 +25,6 @@ GnssReceiver::GnssReceiver(const int prescaler, environment::ClockGenerator* clo
25
25
quaternion_b2c_(quaternion_b2c),
26
26
half_width_deg_(half_width_deg),
27
27
antenna_model_(antenna_model),
28
- pseudorange_noise_standard_deviation_m_(pseudorange_noise_standard_deviation_m),
29
28
dynamics_(dynamics),
30
29
gnss_satellites_(gnss_satellites),
31
30
simulation_time_(simulation_time) {
@@ -34,6 +33,7 @@ GnssReceiver::GnssReceiver(const int prescaler, environment::ClockGenerator* clo
34
33
velocity_random_noise_ecef_m_s_[i].SetParameters (0.0 , velocity_noise_standard_deviation_ecef_m_s[i],
35
34
randomization::global_randomization.MakeSeed ());
36
35
}
36
+ pseudorange_random_noise_m_.SetParameters (0.0 , pseudorange_noise_standard_deviation_m, randomization::global_randomization.MakeSeed ());
37
37
}
38
38
39
39
GnssReceiver::GnssReceiver (const int prescaler, environment::ClockGenerator* clock_generator, PowerPort* power_port, const size_t component_id,
@@ -48,7 +48,6 @@ GnssReceiver::GnssReceiver(const int prescaler, environment::ClockGenerator* clo
48
48
quaternion_b2c_(quaternion_b2c),
49
49
half_width_deg_(half_width_deg),
50
50
antenna_model_(antenna_model),
51
- pseudorange_noise_standard_deviation_m_(pseudorange_noise_standard_deviation_m),
52
51
dynamics_(dynamics),
53
52
gnss_satellites_(gnss_satellites),
54
53
simulation_time_(simulation_time) {
@@ -57,6 +56,7 @@ GnssReceiver::GnssReceiver(const int prescaler, environment::ClockGenerator* clo
57
56
velocity_random_noise_ecef_m_s_[i].SetParameters (0.0 , velocity_noise_standard_deviation_ecef_m_s[i],
58
57
randomization::global_randomization.MakeSeed ());
59
58
}
59
+ pseudorange_random_noise_m_.SetParameters (0.0 , pseudorange_noise_standard_deviation_m, randomization::global_randomization.MakeSeed ());
60
60
}
61
61
62
62
void GnssReceiver::MainRoutine (const int time_count) {
@@ -69,16 +69,7 @@ void GnssReceiver::MainRoutine(const int time_count) {
69
69
CheckAntenna (position_true_eci, quaternion_i2b);
70
70
71
71
// Pseudorange calculation
72
- size_t number_of_calculated_gnss_satellites = gnss_satellites_->GetNumberOfCalculatedSatellite ();
73
- for (size_t i = 0 ; i < number_of_calculated_gnss_satellites; i++) {
74
- math::Vector<3 > gnss_satellite_position_ecef_m = gnss_satellites_->GetPosition_ecef_m (i);
75
- math::Vector<3 > position_true_ecef_m = dynamics_->GetOrbit ().GetPosition_ecef_m ();
76
- double geometric_distance_m = (gnss_satellite_position_ecef_m - position_true_ecef_m).CalcNorm ();
77
- randomization::NormalRand pseudorange_random_noise_m;
78
- pseudorange_random_noise_m.SetParameters (0.0 , pseudorange_noise_standard_deviation_m_, randomization::global_randomization.MakeSeed ());
79
- double pseudorange_m = geometric_distance_m + pseudorange_random_noise_m;
80
- pseudorange_list_m_[i] = pseudorange_m;
81
- }
72
+ SetGnssObservationList ();
82
73
83
74
if (is_gnss_visible_) {
84
75
// Antenna of GNSS-R can detect GNSS signal
@@ -195,6 +186,32 @@ void GnssReceiver::SetGnssInfo(const math::Vector<3> antenna_to_satellite_i_m, c
195
186
gnss_information_list_.push_back (gnss_info_new);
196
187
}
197
188
189
+ double GnssReceiver::CalcGeometricDistance (const size_t gnss_system_id) {
190
+ math::Vector<3 > gnss_satellite_position_ecef_m = gnss_satellites_->GetPosition_ecef_m (gnss_system_id);
191
+ math::Vector<3 > position_true_ecef_m = dynamics_->GetOrbit ().GetPosition_ecef_m ();
192
+ double geometric_distance_m = (gnss_satellite_position_ecef_m - position_true_ecef_m).CalcNorm ();
193
+ return geometric_distance_m;
194
+ }
195
+
196
+ double GnssReceiver::CalcPseudorange (const size_t gnss_system_id) {
197
+ // TODO: Add effect of radio wave propagation time
198
+ // TODO: Add effect of clock bias
199
+ // TODO: Add ionospheric delay
200
+ double geometric_distance_m = CalcGeometricDistance (gnss_system_id);
201
+ double pseudorange_m = geometric_distance_m + pseudorange_random_noise_m_;
202
+ return pseudorange_m;
203
+ }
204
+
205
+ void GnssReceiver::SetGnssObservationList () {
206
+ // TODO: Add carrier phase observation
207
+ pseudorange_list_m_.assign (kTotalNumberOfGnssSatellite , 0.0 );
208
+ for (size_t i = 0 ; i < gnss_information_list_.size (); i++) {
209
+ size_t gnss_system_id = gnss_information_list_[i].gnss_id ;
210
+ double pseudorange_m = CalcPseudorange (gnss_system_id);
211
+ pseudorange_list_m_[gnss_system_id] = pseudorange_m;
212
+ }
213
+ }
214
+
198
215
void GnssReceiver::AddNoise (const math::Vector<3 > position_true_ecef_m, const math::Vector<3 > velocity_true_ecef_m_s) {
199
216
for (size_t i = 0 ; i < 3 ; i++) {
200
217
position_ecef_m_[i] = position_true_ecef_m[i] + position_random_noise_ecef_m_[i];
0 commit comments