Time Interval Method (R-R in seconds)
Small Square Method (Count)
Big Square Method (Count)
Measure the time between two adjacent R waves.
Standard exam questions use 25 mm/s. Sometimes 50 mm/s.
Calculated Heart Rate
— BPM
How to Calculate Heart Rate from ECG (A Level Biology)
In A-Level Biology, analyzing Electrocardiogram (ECG) traces is a fundamental skill. One of the most common exam questions involves calculating the heart rate (in beats per minute, or BPM) based on a provided ECG strip. This guide breaks down the three primary methods used in standard biology curriculums (AQA, OCR, Edexcel).
Understanding the Basics
Before calculating, you must identify the R-R Interval. This is the distance (or time) between the peak of one QRS complex (the R wave) and the peak of the very next one. This interval represents one complete cardiac cycle.
Heart Rate (BPM) = 60 / Time of one cardiac cycle (s)
Method 1: The Time Interval Method
If the exam question gives you the time scale on the x-axis, simply measure the time in seconds between two R waves.
Identify two adjacent R waves.
Read the time difference on the x-axis (e.g., 0.8 seconds).
Divide 60 by this time.
Example: If the R-R interval is 0.75 seconds: Heart Rate = 60 / 0.75 = 80 BPM
Method 2: Counting Squares (Standard Paper Speed)
Most ECG paper runs at a standard speed of 25 mm/s. At this speed:
1 Small Square (1mm) = 0.04 seconds
1 Big Square (5mm) = 0.20 seconds
Using Small Squares
Count the number of small squares between two R waves. Use the constant 1500.
Heart Rate = 1500 / Number of Small Squares
Derivation: 25 mm/s * 60 seconds = 1500 mm (small squares) per minute.
Using Big Squares
Count the number of big squares (5mm boxes) between two R waves. Use the constant 300.
Heart Rate = 300 / Number of Big Squares
Derivation: 300 big squares pass through the machine in one minute (1500 / 5 = 300).
Important: Check the Paper Speed
Always check the axis label or question text for the paper speed. While 25 mm/s is standard, advanced questions may use 50 mm/s to test your understanding. If the speed is 50 mm/s, the standard "300" and "1500" constants double to "600" and "3000" respectively.
Summary of Formulas
Time known: BPM = 60 / T
Small squares (at 25mm/s): BPM = 1500 / N
Big squares (at 25mm/s): BPM = 300 / N
function updateLabels() {
var method = document.getElementById('calcMethod').value;
var label = document.getElementById('inputLabel');
var helper = document.getElementById('helperText');
var input = document.getElementById('inputValue');
if (method === 'time') {
label.innerText = "R-R Interval Duration (seconds)";
helper.innerText = "Measure the time in seconds for one complete cycle.";
input.placeholder = "e.g. 0.8";
} else if (method === 'small_squares') {
label.innerText = "Number of Small Squares (1mm)";
helper.innerText = "Count the tiny 1mm squares between two R waves.";
input.placeholder = "e.g. 20";
} else if (method === 'big_squares') {
label.innerText = "Number of Big Squares (5mm)";
helper.innerText = "Count the large 5mm squares between two R waves.";
input.placeholder = "e.g. 4";
}
// Clear result when method changes
document.getElementById('resultBox').style.display = 'none';
}
function calculateHeartRate() {
var method = document.getElementById('calcMethod').value;
var inputValue = parseFloat(document.getElementById('inputValue').value);
var paperSpeed = parseFloat(document.getElementById('paperSpeed').value);
var bpm = 0;
var explanation = "";
// Validation
if (isNaN(inputValue) || inputValue <= 0) {
alert("Please enter a valid positive number for the interval or square count.");
return;
}
if (isNaN(paperSpeed) || paperSpeed <= 0) {
alert("Please enter a valid paper speed.");
return;
}
// Logic
if (method === 'time') {
// Formula: BPM = 60 / time
bpm = 60 / inputValue;
explanation = "Calculation: 60 seconds / " + inputValue + " seconds = " + bpm.toFixed(1);
} else if (method === 'small_squares') {
// Total mm per minute = paperSpeed * 60
// BPM = Total mm per minute / squares count (since 1 sq = 1mm)
var constant = paperSpeed * 60;
bpm = constant / inputValue;
explanation = "Calculation: (" + paperSpeed + " mm/s × 60s) / " + inputValue + " squares = " + constant + " / " + inputValue;
} else if (method === 'big_squares') {
// Total mm per minute = paperSpeed * 60
// 1 big square = 5mm.
// BPM = Total mm per minute / (squares count * 5)
var constant = (paperSpeed * 60) / 5;
bpm = constant / inputValue;
explanation = "Calculation: ((" + paperSpeed + " mm/s × 60s) / 5mm) / " + inputValue + " squares = " + constant + " / " + inputValue;
}
// Display Result
var resultBox = document.getElementById('resultBox');
var bpmDisplay = document.getElementById('bpmResult');
var stepsDisplay = document.getElementById('calculationSteps');
resultBox.style.display = 'block';
bpmDisplay.innerHTML = Math.round(bpm) + " BPM";
stepsDisplay.innerHTML = explanation + "Raw Value: " + bpm.toFixed(2);
}