Skip to content

Commit 2549cac

Browse files
author
Dmitry Tatarinov
committed
Merge pull request #4 from swift-nav/i344-calc_nav_meas
Add calc_sat_state error code handling
2 parents d76a536 + 6010592 commit 2549cac

File tree

5 files changed

+28
-14
lines changed

5 files changed

+28
-14
lines changed

include/libswiftnav/track.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -232,9 +232,9 @@ void cn0_est_init(cn0_est_state_t *s, float bw, float cn0_0,
232232
float cutoff_freq, float loop_freq);
233233
float cn0_est(cn0_est_state_t *s, float I, float Q);
234234

235-
void calc_navigation_measurement(u8 n_channels, const channel_measurement_t *meas[],
236-
navigation_measurement_t *nav_meas[],
237-
double nav_time, const ephemeris_t* e[]);
235+
s8 calc_navigation_measurement(u8 n_channels, const channel_measurement_t *meas[],
236+
navigation_measurement_t *nav_meas[],
237+
double nav_time, const ephemeris_t* e[]);
238238

239239
int nav_meas_cmp(const void *a, const void *b);
240240
u8 tdcp_doppler(u8 n_new, navigation_measurement_t *m_new,

python/tests/test_observation.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ def test_prop_single_diff():
165165
'toc': {'wn': 1876, 'tow': 172800.0}, 'dn': 4.718410826464475e-09, 'ecc': 0.0049016030970960855,
166166
'cic': -6.332993507385254e-08, 'crs': 19.0625, 'iode': 74, 'iodc': 21845, 'cis': -6.51925802230835e-08,
167167
'crc': 259.9375, 'w': 0.4885959643259506, 'af0': 7.212162017822266e-06, 'af1': 9.094947017729282e-13, 'af2': 0.0},
168-
'fit_interval': 4}),
168+
'fit_interval': 14400}),
169169
Ephemeris(**{'ura': 0.0, 'healthy': 1,
170170
'xyz': {'acc': [-6.146728992462158e-08, 4.742340394655613e-09, -0.8114190126645531], 'iod': 0,
171171
'a_gf0': 5153.798839569092, 'a_gf1': 1.6390180338742641,
@@ -180,7 +180,7 @@ def test_prop_single_diff():
180180
'toc': {'wn': 1876, 'tow': 172800.0}, 'dn': 4.742340394655613e-09, 'ecc': 0.00035172002390027046,
181181
'cic': 3.725290298461914e-09, 'crs': -40.5625, 'iode': 59, 'iodc': 21845, 'cis': -6.146728992462158e-08,
182182
'crc': 221.625, 'w': 2.9037284161724037, 'af0': -9.969808161258698e-07, 'af1': -5.229594535194337e-12, 'af2': 0.0},
183-
'fit_interval': 4})]
183+
'fit_interval': 14400})]
184184
gpst = ti.GpsTime(wn=1876, tow=167132)
185185
sdiffs = o.make_propagated_sdiffs_(rover_nm, rover_nm, remote_dists, base_pos, es, gpst)
186186
assert len(sdiffs) == 2

src/ephemeris.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,11 @@ s8 calc_sat_state(const ephemeris_t *e, const gps_time_t *t,
356356

357357
if (!ephemeris_valid(e, t)) {
358358
log_error_sid(e->sid,
359-
"Using invalid or too old ephemeris in calc_sat_state");
359+
"Using invalid or too old ephemeris in calc_sat_state"
360+
" (v:%d, fi:%d, [%d, %f]), [%d, %f]",
361+
(int)e->valid, (int)e->fit_interval,
362+
(int)e->toe.wn, e->toe.tow,
363+
(int)t->wn, t->tow);
360364
return -1;
361365
}
362366

src/observation.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,10 @@ u8 make_propagated_sdiffs(u8 n_local, navigation_measurement_t *m_local,
193193
double clock_rate_err;
194194
double local_sat_pos[3];
195195
double local_sat_vel[3];
196-
calc_sat_state(e[i], t, local_sat_pos, local_sat_vel,
197-
&clock_err, &clock_rate_err);
196+
if (calc_sat_state(e[i], t, local_sat_pos, local_sat_vel,
197+
&clock_err, &clock_rate_err) != 0) {
198+
continue;
199+
}
198200
sds[n].sid = m_local[i].sid;
199201
double dx = local_sat_pos[0] - remote_pos_ecef[0];
200202
double dy = local_sat_pos[1] - remote_pos_ecef[1];

src/track.c

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -760,9 +760,13 @@ float cn0_est(cn0_est_state_t *s, float I, float Q)
760760
return s->log_bw - 10.f*log10f(s->nsr);
761761
}
762762

763-
void calc_navigation_measurement(u8 n_channels, const channel_measurement_t *meas[],
764-
navigation_measurement_t *nav_meas[],
765-
double nav_time, const ephemeris_t* e[])
763+
/**
764+
* \return 0 on success,
765+
* -1 if ephemeris is invalid
766+
*/
767+
s8 calc_navigation_measurement(u8 n_channels, const channel_measurement_t *meas[],
768+
navigation_measurement_t *nav_meas[],
769+
double nav_time, const ephemeris_t* e[])
766770
{
767771
double TOTs[n_channels];
768772
double min_TOF = -DBL_MAX;
@@ -788,9 +792,11 @@ void calc_navigation_measurement(u8 n_channels, const channel_measurement_t *mea
788792
nav_meas[i]->lock_counter = meas[i]->lock_counter;
789793

790794
/* calc sat clock error */
791-
calc_sat_state(e[i], &nav_meas[i]->tot,
792-
nav_meas[i]->sat_pos, nav_meas[i]->sat_vel,
793-
&clock_err[i], &clock_rate_err[i]);
795+
if (calc_sat_state(e[i], &nav_meas[i]->tot,
796+
nav_meas[i]->sat_pos, nav_meas[i]->sat_vel,
797+
&clock_err[i], &clock_rate_err[i]) != 0) {
798+
return -1;
799+
}
794800

795801
/* remove clock error to put all tots within the same time window */
796802
if ((TOTs[i] + clock_err[i]) > min_TOF)
@@ -807,6 +813,8 @@ void calc_navigation_measurement(u8 n_channels, const channel_measurement_t *mea
807813
nav_meas[i]->tot.tow -= clock_err[i];
808814
normalize_gps_time(&nav_meas[i]->tot);
809815
}
816+
817+
return 0;
810818
}
811819

812820
/** Compare navigation message by PRN.

0 commit comments

Comments
 (0)