Metrics, in plain words
How Inertial corrects your GPS trace
Positions go through a constant-velocity Kalman filter in local metres, with a chi-squared innovation gate at 99%. Fixes reported worse than 60 m are rejected outright. Fixes between 30 and 60 m are accepted with inflated uncertainty, but only when nothing better has arrived for 2 ticks.
| What | Number | The qualifier |
|---|---|---|
| Filter | constant-velocity Kalman | local east-north metres, Joseph-form update |
| Hard reject | above 60 m reported accuracy | no information left in the fix |
| Soft accept | 30-60 m, when starved | after 2 ticks with no accepted position |
| Innovation gate | chi-squared, 2 degrees of freedom, 99% | 3 consecutive rejects force a re-anchor |
What the filter does
Raw satellite positions jump around. Every fix carries error, and adding up noisy points inflates distance, which Ranacher and colleagues quantified in 2016.
So we do not sum raw fixes. Positions are converted into local east-north metres and fed to a constant-velocity Kalman filter. The state is your position and your velocity. Each fix updates it, weighted by how good the fix claims to be.
A chi-squared test on 2 degrees of freedom at 99% rejects fixes that disagree too violently with where the filter thinks you are. Three rejects in a row means the filter is lost, so it re-anchors and records that it did.
The accuracy gate, and why it is soft
A fixed cut-off is worse than it sounds. In an urban canyon, reported accuracy sits at 35 to 60 m for minutes at a time. Drop all of it and you get a straight line across every turn, which under-measures the run.
So the gate has three bands.
| Reported accuracy | What happens |
|---|---|
| under 30 m | accepted normally |
| 30-60 m | accepted with inflated uncertainty, only after 2 ticks with nothing better |
| over 60 m | rejected |
The starvation rule matters. While good fixes are arriving, a degraded fix adds correlated noise rather than information. Allowing them freely measurably inflated our walking-pace test fixture, from +1.84% to +2.62%. Gating them on starvation put that back while still measuring the degraded stretch.
What we do not turn on
Android exposes a signal-to-noise figure per satellite. Reflected signals typically have lower and more variable values, so weighting fixes by it should help in cities.
We built that and shipped it switched off. Our urban test fixtures already sit within 0.1% of true distance without it, so enabling it would be tuning against noise. The hook is there for the day the evidence says otherwise.
If we correct it, we show it
Every dropped fix is recorded with a typed reason, and none are dropped silently. When an imported file's recomputed distance disagrees with the total the original device reported, we show both numbers rather than picking one.
You can export the raw stream for any run and check our arithmetic.
Sources
- Ranacher P et al. Why GPS makes distances bigger than they are. Int J Geogr Inf Sci 30(2):316-333, 2016 primary
- Gilgen-Ammann R, Schweizer T, Wyss T. Accuracy of distance recordings in eight positioning-enabled sport watches. Sensors 20(19):5493, 2020 primary
- Zhu R, Zhou Z. GNSS multipath and NLOS mitigation using C/N0 observations. GPS Solutions, 2018 primary
Changelog
- — First published.