How to Calculate Heart Rate Threshold

Lactate Threshold Heart Rate (LTHR) Calculator

Determine your training zones based on your performance threshold

Enter the average heart rate from the last 20 minutes of a 30-minute all-out effort.

Your Custom Training Zones

Zone Description Range (BPM)

Understanding Your Heart Rate Threshold

Calculating your Lactate Threshold Heart Rate (LTHR) is one of the most effective ways to personalize your endurance training. Unlike the generic "220 minus age" formula, LTHR reflects your actual metabolic fitness and defines the point at which your body can no longer clear lactic acid as fast as it is produced.

How to Perform the LTHR Test

To use this calculator effectively, you need to perform a field test. The most common protocol is the Joe Friel 30-Minute Time Trial:

  1. Warm-up: 10-15 minutes of easy jogging/cycling.
  2. The Test: Run or cycle at your maximum sustainable pace for 30 minutes. This should be an all-out effort.
  3. The Data: 10 minutes into the test, hit the "Lap" button on your heart rate monitor.
  4. The Result: Your average heart rate for the last 20 minutes of the test is your estimated LTHR.

Training Zone Breakdown

Once you have your threshold, you can divide your training into specific intensity levels:

  • Zone 1 (Recovery): Used for active recovery days to flush out waste products without adding fatigue.
  • Zone 2 (Aerobic): The "all-day" pace. Essential for building mitochondrial density and burning fat as fuel.
  • Zone 3 (Tempo): A "comfortably hard" pace. Improves aerobic power.
  • Zone 4 (Sub-Threshold): Just below your threshold. This is where you build the "engine" to sustain speed.
  • Zone 5 (Anaerobic): High-intensity intervals that improve your maximum oxygen consumption (VO2 Max).

Practical Example

If an athlete performs the 30-minute test and their average heart rate for the final 20 minutes is 170 BPM, their LTHR is 170. Their zones would be calculated as follows:

  • Zone 2 (81-89%): 138 – 151 BPM
  • Zone 4 (94-99%): 160 – 168 BPM
  • Zone 5a (100-102%): 170 – 173 BPM
function calculateLTHRZones() { var lthr = parseFloat(document.getElementById('lthrInput').value); var resultsDiv = document.getElementById('hrResults'); var tableBody = document.getElementById('zoneTableBody'); if (isNaN(lthr) || lthr <= 0) { alert("Please enter a valid Average Heart Rate (BPM)."); return; } // Logic based on Joe Friel's Running Zones (percentages of LTHR) var zones = [ { name: "Zone 1", desc: "Recovery", min: 0, max: 0.81, color: "#95a5a6" }, { name: "Zone 2", desc: "Aerobic / Base", min: 0.81, max: 0.89, color: "#2ecc71" }, { name: "Zone 3", desc: "Tempo", min: 0.90, max: 0.93, color: "#f1c40f" }, { name: "Zone 4", desc: "Sub-Threshold", min: 0.94, max: 0.99, color: "#e67e22" }, { name: "Zone 5a", desc: "Super-Threshold", min: 1.00, max: 1.02, color: "#e74c3c" }, { name: "Zone 5b", desc: "Aerobic Capacity", min: 1.03, max: 1.06, color: "#c0392b" }, { name: "Zone 5c", desc: "Anaerobic Capacity", min: 1.06, max: 1.15, color: "#8e44ad" } ]; var html = ""; for (var i = 0; i < zones.length; i++) { var lowRange = Math.round(lthr * zones[i].min); var highRange = Math.round(lthr * zones[i].max); // Special display for high-end zones var rangeText = ""; if (i === 0) { rangeText = "Below " + highRange; } else if (i === zones.length – 1) { rangeText = "Above " + lowRange; } else { rangeText = lowRange + " – " + highRange; } html += ""; html += "" + zones[i].name + ""; html += "" + zones[i].desc + ""; html += "" + rangeText + " BPM"; html += ""; } tableBody.innerHTML = html; resultsDiv.style.display = "block"; resultsDiv.scrollIntoView({ behavior: 'smooth' }); }

Leave a Comment