What types of HRV data does the Garmin Edge 820 record?

The Garmin Edge 820 records HRV data in 5 parameters. The FIT SDK extracts this data per recorded point as a collection of 5 values. For example:

0.43
0.437
0.435
65535
65535

There are however no labels, so I can't be sure which kind of parameters are measured. A tour of the internet and various AI chat bots give conflicting answers.

So my question is, what are the 5 HRV data points the Edge 820 record?

  • The values in the HRV message are the beat to beat interval (BBI) values. There will always be five values, based on a max heart rate of 230. 65535, aka 0xFFFF, is the invalid value. The HRV messages are written to the file once per second, and based on the person's heart rate there will be a varying number of invalids. If the person's HR was 60 bpm, then there would be one valid value (1.0 in this case) and four invalid values. 

    To convert from a BBI value to beats per minute
    (1 / BBI) * 60
    (1 / 0.43) * 60 = 139

    HRV messages are interleaved with Record and Event messages. If you need to know the timestamp of a BBI, you need to take the timestamp from the previous Record or Event message and add the BBI values to it.

    If the timestamp of the previous Record message is 1234, then the timestamps would be

    0.43 + 1234 = 1234.43
    0.437 + 0.43 + 1234 = 1234.867
    etc...

  • Thank you, it all makes a lot more sense now.

    So if you have a heart rate of 120 you will have 2 beats a second, so 2 valid values in the HRV data. And 3 for a heart rate of 180.

    But if it is capped at 230 BPM, then 4 values in the HRV data would be enough for all heart rates, right?

    I have some erroneous heart rate data with a max heart rate of 248 and there are only 4 values. Does that mean the 5th value would never be filled and I can disregard it? Makes me wonder why it is there.

  • I worked it out at one point as to why there are five potential values in the array, but I don't remember all of the details at the moment. I would not ignore the fifth value as a rule, rather I would ignore any value that is invalid (0xFFFF). It would be a separate step to then filter out erroneous values based on the logic for your application.

  • Yeah, it could be an edge case where it is needed. I will take the 'only ignore 0xFFF' approach.

    Thanks again! With this input I can incorporate the HRV data in my applications.