Best measured in the morning before getting out of bed.
If blank, we calculate using 220 – Age.
Estimated VO2 Max:—
Fitness Category:—
Heart Rate Ratio (MHR/RHR):—
Used Max Heart Rate:— bpm
Estimate Your Cardiovascular Fitness
This VO2 Max Heart Rate Calculator provides a simple, non-invasive way to estimate your maximal oxygen uptake (VO2 max) using the Uth-Sørensen-Overgaard-Pedersen method. This method relies on the ratio between your maximum heart rate and your resting heart rate to determine aerobic capacity.
While laboratory testing with gas analysis remains the gold standard, this heart rate-based estimation offers a convenient benchmark for athletes and fitness enthusiasts to track improvements in cardiovascular health over time.
How to Get Accurate Input Data
The accuracy of your result depends entirely on the accuracy of your heart rate measurements:
Resting Heart Rate (RHR): Measure this immediately after waking up in the morning, while still in bed. Count your pulse for 60 seconds. A lower RHR generally indicates better cardiovascular fitness.
Maximum Heart Rate (MHR): If you have performed a max effort stress test under supervision, use that number. Otherwise, this calculator estimates it using the standard formula (220 − Age), which provides a reasonable baseline for the general population.
Interpreting Your VO2 Max Score
VO2 max is measured in milliliters of oxygen used per kilogram of body weight per minute (ml/kg/min). It is widely considered the best indicator of cardiovascular fitness and aerobic endurance. Higher values indicate that your body can deliver and utilize more oxygen during intense exercise.
Fitness Level Standards
Your result is categorized based on general population norms stratified by age and gender. Typical ranges include:
Superior: Top 5% of the population. usually elite athletes.
Excellent: High level of fitness, regular endurance training.
Good: Above average fitness, active lifestyle.
Average: Typical for the age group.
Poor/Fair: Below average, indicating a sedentary lifestyle or potential health concerns.
Improving Your VO2 Max
You can improve your VO2 max through regular aerobic exercise. High-Intensity Interval Training (HIIT) is particularly effective. By pushing your heart rate near its maximum for short bursts followed by recovery, you train your heart to pump more blood per beat (stroke volume) and your muscles to extract oxygen more efficiently.
As your fitness improves, your resting heart rate will typically decrease, which increases the ratio calculated by this tool, resulting in a higher estimated VO2 max score.
function calculateVo2Max() {
// Get input values
var ageInput = document.getElementById('age');
var genderSelect = document.getElementById('gender');
var rhrInput = document.getElementById('restingHr');
var maxHrInput = document.getElementById('maxHr');
var resultSection = document.getElementById('results');
// Parse values
var age = parseFloat(ageInput.value);
var gender = genderSelect.value;
var rhr = parseFloat(rhrInput.value);
var maxHr = parseFloat(maxHrInput.value);
// Validation
if (isNaN(age) || age <= 0) {
alert("Please enter a valid age.");
return;
}
if (isNaN(rhr) || rhr <= 0) {
alert("Please enter a valid resting heart rate.");
return;
}
// Calculate Max HR if not provided
var calculatedMaxHr = maxHr;
if (isNaN(maxHr) || maxHr = calculatedMaxHr) {
alert("Resting Heart Rate cannot be higher than or equal to Maximum Heart Rate. Please check your inputs.");
return;
}
// Calculation: Uth-Sørensen-Overgaard-Pedersen estimation
// VO2max = 15.3 * (MHR / RHR)
var ratio = calculatedMaxHr / rhr;
var vo2Max = 15.3 * ratio;
// Determine Rating
var rating = getFitnessRating(vo2Max, age, gender);
var ratingColor = getRatingColor(rating);
// Display Results
document.getElementById('vo2Result').innerHTML = vo2Max.toFixed(1) + ' ml/kg/min';
var fitnessLevelEl = document.getElementById('fitnessLevel');
fitnessLevelEl.innerText = rating;
fitnessLevelEl.style.color = "white";
fitnessLevelEl.style.backgroundColor = ratingColor;
fitnessLevelEl.style.padding = "5px 10px";
fitnessLevelEl.style.borderRadius = "4px";
document.getElementById('hrRatio').innerText = ratio.toFixed(2);
document.getElementById('usedMaxHr').innerText = Math.round(calculatedMaxHr) + " bpm";
resultSection.style.display = "block";
}
function getRatingColor(rating) {
switch(rating) {
case "Superior": return "#2f9e44"; // Dark Green
case "Excellent": return "#40c057"; // Green
case "Good": return "#82c91e"; // Light Green
case "Average": return "#fcc419"; // Yellow
case "Fair": return "#ff922b"; // Orange
case "Poor": return "#fa5252"; // Red
default: return "#868e96";
}
}
function getFitnessRating(vo2, age, gender) {
// Simplified Cooper Institute norms
if (gender === 'male') {
if (age = 55.4) return "Superior";
if (vo2 >= 51.1) return "Excellent";
if (vo2 >= 45.4) return "Good";
if (vo2 >= 41.7) return "Average";
if (vo2 >= 35) return "Fair";
return "Poor";
} else if (age = 54) return "Superior";
if (vo2 >= 48.3) return "Excellent";
if (vo2 >= 41) return "Good";
if (vo2 >= 35) return "Average";
if (vo2 >= 30) return "Fair";
return "Poor";
} else if (age = 52.5) return "Superior";
if (vo2 >= 46.4) return "Excellent";
if (vo2 >= 38.4) return "Good";
if (vo2 >= 33) return "Average";
if (vo2 >= 27) return "Fair";
return "Poor";
} else if (age = 48.9) return "Superior";
if (vo2 >= 43.4) return "Excellent";
if (vo2 >= 35.6) return "Good";
if (vo2 >= 30) return "Average";
if (vo2 >= 24) return "Fair";
return "Poor";
} else { // 60+
if (vo2 >= 45.7) return "Superior";
if (vo2 >= 39.5) return "Excellent";
if (vo2 >= 32.3) return "Good";
if (vo2 >= 26) return "Average";
if (vo2 >= 20) return "Fair";
return "Poor";
}
} else { // Female
if (age = 49.6) return "Superior";
if (vo2 >= 43.9) return "Excellent";
if (vo2 >= 39) return "Good";
if (vo2 >= 34) return "Average";
if (vo2 >= 28) return "Fair";
return "Poor";
} else if (age = 47.4) return "Superior";
if (vo2 >= 42.4) return "Excellent";
if (vo2 >= 36) return "Good";
if (vo2 >= 31) return "Average";
if (vo2 >= 26) return "Fair";
return "Poor";
} else if (age = 45.3) return "Superior";
if (vo2 >= 39.7) return "Excellent";
if (vo2 >= 33) return "Good";
if (vo2 >= 28) return "Average";
if (vo2 >= 23) return "Fair";
return "Poor";
} else if (age = 41.1) return "Superior";
if (vo2 >= 36.7) return "Excellent";
if (vo2 >= 30) return "Good";
if (vo2 >= 25) return "Average";
if (vo2 >= 20) return "Fair";
return "Poor";
} else { // 60+
if (vo2 >= 37.8) return "Superior";
if (vo2 >= 33) return "Excellent";
if (vo2 >= 27) return "Good";
if (vo2 >= 23) return "Average";
if (vo2 >= 18) return "Fair";
return "Poor";
}
}
}