I am looking for an implementation (or a document that describes the actual algorithm) for the energy expenditure/VO2/EPOC calculation from the heart rate variability.

A few white papers about

  • Oxygen consumption estimation
  • Energy expenditure estimation
  • EPOC (Excess post-exercise oxygen consumption)
  • Training effect
  • Athlete's recovery analysis

can be downloaded here.

According to Garmin's webpage, the error is about 50% smaller than for the generic method.

While these are fascinating to read, they don't tell us much about how to actually calculate these values from heart rate data. All it says:

Neural networks were used to construct a model that derives VO2 from R-R intervals (time between successive heart beats), using respiration rate and on/off-response information.

Even though the normal heart rate monitors don't make the data available, there are cheap receivers for polar and ANT+ around that allow beat by beat monitoring, like this one www.sparkfun.com/products/8661 (for polar) or http://www.abra-electronics.com/products/WRL%252d08840-Nordic-USB-ANT-Stick.html (for ant+) https://code.google.com/p/hrvtracker/ (program)

The conventional estimation of caloric expenditure as a function of the heart rate can be found in this paper: Prediction of Energy Expenditure from Heart Rate Monitoring During Submaximal Exercise.

  • 3
    Given that they use neural networks as the main technology component, it might be difficult to scientifically explain the mapping (see "Disadvantages" in en.wikipedia.org/wiki/Artificial_neural_network)
    – FredrikD
    Commented Nov 21, 2012 at 13:40
  • 2
    Agreed, NNs are unpredictable. Either they work or they don't, but explaining why is another story.
    – Baarn
    Commented Nov 21, 2012 at 15:23
  • 1
    I found the thesis of one of the Firstbeat people jyx.jyu.fi/dspace/bitstream/handle/123456789/13267/…
    – Dan
    Commented Nov 22, 2012 at 2:46
  • 3
    From reading his thesis it seems they use sigmoid/logistic units, which are non-linear. However, he uses the neural network to extract the respiratory frequency from the heart rate time series. Which means they didn't use it to directly create the linear regression formula, but instead used it as basis for the model on which the linear regression is based. So could you perhaps explain what your goal would really be? Probably you don't have to bother with the same data processing if you have access to cleaned up heart rate data, you could simply use the formula you found.
    – Ivo Flipse
    Commented Nov 22, 2012 at 6:56
  • 3
    I posted the question here because I am interested in an algorithm that I can run on my own HR data. The NN is nothing but a black box that gives more or less unverifiable and maybe unstable output after training with a huge dataset. As I don't have access to this training dataset, understanding the NN is not too useful for me. I am more interested in the physiological model + usable algorithm that depends only on a few coefficients. It is easier to understand the limitations of such a model, too.
    – Dan
    Commented Dec 1, 2012 at 22:04

2 Answers 2


I've just started looking into this, being Fitness.SE's most upvoted and unanswered question.

I came across two articles:

  1. Towards VO2 monitoring: Validation of a heart rate based algorithm
  2. Instantaneous VO2 from a wearable device

They both seem to point toward having an actual algorithm rather than a neural network for calculating VO2 from heart-rate. Unfortunately, both are behind paywalls. Fortunately, I think I can get access to the first (IEEE) through my University. I will have to report back at a later time.

Towards VO2 monitoring: Validation of a heart rate based algorithm

In 2005, Firstbeat Technologies proposed a VO2- estimation based on the RR intervals instead of the HR (5). More recent studies continued searching for new improvements (6), but the question on how to accurately estimate the VO2 based on HR while avoiding individual laboratory calibration is still open. In this article, we propose a new algorithm for the estimation of the VO2 during a walking/running training session.

Fitness.SE doesn't support MathJax so this is going to be messy, but, the article goes about calculating VO2 in three not simple steps. First is that it estimates you VO2max through the formula:

VO2max = 56.363 + 1.921*NPAC - 0.831*Age - 0.754*BMI + 10.978*Sex;
where NPAC stands for NASA Physical Activity Class, BMI is in kg/m^2, Sex = 0 if Female, 1 if Male.

The execution starts as soon as the activity classifier detects a walking or running activity. The core algorithm is structured as a state-machine. In each state, an estimate of the normalized oxygen intake pVO2=VO2/VO2max from the normalized heart rate pHR=HR/HRmax is provided. More precisely, at time i, the transformation

pVO2(i) = f_k(pHR(i))

is applied, where f_k is one of two following models. The first one uses the improved formula from Saalasti (2) and a second one (named Accelerating) is a new polynomial regression computed using the training dataset over the periods of increasing HR.

This new algorithm is the one the paper is proposing. The original Saalasti algorithm is based on the neural network. The Saalasti paper in question is referenced below.

In the last step, the VO2 is estimated by multiplying the resulting pVO2 with the subject’s VO2max:

VO2 = pVO2 * VO2max

(2) S. Saalasti, "Neural Networks for Heart Rate Time Series Analysis," 2003.


While I don't have the algorithm, I do have a pretty decent sized library of .sdf files of exercises. From which someone could almost certainly reverse engineer something very close to the energy expenditure model. I have a strong suspicion it is mostly exponential smoothing.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.