Estimate your aerobic capacity using the Uth-Sørensen formula
Measure while seated and relaxed.
Estimated: 220 minus your age.
Estimated VO2 Max
0.0
ml/kg/min
–
Please enter valid positive numbers for both Resting and Maximum Heart Rate.
How to Calculate VO2 Max from Heart Rate
VO2 max is the measurement of the maximum amount of oxygen a person can utilize during intense exercise. It is widely considered the gold standard for measuring cardiovascular fitness. While laboratory tests using gas exchange masks are the most accurate, the Uth-Sørensen-Overgaard-Pedersen formula provides a reliable estimation based on the relationship between resting and maximum heart rate.
The Formula Explained
This calculator uses the following mathematical relationship:
VO2 Max = 15.3 × (Maximum HR / Resting HR)
This formula is based on the ratio between the heart's maximum capacity and its minimum output at rest, scaled by a constant factor of 15.3.
Step-by-Step Calculation Example
If you are 30 years old with a resting heart rate of 60 beats per minute (BPM):
Find Maximum HR: A common estimate is 220 – age. For a 30-year-old, this is 190 BPM.
Divide Max HR by Resting HR: 190 / 60 = 3.16.
Multiply by 15.3: 3.16 × 15.3 = 48.4 ml/kg/min.
VO2 Max Fitness Levels (Averages)
Fitness Level
Men (ml/kg/min)
Women (ml/kg/min)
Poor
< 35
< 30
Fair
35 – 43
31 – 37
Good
44 – 51
38 – 45
Excellent
52+
46+
function calculateVO2() {
var restHR = parseFloat(document.getElementById('restHR').value);
var maxHR = parseFloat(document.getElementById('maxHR').value);
var resultBox = document.getElementById('vo2-result-box');
var errorBox = document.getElementById('error-message');
var vo2ValueDisplay = document.getElementById('vo2-value');
var vo2CategoryDisplay = document.getElementById('vo2-category');
if (isNaN(restHR) || isNaN(maxHR) || restHR <= 0 || maxHR = maxHR) {
resultBox.style.display = 'none';
errorBox.style.display = 'block';
return;
}
errorBox.style.display = 'none';
// Formula: VO2max = 15.3 * (HRmax / HRrest)
var vo2Max = 15.3 * (maxHR / restHR);
var roundedVO2 = vo2Max.toFixed(1);
vo2ValueDisplay.innerHTML = roundedVO2;
resultBox.style.display = 'block';
// Determine Category (General Average)
var category = "";
var color = "";
var bgColor = "";
if (vo2Max < 35) {
category = "Sedentary / Poor";
color = "#ffffff";
bgColor = "#e74c3c";
} else if (vo2Max < 44) {
category = "Fair";
color = "#333";
bgColor = "#f1c40f";
} else if (vo2Max < 52) {
category = "Good";
color = "#ffffff";
bgColor = "#3498db";
} else {
category = "Excellent / Athlete";
color = "#ffffff";
bgColor = "#27ae60";
}
vo2CategoryDisplay.innerHTML = category;
vo2CategoryDisplay.style.color = color;
vo2CategoryDisplay.style.backgroundColor = bgColor;
}