RPE stands for Rating of Perceived Exertion. It is a psychophysiological scale used to measure the intensity of your exercise based on how hard you feel your body is working. While heart rate monitors are precise, RPE allows athletes to listen to their bodies and adjust intensity based on fatigue, stress, and environmental factors.
The Borg Scale vs. Modified Scale
There are two primary versions of the RPE scale:
The Borg Scale (6-20): Developed by Gunnar Borg, this scale was designed to correlate roughly with a person's heart rate. Multiplying the Borg score by 10 often gives a rough estimate of the actual heart rate (e.g., an RPE of 13 is roughly 130 BPM).
The Modified Borg Scale (1-10): A simplified version often used in modern gym settings. It ranges from 1 (very light activity) to 10 (maximum effort/sprint).
How This Calculator Works
This calculator uses the Karvonen Formula combined with intensity mapping to estimate your heart rate based on your perceived exertion. If you use the 6-20 scale, it calculates the percentage of your Heart Rate Reserve (HRR) required to reach that intensity level. If you don't provide a resting heart rate, it defaults to a standard age-based maximum heart rate (220 – age).
Practical Example
If you are 30 years old with a resting heart rate of 60 BPM and you feel you are working at an RPE of 15 (Hard) on the Borg scale:
Max Heart Rate = 220 – 30 = 190 BPM.
Heart Rate Reserve (HRR) = 190 – 60 = 130.
An RPE of 15 correlates to roughly 75-80% intensity.
Target HR = (130 * 0.75) + 60 = 157.5 BPM.
Borg (6-20)
Modified (1-10)
Intensity Level
6-8
1-2
Very Light
9-11
3
Light
12-14
4-6
Moderate
15-16
7-8
Hard / Vigorous
17-19
9
Very Hard
20
10
Max Effort
function updateRpeRange() {
var scale = document.getElementById("rpe_scale_type").value;
var rpeInput = document.getElementById("rpe_value");
if (scale === "borg") {
rpeInput.min = 6;
rpeInput.max = 20;
rpeInput.placeholder = "e.g. 13";
} else {
rpeInput.min = 1;
rpeInput.max = 10;
rpeInput.placeholder = "e.g. 7";
}
}
function calculateRPEHeartRate() {
var scale = document.getElementById("rpe_scale_type").value;
var rpe = parseFloat(document.getElementById("rpe_value").value);
var age = parseFloat(document.getElementById("user_age").value);
var restingHR = parseFloat(document.getElementById("resting_hr").value) || 70;
if (isNaN(rpe) || isNaN(age)) {
alert("Please enter both RPE and Age.");
return;
}
var maxHR = 220 – age;
var hrr = maxHR – restingHR;
var intensityPct = 0;
var zone = "";
var desc = "";
if (scale === "borg") {
// Mapping Borg 6-20 to % of HRR
// 6 = 20%, 20 = 100%
intensityPct = (rpe – 6) / (20 – 6);
if (rpe < 9) { zone = "Very Light"; desc = "Minimal effort, easy breathing."; }
else if (rpe < 12) { zone = "Light"; desc = "Warm up or recovery pace."; }
else if (rpe < 15) { zone = "Moderate"; desc = "Sustainable aerobic exercise, slightly out of breath."; }
else if (rpe < 17) { zone = "Hard"; desc = "Vigorous activity, difficult to hold a conversation."; }
else if (rpe < 20) { zone = "Very Hard"; desc = "Near maximum capacity, heavy breathing."; }
else { zone = "Maximum Effort"; desc = "Absolute limit, cannot be sustained."; }
} else {
// Mapping Modified 1-10 to % of HRR
intensityPct = rpe / 10;
if (rpe < 3) { zone = "Very Light"; desc = "Active recovery or casual walking."; }
else if (rpe < 4) { zone = "Light"; desc = "Steady pace, comfortable."; }
else if (rpe < 7) { zone = "Moderate"; desc = "Working hard, but controlled."; }
else if (rpe (targetHR + 15)) {
// If calculation is way off Borg's original linear model, blend them
targetHR = (targetHR + (rpe * 10)) / 2;
}
document.getElementById("est_hr").innerText = Math.round(targetHR);
document.getElementById("intensity_zone").innerText = zone;
document.getElementById("intensity_desc").innerText = desc;
document.getElementById("rpe_result_box").style.display = "block";
}