🏃 Recovery Readiness Score (HRV-Based) Simulator
This simulator calculates a recovery readiness score based on heart rate variability (HRV), providing users with insights into their physiological state and helping them determine when they are ready to engage in physical activity without risking overtraining.
Nightly HRV Capture — From PPG Pulse to RMSSD
Modern wearables measure heart rate variability passively overnight using photoplethysmography (PPG) — an optical sensor that shines light into the skin and measures reflected intensity changes as blood volume pulses with each heartbeat. From this signal, beat-to-beat intervals are extracted and reduced to a single number: RMSSD, the metric that dominates consumer recovery scores.
- 100–256 Hz: PPG sampling rate (wrist/ring optical sensor)
- 3–5 min: HRV capture window (or full-night average)
- RMSSD: Primary metric (root mean square of successive diffs)
- 20–100+ ms: Healthy adult range (huge individual variation)
Photoplethysmography and beat-interval extraction
A PPG sensor illuminates the skin (usually green or infrared LEDs) and measures how much light is absorbed by pulsing blood in the capillary bed. Each cardiac cycle produces a distinct waveform peak; the time between successive peaks approximates the R-R interval measured by an ECG. During sleep — when motion artifact is minimal and posture is stable — this signal is unusually clean, which is why nightly HRV (rather than daytime spot-checks) has become the standard capture window for consumer recovery scores.
Raw peak-to-peak intervals are cleaned before analysis: ectopic beats, sensor dropouts, and motion artifacts are detected as intervals that deviate implausibly from their neighbors and are either interpolated or excluded. The cleaned interval series — typically drawn from a stable 3–5 minute segment of slow-wave sleep, or averaged across the whole night — becomes the input to the HRV calculation.
RMSSD — the metric of choice for nightly HRV
RMSSD (root mean square of successive differences) is calculated directly from consecutive R-R intervals:
RMSSD = √( mean[ (RRₙ₊₁ − RRₙ)² ] )
For each pair of adjacent beats, the difference is squared, all squared differences are averaged, and the square root is taken — producing a value in milliseconds that grows larger as beat-to-beat timing becomes more variable.
RMSSD is favored over SDNN (the standard deviation of all N-N intervals) in short, nightly recordings for two practical reasons: it is relatively insensitive to slow trends and breathing-rate artifacts because it only looks at adjacent-beat differences rather than the spread of the whole series, and it remains statistically stable over much shorter recording windows — a few minutes is often sufficient, whereas SDNN ideally wants very long or full 24-hour recordings to be reliable.
RMSSD reflects predominantly parasympathetic (vagal) activity. This has been validated experimentally by pharmacological blockade studies: administering atropine, which blocks vagal (acetylcholine) signaling to the heart, collapses RMSSD and high-frequency HRV power by roughly 80–90%, while sympathetic (beta-adrenergic) blockade has comparatively little effect on it.
Parasympathetic vs Sympathetic — Reading the Balance
The heart is dually innervated by two branches of the autonomic nervous system pulling in opposite directions. The vagus nerve (parasympathetic) slows and varies heart rate; the sympathetic chain speeds it up and stiffens its rhythm. HRV is, at its core, a readout of which branch currently has the upper hand.
- <1 sec: Vagal response latency (fast acetylcholine signaling)
- ~5 sec: Sympathetic response latency (slower norepinephrine pathway)
- 0.15–0.4 Hz: RSA frequency band (high-frequency HRV component)
- ~80–90%: Atropine blockade effect (reduction in HF-HRV power)
Two branches, opposite effects on heart timing
The parasympathetic (vagal) branch releases acetylcholine at the sinoatrial node, acting almost instantaneously (within a single heartbeat) to slow heart rate and — critically — to introduce beat-to-beat variability. A well-recovered, low-stress nervous system shows strong, actively modulated vagal braking: heart rate rises and falls fluidly with breathing, posture, and internal state.
The sympathetic branch releases norepinephrine, acting over several seconds to raise heart rate and metabolic readiness ("fight or flight"). Its slower kinetics make it a blunter instrument — it tends to suppress beat-to-beat variability rather than add nuance to it. When sympathetic drive dominates (psychological stress, heat, alcohol, illness, insufficient recovery from training), the heart rhythm becomes comparatively rigid and RMSSD falls, even if resting heart rate itself has not changed much.
Respiratory sinus arrhythmia — variability with a purpose
Much of night-time HRV is driven by respiratory sinus arrhythmia (RSA): heart rate rises slightly during inhalation and falls during exhalation, a reflex mediated almost entirely by the vagus nerve and centered in the 0.15–0.4 Hz high-frequency band. RSA is not noise — it improves the matching of blood gas exchange to breathing and is a direct, real-time signature of vagal engagement.
A nervous system with abundant parasympathetic reserve shows large, clean RSA oscillations, which is exactly what drives high RMSSD. A stressed or under-recovered nervous system shows blunted RSA — the heart rhythm stops closely tracking the breath, timing intervals become more uniform, and RMSSD drops accordingly.
Because vagal and sympathetic activity act on different timescales and through different neurotransmitters, they can be selectively studied with pharmacological blockade (atropine for vagal, beta-blockers for sympathetic) — this is the classical evidence base establishing RMSSD and high-frequency HRV as predominantly vagal markers, rather than a generic "stress" signal.
Building a Rolling 7–60 Day Personal Baseline
A single RMSSD value is nearly meaningless in isolation. Absolute HRV varies enormously between healthy individuals due to genetics, age, aerobic fitness, and body composition — so every credible readiness algorithm compares today's reading against the same person's own recent history, not against a population chart.
- 7–60 days: Recommended baseline window (trailing rolling average)
- 20–100+ ms: Inter-individual RMSSD range (age, genetics, fitness)
- ~10–25%: Night-to-night noise (CV) (normal fluctuation, no cause for alarm)
- ~7+: Nights before a stable baseline (more nights improve reliability)
Why population norms fail for HRV
Unlike, say, resting heart rate — which clusters fairly predictably by age and fitness — RMSSD has an extremely wide "normal" range across healthy adults, commonly cited as roughly 20 ms to over 100 ms depending on age, genetic factors affecting autonomic reactivity, training history, and even measurement method. A highly-trained endurance athlete in their twenties might have a resting nightly RMSSD in the 90–120 ms range as their normal, healthy baseline, while a healthy but sedentary older adult might sit comfortably at 25–35 ms with no dysfunction at all.
Comparing either person to a fixed population "healthy" threshold is close to meaningless. The athlete's 60 ms night — a huge drop for them — would look unremarkable on a population chart; the older adult's ordinary 28 ms would look alarmingly "low" by the same yardstick. The only valid reference point is the person's own recent trend.
Computing the rolling window
A rolling baseline is typically computed as a trailing mean and standard deviation over the most recent N nights, commonly somewhere between 7 and 60 days depending on the product:
μ = mean(RMSSD₋ₙ … RMSSD₋₁) σ = standard deviation(RMSSD₋ₙ … RMSSD₋₁)
Shorter windows (7–14 days) adapt quickly to real physiological changes — a new training block, altitude travel, a change in sleep schedule — but are noisier and more easily skewed by a single rough week. Longer windows (30–60 days) are statistically more stable and resistant to short-term skew, but adapt more slowly to genuine, lasting shifts in fitness or life circumstances. Many implementations blend the two: a slow-moving long-window baseline for the mean and SD, updated daily, excluding clear outliers (illness, heavy alcohol use) so a single bad night does not permanently drag the baseline down.
Example RMSSD baseline ranges & single-night deviation guidance
| Product | Indication | Trial Design | Key Result |
|---|---|---|---|
| Young trained athlete (20–35, high aerobic fitness) | 70–120 ms typical baseline | −1 SD single night: normal noise, no action | −2 SD or lower: monitor next 2–3 nights |
| Healthy trained adult (35–55, regular exercise) | 40–80 ms typical baseline | −1 SD single night: normal noise, no action | −2 SD or lower: consider lighter session |
| Healthy sedentary adult (any age) | 20–45 ms typical baseline | −1 SD single night: normal noise, no action | −2 SD or lower: watch for illness/stress |
| Older adult (60+, healthy) | 15–35 ms typical baseline | −1 SD single night: normal noise, no action | −2 SD or lower: prioritize rest, hydration |
Today's HRV as a Z-Score Against Baseline
Once a personal baseline mean and standard deviation exist, tonight's RMSSD can be converted into a standardized deviation — a z-score — that says precisely how unusual tonight was for this specific person, independent of their absolute HRV level.
- (x − μ) / σ: Z-score formula (standard deviations from baseline)
- ~16%: Chance of landing below −1 SD (of nights, purely by chance)
- ~2.3%: Chance of landing below −2 SD (of nights, purely by chance)
- often >2 SD: Typical acute-illness HRV drop (infection / inflammatory response)
From absolute milliseconds to relative deviation
Given tonight's RMSSD reading x, personal baseline mean μ, and personal baseline standard deviation σ:
z = (x − μ) / σ
A z-score of 0 means tonight was exactly average for this person. A z-score of −1.5 means tonight was one-and-a-half standard deviations below their personal norm — regardless of whether their absolute numbers run high (a 90 ms night for an athlete whose baseline is 105 ± 10 ms) or low (a 22 ms night for someone whose baseline is 32 ± 7 ms). The same statistical framework applies equally well to both, which is precisely why z-scores (or the closely related percentage-deviation form) are the standard currency of HRV-based readiness algorithms rather than raw RMSSD.
Single-night noise vs. genuine signal
Because nightly RMSSD naturally fluctuates by roughly 10–25% night to night even in a perfectly healthy, well-recovered person, a single low reading is expected to happen often just by chance. Under a roughly normal distribution, about 16% of nights will fall below −1 SD purely from ordinary biological noise — sleep position, room temperature, a late meal, alcohol, minor dehydration, or plain measurement variability, with no meaningful physiological cause at all.
A drop below −2 SD is rarer (only about 2–3% of nights by chance alone) and is more often associated with a real acute event — the onset of illness, unusually intense training, significant psychological stress, or heavy alcohol intake — but even this can occasionally be a false alarm. This is the central statistical reason readiness algorithms are built to look at trends over several nights rather than reacting sharply to any single data point.
Research on HRV-guided training — notably work by exercise physiologists Daniel Plews and Martin Buchheit — has shown in several controlled studies that athletes who adjusted daily training intensity based on their HRV trend achieved fitness gains comparable to, and in some cases superior to, those following a fixed, pre-planned periodization schedule, while typically experiencing fewer signs of non-functional overreaching.
Readiness Score Interpretation and the Yellow-Flag Trend
The final step folds today's deviation and the recent multi-day trajectory into a single actionable readiness score and flag. The core principle: one rough night is noise to be ignored, but a sustained multi-day decline is a real signal of accumulating fatigue that warrants a deliberate reduction in training load.
- Normal noise: Single low-HRV night (no action needed alone)
- 2–3 days below −1 SD: Yellow-flag pattern (monitor, consider easing intensity)
- 4+ day declining trend: Red-flag pattern (reduce load, prioritize recovery)
- Comparable / superior: HRV-guided training outcomes (vs. fixed periodization in RCTs)
From z-score to a readiness score
A practical readiness score blends the standardized deviation with the length of any declining streak, roughly of the form:
readiness = clamp( baseline_offset + k₁ · z − k₂ · trend_days , 0 , 100 )
A strongly negative z-score on its own nudges the score down modestly; a sustained multi-day decline (captured by trend_days) pulls it down much further, because sustained decline is the pattern most associated with real accumulating fatigue rather than one-off noise. The resulting score is then mapped to a simple flag: green (proceed as planned), yellow (monitor closely, consider trimming intensity or volume), or red (deliberately reduce training load and prioritize sleep, nutrition, and stress management).
The yellow-flag concept — trend over noise
The "yellow flag" is the operational heart of HRV-guided training: rather than reacting to any single low reading, the athlete or coach watches for a pattern — typically two to three or more consecutive nights trending below roughly −1 SD from baseline. This pattern is far less likely to be random noise (compounding low-probability events) and far more likely to reflect a real physiological state: incomplete recovery from recent training load, accumulating life stress, poor sleep, or the earliest signs of an incoming illness before other symptoms appear.
The practical response to a yellow flag is proportionate, not drastic: trim the next session's intensity or volume, add an extra recovery day, or double down on sleep and hydration — then reassess. A red flag (a longer or steeper decline) calls for a more decisive reduction in training stress until the trend reverses.
Evidence for HRV-guided training
Several controlled studies have directly tested HRV-guided training against fixed, pre-planned periodization. Kiviniemi et al. (2007) found that endurance athletes who adjusted training based on daily HRV showed greater improvements in aerobic performance than those on a predetermined schedule. Subsequent work summarized and extended by Plews, Buchheit, and colleagues across endurance and team-sport populations has generally found HRV-guided approaches produce fitness gains that are comparable to, and in some protocols better than, fixed periodization — while reducing the incidence of non-functional overreaching and unplanned illness-related training interruptions.
The consistent theme across this research: HRV trends are most useful not as a rigid go/no-go gate on any single day, but as one input among several (perceived fatigue, sleep quality, resting heart rate, training history) that together inform smarter day-to-day training decisions.
The practical takeaway echoed throughout this research: don't panic over one low night — panic (mildly) over a trend. A rolling multi-day view, not a single morning reading, is what should actually change today's training plan.
This simulator calculates a recovery readiness score based on heart rate variability (HRV), providing users with insights into their physiological state and helping them determine when they are ready to engage in physical activity without risking overtraining.
2D · HTML5 Canvas 2D · 60 FPS target · runs fully client-side, no install