fix(gps): smooth Doppler measurements before velocity WLS
This commit is contained in:
@@ -91,6 +91,7 @@ static gps_external_irq_handler_t gps_external_irq_handler = NULL;
|
|||||||
(((uint64_t)GPS_PPS_CLOCK_HZ * GPS_NAV_ABS_SAMPLE_SYNC_WINDOW_MS) / 1000u)
|
(((uint64_t)GPS_PPS_CLOCK_HZ * GPS_NAV_ABS_SAMPLE_SYNC_WINDOW_MS) / 1000u)
|
||||||
#define GPS_NAV_HOLDOFF_LOCAL_TICKS \
|
#define GPS_NAV_HOLDOFF_LOCAL_TICKS \
|
||||||
(((uint64_t)BSP_CLINT_TIMEBASE_HZ * GPS_NAV_EPOCH_HOLDOFF_MS) / 1000u)
|
(((uint64_t)BSP_CLINT_TIMEBASE_HZ * GPS_NAV_EPOCH_HOLDOFF_MS) / 1000u)
|
||||||
|
#define GPS_TRACK_DOPPLER_SMOOTH_ALPHA 0.05
|
||||||
|
|
||||||
_Static_assert(GPS_NAV_ABS_SAMPLE_SYNC_WINDOW_MS <
|
_Static_assert(GPS_NAV_ABS_SAMPLE_SYNC_WINDOW_MS <
|
||||||
(GPS_NAV_SOLVE_PERIOD_MS / 2u),
|
(GPS_NAV_SOLVE_PERIOD_MS / 2u),
|
||||||
@@ -147,6 +148,20 @@ static void gps_update_tracking_measurement_isr(
|
|||||||
measurement.cn0_dbhz =
|
measurement.cn0_dbhz =
|
||||||
0.2 * measurement.cn0_dbhz +
|
0.2 * measurement.cn0_dbhz +
|
||||||
0.8 * previous->cn0_dbhz;
|
0.8 * previous->cn0_dbhz;
|
||||||
|
/*
|
||||||
|
* The carrier loop's 20 ms snapshots contain several hertz of
|
||||||
|
* zero-mean jitter. At L1 that is metres/second of range-rate noise,
|
||||||
|
* which poor satellite geometry amplifies heavily in velocity WLS.
|
||||||
|
* A 0.05 pole at the 50 Hz navigation-bit cadence has an approximately
|
||||||
|
* 0.4 s time constant while retaining real receiver dynamics.
|
||||||
|
*/
|
||||||
|
measurement.doppler_hz =
|
||||||
|
GPS_TRACK_DOPPLER_SMOOTH_ALPHA * measurement.doppler_hz +
|
||||||
|
(1.0 - GPS_TRACK_DOPPLER_SMOOTH_ALPHA) *
|
||||||
|
previous->doppler_hz;
|
||||||
|
measurement.pseudorange_rate_mps =
|
||||||
|
gps_tracking_doppler_to_range_rate_mps(
|
||||||
|
measurement.doppler_hz);
|
||||||
}
|
}
|
||||||
measurement.local_timestamp_ticks = local_timestamp_ticks;
|
measurement.local_timestamp_ticks = local_timestamp_ticks;
|
||||||
gps_latest_tracking_measurement[tracking_index] = measurement;
|
gps_latest_tracking_measurement[tracking_index] = measurement;
|
||||||
|
|||||||
Reference in New Issue
Block a user