Wednesday, 25 April 2012

So why does my Garmin tell lies?

I have a Garmin Forerunner 305 and while for most things it's a splendid bit of kit, there is one bit of measurement that it's rather bad at.  Now if you're training to run long races, one of your key records will be the total distance you've run; for example I always feel reasonably confident if I've covered about a thousand miles before the first big event of the year, the West Highland Way Race. But if your races start to involve a lot of real hills, the quantity that becomes as important as your mileage and maybe even more so is the total height of ascent you have accumulated. Bob Graham Round aspirants will talk of needing to build up enough "10,000 ft weeks" and so on. And this is where the Garmin starts to go wrong; not just a little bit wrong but seriously wrong at times, sufficiently to question it's usefulness at all for recording height gain. This has bugged me for a year or two now so I set about trying to find out the reasons for the problem and what I could do about it.

While I hadn't bothered to gather any proper evidence, my feeling was that in hilly country the Garmin was overestimating the ascent a bit, but as the route becomes flatter the overestimation goes up substantially. I first looked at a couple of outings to see whether this was actually true.

Last Sunday I went for a walk in the Lakes, a slightly extended form of the Kentmere horseshoe but convenient for this exercise because I have the exact same walk in a guidebook, the author of which gives the total ascent for the round as 4400ft. It has quite a bit of up and down, but also some long stretches with gentle gradients once you are on the main ridge. My Garmin told me that the total ascent was around 4800ft. So, accurate to about 10%  - not great but in the ballpark.  The following day I went out for a steady six and a half mile run along a straight and level section of my local canal towpath; allowing for the odd thickness change in the footpath bed, maybe a total height gain of 10ft. The Garmin showed a total height gain of 724ft.  So here we have the issue.

I've found it very difficult to get any real information on how the Garmin works, but I've managed to piece together the following - any comments or additional gen would be most welcome!

First, there is an inaccuracy whenever the Garmin takes a height reading; I've found a few views on why this happens but I'm happy to just put it down to "the system". It makes small errors all the time and larger errors less frequently. If I look at the elevation trace of my canal run it's very noisy but most of the variation is within +/-15ft though there are occasional peaks and troughs at +/-50ft. The trace of my Kentmere walk was much smoother and enabled me to compare the map height at each top with the height recorded by the Garmin, which gave the following comparison:

Top                        Map Height       Garmin Height     Error
Yoke                      2316                 2321                     +5
Ill Bell                     2483                 2491                     +8
Froswick                2360                 2394                     +34
Thornthwaite Crag  2572                 2570                     -2
Gray Crag              2293                 2233                     -60
High St                   2718                 2728                     +10
Mardale Ill Bell       2496                 2525                     +29
Harter Fell              2552                 2588                     +36
Kentmere Pike        2396                 2423                     +27
Shipman Knotts      1926                 1958                      +32

So again, not very scientific but you can see the spread of accuracy, similar to that on the flat.

But secondly we have to think about when the Garmin takes the readings and what it then does with them.

On a Forerunner 305 there are two modes of data capture. Mode 1 collects and processes a set of data once per second. A lot of data in a short time, useful for downhill ski-ing, mountain biking, and maybe runners doing sprint sessions but too much for distance runners, especially as in this mode the data store is full in 3,5 hours. Most ultra runners will have the Garmin set to Mode 2, which is called "smart" capture. A simple interpretation of this is that it collects and processes a new set of data when it sees that something has changed - direction, speed, etc.

When it constructs a trace for any parameter over time  -  position, height, heart rate, etc - the Garmin then applies a "smoothing" algorithm so you see the trend rather than the noise of all the individual readings. This works better for some parameters than for others, for example position (ie the "map" track) and heart rate are quite smooth, whereas pace is always quite noisy.  Height ("elevation" in Garmin-speak) seems to be noisy for flat courses and much smoother for hilly ones.

It's easy enough to see where the over-estimation of height gain comes from, look at the sketch below:


This shows the elevation of a track. The blue line shows a runner progressing along a level course A-B-C-D. The red line shows the Garmin interpretation of the elevation it thinks the runner is at. It underestimates at A, overestimates at B, and so on. So unless the red line is completely smoothed by the algorithm to match the blue one, the Garmin will record height gains from A to B, and from C to D, where in reality there are none. This is a gross simplification, but it shows the problem. Now imagine that the runner is actually going uphill, as below:

Again there are errors in the Garmin elevation record, but because there is now an actual height gain, the degree of over-prediction will be less. Again a huge simplification, but you get the point. So it will be easier for the algorithm to smooth the trace if there are actual elevation changes than if there are none, and I could surmise that the steeper the route, the more accurate the Garmin will get, which seems to agree with what I find in practice.

So where has this little exercise got us?

Well, if you're still with me, I think I've convinced myself that
1. Garmin "height gain" is inaccurate because there is an inaccuracy in the initial readings.
2. The system is able to compensate better for the inaccuracies as the course gets hillier
3. There seems to be some sort of semi-logical explanation for this.

What I don't have is any way of applying a correction that will work consistently, even an empirical one. For example, I suspect that the inaccuracy would be different on a continuously up and down course than on one with the same overall height gain comprising one big hill and flat for the rest of the route.
What I do seem to find looking back over quite a few records is that if the outing shows a Garmin height change overall of around 300ft per mile, then the record starts to look believable. Below that, I think the errors are significant and I don't think I'll bother with them.

Any comments or contributions welcome!


Anonymous said...

This is all double Dutch and alien territory to me, Andy; but your description is so so clear that even I can follow your drift. Almost.

(In my ignorance, do you need to "set" your garmin @ the altitude you are starting at before you set off? Or is that not necessary? Maybe you should do this, but are not doing so. I guess it is not necessary, or you would be doing it.)

It makes me wonder what altitude gain might be recorded for folk doing the GUCR, c 150 miles along a "flat" canal towpath. I guess the actual height gain might be two or 3 hundred feet to take account of locks along the way. Maybe the garmin wil record it as being hillier than UTMB! That would be scary, as well as being somewhat misleading.


Rich Owings said...

GPS is much less accurate for elevation than for lat/long. Some advanced units feature a barometric altimeter to improve this, but they can actually make things worse if a front is moving through.

Grellan said...

Hi Andy. Interesting article. Your hypothesis make perfect sense to me. I'd never have guessed that you're Engineer.

I use sportstrack to download runs from my 305, which has an "elevation correction tool" which, when applied to my 8.8 mile run this morning corrected my elevation gain from 408' to 160' - a considerable adjustment. I understand the correction tool is based on SRTM data (link -

Andy Cole said...

Thanks for the link Grellan, that sounds good, I'll get onto it.