How to Calculate Your Threshold Heart Rate

Threshold Heart Rate & Training Zone Calculator

How to get your data:

To find your Lactate Threshold Heart Rate (LTHR), perform a 30-minute solo time trial at your maximal sustainable effort. Record your average heart rate for the final 20 minutes only. This average is your LTHR.

Your LTHR Training Zones

Zone Intensity HR Range (BPM)
*Calculations based on Joe Friel's Training Bible methodology.

Understanding Your Threshold Heart Rate (LTHR)

Your Lactate Threshold Heart Rate (LTHR) is arguably the most important metric for endurance athletes. Unlike Maximum Heart Rate, which is largely determined by genetics and age, LTHR represents the specific physiological point where your body can no longer clear lactic acid as quickly as it is produced.

Why Calculate LTHR Instead of Max HR?

Traditional formulas like "220 minus age" are often inaccurate for trained athletes. LTHR is a "functional" number—it reflects your actual fitness level and the metabolic reality of your muscles. Training based on LTHR zones ensures that your "easy" runs are truly aerobic and your "hard" intervals are hitting the correct metabolic systems.

The 30-Minute Time Trial Protocol

To calculate your threshold heart rate accurately without a lab, follow the Joe Friel protocol:

  1. Warm Up: 15 minutes of easy spinning or running, including a few 30-second builds.
  2. The Test: Perform a 30-minute time trial at your maximum consistent effort (as if you were racing). You should be exhausted by the end.
  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 final 20 minutes of that test is your LTHR.

How to Use Your Training Zones

  • Zone 1 (Recovery): Used for warm-ups, cool-downs, and active recovery days.
  • Zone 2 (Aerobic/Endurance): The "all-day" pace. This builds mitochondrial density and fat-burning efficiency.
  • Zone 3 (Tempo): A moderate effort that requires focus; typical for long intervals.
  • Zone 4 (Sub-Threshold): Just below your LTHR. This is where you increase your "speed at threshold."
  • Zone 5 (Super-Threshold/VO2 Max): Short, high-intensity intervals that improve top-end power and oxygen capacity.
function calculateLTHRZones() { var lthr = parseFloat(document.getElementById('lthrInput').value); var resultsArea = document.getElementById('resultsArea'); var tableBody = document.getElementById('zoneTableBody'); if (isNaN(lthr) || lthr <= 0) { alert("Please enter a valid heart rate (BPM)."); return; } // Calculation logic based on Joe Friel's Intensity Zones var zones = [ { name: "Zone 1", label: "Recovery", min: 0, max: 0.81 }, { name: "Zone 2", label: "Aerobic", min: 0.81, max: 0.89 }, { name: "Zone 3", label: "Tempo", min: 0.90, max: 0.93 }, { name: "Zone 4", label: "Sub-Threshold", min: 0.94, max: 0.99 }, { name: "Zone 5a", label: "Super-Threshold", min: 1.00, max: 1.02 }, { name: "Zone 5b", label: "Aerobic Capacity", min: 1.03, max: 1.06 }, { name: "Zone 5c", label: "Anaerobic Capacity", min: 1.07, max: 1.15 } ]; var html = ""; for (var i = 0; i < zones.length; i++) { var z = zones[i]; var lowBpm = Math.round(lthr * z.min); var highBpm = Math.round(lthr * z.max); // Adjust display for Zone 1 which has no floor in this context var displayRange = (i === 0) ? "Under " + highBpm : lowBpm + " – " + highBpm; if (i === zones.length – 1) displayRange = "Over " + lowBpm; var rowBg = (i % 2 === 0) ? "#ffffff" : "#f9f9f9"; html += ""; html += "" + z.name + ""; html += "" + z.label + ""; html += "" + displayRange + " BPM"; html += ""; } tableBody.innerHTML = html; resultsArea.style.display = "block"; resultsArea.scrollIntoView({ behavior: 'smooth' }); }

Leave a Comment