# Correcting for GPS error

I recently connected a GPS unit sold by Adafruit to my Raspberry PI and looked at the data feed. The data I'm getting for speed seems to be way off. My PI is stationary, but it always reports are moving at about .5kph. It will occasionally go up to 1.5 kph.

The Speed Err is reported to be +/- 19 kph! That seems a little odd. Do I just have a bad signal indoors or is this to be expected? Is there any way to correct for these wandering readings?

this is perfectly normal, especially indoors, where the reception quality is far from ideal. your GPS unit recalculates your position every time, and because of the position error, it thinks you're moving a bit back and forth, hence the non-zero speed readings.

to fix this you may get an external antenna or average your coordinates over time to get more precise location.

• Averaging wont work because it's always > 0 kph. I'm going to use the GPS to track the speed of a relatively slow moving object (around 15mpg average) so being off by almost 1mph at times will make a big difference. It will always be used out doors so that may help. I guess I'll have to go outside and see if there is less error. Oct 3, 2013 at 13:00
• @Sparafusile average the position and calculate the speed yourself. Oct 3, 2013 at 23:31

GPS has what is known as DOP or Dilution Of Precision. It means things aren't as accurate as you might want. There are 4 such values: TDOP, two HDOP values that are often merged, and VDOP. (Those are Time/Temporal, Horizontal, and Vertical. TDOP should be best, VDOP worst.) All DOPs are measured in meters, and ideally should be under 5. If you get both HDOPs, you should also get an orientation.

That your HDOP was 2 is actually quite good. This should be expected with a 9 satellite fix.

Velocity is NOT something GPS can tell you. But one can calculate it by taking the difference of successive readings. 19kph works out to 5.28 meters/second, or perhaps 0.53 meters/decisecond, if you are using a 10 reading/second device. This probably does indicate a certain amount of jumping around.

As for why it jumps: A big culprit can be partial cover. If you have the unit in a window, it could be partially blocked by the building (and HDOP tends to get highly directional in that case). Atmospheric conditions can mess things up. Nearby building could reflect signals. etc...