Skip to content
This repository was archived by the owner on Apr 13, 2021. It is now read-only.

Commit edcdda1

Browse files
committed
Change fit_interval to seconds for GLONASS
1 parent e481413 commit edcdda1

File tree

6 files changed

+21
-20
lines changed

6 files changed

+21
-20
lines changed

include/libswiftnav/almanac.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ typedef struct {
4747
gnss_signal_t sid; /**< Signal ID. */
4848
gps_time_t toa; /**< Reference time of almanac. */
4949
float ura; /**< User range accuracy [m] */
50-
u8 fit_interval; /**< Curve fit interval [hours] */
50+
u32 fit_interval; /**< Curve fit interval [s] */
5151
u8 valid; /**< Almanac is valid. */
5252
u8 healthy; /**< Satellite health status. */
5353
union {

include/libswiftnav/ephemeris.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ typedef struct {
6969
gnss_signal_t sid; /**< Signal ID. */
7070
gps_time_t toe; /**< Reference time of ephemeris. */
7171
float ura; /**< User range accuracy [m] */
72-
u8 fit_interval; /**< Curve fit interval [hours] */
72+
u32 fit_interval; /**< Curve fit interval [s] */
7373
u8 valid; /**< Ephemeris is valid. */
7474
u8 healthy; /**< Satellite health status. */
7575
union {
@@ -89,12 +89,10 @@ s8 calc_sat_doppler(const ephemeris_t *e, const gps_time_t *t,
8989
const double ref[3], double *doppler);
9090

9191
u8 ephemeris_valid(const ephemeris_t *e, const gps_time_t *t);
92-
u8 ephemeris_params_valid(const u8 valid, const u8 fit_interval,
92+
u8 ephemeris_params_valid(const u8 valid, const u32 fit_interval,
9393
const gps_time_t* toe, const gps_time_t *t);
9494
u8 satellite_healthy(const ephemeris_t *e);
9595

96-
float decode_ura_index(const u8 index);
97-
u8 decode_fit_interval(u8 fit_interval_flag, u16 iodc);
9896
void decode_ephemeris(u32 frame_words[3][8], ephemeris_t *e);
9997
bool ephemeris_equal(const ephemeris_t *a, const ephemeris_t *b);
10098

python/tests/test_almanac.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def test_almanac_functions():
4343
'sid': {'sat': 1, 'code': 0},
4444
'toa': {'tow': 233472.0, 'wn': 814,},
4545
'ura': 900.0,
46-
'fit_interval': 144,
46+
'fit_interval': 144 * 60 * 60,
4747
'valid': 1,
4848
'healthy': 1,
4949
'kepler': {

python/tests/test_ephemeris.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def test_sat_state():
1919
eph = e.Ephemeris(**{'sid': {'sat': 17, 'code': 0,},
2020
'toe': {'wn': 1867, 'tow': 518400.0,},
2121
'ura': 2.0,
22-
'fit_interval': 4,
22+
'fit_interval': 4 * 60 * 60,
2323
'valid': 1,
2424
'healthy': 1,
2525
'kepler': {
@@ -71,7 +71,7 @@ def test_sat_state():
7171
eph = e.Ephemeris(**{'sid': {'sat': 17, 'code': 0},
7272
'toe': { 'wn': 1867, 'tow': 518400.0,},
7373
'ura': 2.0,
74-
'fit_interval': 4,
74+
'fit_interval': 4 * 60 * 60,
7575
'valid': 1,
7676
'healthy': 0,
7777
'kepler': {'crs': 25.125,
@@ -102,7 +102,7 @@ def test_sat_state():
102102
eph = e.Ephemeris(**{'sid': {'sat': 17, 'code': 0},
103103
'toe': { 'wn': 1867, 'tow': 518400.0,},
104104
'ura': 2.0,
105-
'fit_interval': 4,
105+
'fit_interval': 4 * 60 * 60,
106106
'valid': 0,
107107
'healthy': 0,
108108
'kepler': {'crs': 25.125,
@@ -133,7 +133,7 @@ def test_sat_state():
133133
eph = e.Ephemeris(**{'sid': {'sat': 17, 'code': 0},
134134
'toe': { 'wn': 1867, 'tow': 518400.0,},
135135
'ura': 2.0,
136-
'fit_interval': 6,
136+
'fit_interval': 6 * 60 * 60,
137137
'valid': 1,
138138
'healthy': 1,
139139
'kepler': {'crs': 25.125,

src/almanac.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,8 +234,8 @@ u8 almanac_valid(const almanac_t *a, const gps_time_t *t)
234234

235235
/* TODO: this doesn't exclude almanacs older than a week so could be made
236236
* better. */
237-
/* If dt is greater than fit_interval / 2 hours our ephemeris isn't valid. */
238-
if (fabs(dt) > ((u32)a->fit_interval / 2) * 60 * 60) {
237+
/* If dt is greater than fit_interval / 2 seconds our ephemeris isn't valid. */
238+
if (fabs(dt) > ((u32)a->fit_interval / 2)) {
239239
return 0;
240240
}
241241

src/ephemeris.c

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
#include <libswiftnav/ephemeris.h>
2323
#include <libswiftnav/coord_system.h>
2424

25+
float decode_ura_index(const u8 index);
26+
u32 decode_fit_interval(u8 fit_interval_flag, u16 iodc);
27+
2528
/** \defgroup ephemeris Ephemeris
2629
* Functions and calculations related to the GPS ephemeris.
2730
* \{ */
@@ -320,13 +323,13 @@ u8 ephemeris_valid(const ephemeris_t *e, const gps_time_t *t)
320323
* The function allows to avoid passing whole ephemeris
321324
*
322325
* \param valid ephemeris Valid flag after decoding
323-
* \param fit_interval Curve fit interval in hours
326+
* \param fit_interval Curve fit interval in seconds
324327
* \param toe Time from ephemeris reference epoch
325328
* \param t The current GPS time. This is used to determine the ephemeris age
326329
* \return 1 if the ephemeris is valid and not too old.
327330
* 0 otherwise.
328331
*/
329-
u8 ephemeris_params_valid(const u8 valid, const u8 fit_interval,
332+
u8 ephemeris_params_valid(const u8 valid, const u32 fit_interval,
330333
const gps_time_t* toe, const gps_time_t *t)
331334
{
332335
assert(t != NULL);
@@ -353,8 +356,8 @@ u8 ephemeris_params_valid(const u8 valid, const u8 fit_interval,
353356

354357
/* TODO: this doesn't exclude ephemerides older than a week so could be made
355358
* better. */
356-
/* If dt is greater than fit_interval / 2 hours our ephemeris isn't valid. */
357-
if (fabs(dt) > ((u32)fit_interval / 2) * 60 * 60) {
359+
/* If dt is greater than fit_interval / 2 seconds our ephemeris isn't valid. */
360+
if (fabs(dt) > ((u32)fit_interval / 2)) {
358361
return 0;
359362
}
360363

@@ -415,10 +418,10 @@ float decode_ura_index(const u8 index) {
415418
*
416419
* \param fit_interval_flag The curve fit interval flag. 0 is 4 hours, 1 is >4 hours.
417420
* \param iodc The IODC value.
418-
* \return the curve fit interval in hours.
421+
* \return the curve fit interval in seconds.
419422
*/
420-
u8 decode_fit_interval(u8 fit_interval_flag, u16 iodc) {
421-
u8 fit_interval = 4;
423+
u32 decode_fit_interval(u8 fit_interval_flag, u16 iodc) {
424+
u8 fit_interval = 4; /* This is in hours */
422425

423426
if (fit_interval_flag) {
424427
fit_interval = 6;
@@ -438,7 +441,7 @@ u8 decode_fit_interval(u8 fit_interval_flag, u16 iodc) {
438441
}
439442
}
440443

441-
return fit_interval;
444+
return fit_interval * 60 * 60;
442445
}
443446

444447
/** Decode ephemeris from L1 C/A GPS navigation message frames.

0 commit comments

Comments
 (0)