Each measurement is computed on-device. We show what it means, how RytmoECG
computes it, the reference paper, and where it can fail. The same content
lives inside the app on the Methodology page.
Atrial fibrillation (CoreML)
F1 0.81
A CNN-BiLSTM with attention pooling trained on PhysioNet CinC 2017.
Runs on-device every fifteen seconds, ensembled with the rules-based
irregular detector.
How. Thirty-second window normalised, fed through the model. Threshold from model metadata (`optimal_threshold`); we display a five-state pill: dormant, learning, sinus, watching, AF likely.
Limits. CinC 2017 holdout F1 of 0.81 is good for single-lead; field validation across users is ongoing. RytmoECG never says "you have atrial fibrillation"; it says "rhythm consistent with AF, show a clinician".
Reference. PhysioNet / CinC Challenge 2017; Clifford et al., Computing in Cardiology 2017.
Heart Rate Turbulence + DC / AC
Lancet 2006 / 1999
Two cardiac autonomic biomarkers that sit between consumer fitness
metrics and clinical risk stratification.
How. Phase-Rectified Signal Averaging (Bauer 2006) computes deceleration and acceleration capacity per their original weighting. HRT (Schmidt 1999) averages the RR pattern around each confirmed PVC for turbulence onset and slope.
Limits. DC / AC need 400+ beats. HRT needs five or more clean PVCs in the session.
Reference. Bauer et al., Lancet 2006; Schmidt et al., Lancet 1999.
QT / QTc with tangent method
Circulation 1952
Per-beat QT measured via the tangent-of-the-T-wave-descending-limb
method, plus a +40 ms QRS-onset offset, plus a SQI gate.
How. T-peak located in 150-400 ms after R; tangent extrapolated to baseline. QT = (T-end - R-peak) + 40 ms. Reported as the running median over the last 200 beats, both Bazett and Fridericia.
Limits. Single-lead 130 Hz makes the T-wave noisy. We treat QTc as a trend marker, not a clinical QTc. Beats below SQI 0.70 excluded.
Reference. Lepeschkin & Surawicz, Circulation 1952; Fridericia, Acta Med Scand 1920.
Every other algorithm that ships in the app. Same depth on the
Methodology page inside; this is the index.
How. Rolling mean of 60 / RR over the last sixty beats; min and max gated by a five-beat warmup.
Reference. LITFL ECG rate interpretation.
HRV; RMSSD, SDNN, pNN50, pNN200
ms / %
How. Task Force 1996 standard on PVC-rejected, SQI-filtered RR series. RMSSD = root mean square of successive RR differences; SDNN = std of all NN; pNN50 / pNN200 = share of successive differences > 50 / 200 ms.
Reference. Task Force ESC / NASPE, Circulation 1996; Shaffer & Ginsberg PMC5624990.
How. Per beat, Q-onset is located by back-search from R-peak; S-end by forward-search; both stop when the signal returns within a 50 uV band of the baseline. Width = ( S-end - Q-onset ) / sampleRate. Rolling median over the SQI-filtered series.
Limits. Single lead at 130 Hz; we use baseline-return rather than slope-onset because the latter is noise-sensitive at this rate.
How. Voltage 20 ms after S-end, baseline-subtracted, converted to microvolts. Session mean over the SQI-filtered beats.
Limits. A wellness proxy for ST-segment level; not a diagnostic ST measurement on a single lead.
How. For each beat, classify the largest T-extremum ( 150-400 ms after R-peak ) as positive or inverted relative to baseline. meanTPositive = % of positive T-waves over the session.
Spectral 2-8 Hz energy ( meanHF )
%
How. Real-input FFT via Accelerate vDSP on a power-of-two slice of the 30 s ECG ring buffer; Hann window applied to reduce leakage. The metric is the ratio of in-band power to total power, refreshed every five seconds.
Limits. Non-specific; reflects rapid fluctuations of any origin ( sharp QRS energy, motion, noise ). Useful to compare conditions on the same subject; not clinical.
Signal amplitude ( meanSystole )
uV
How. Exponential moving average of mean |sample| in microvolts. A simple "is the strap making good contact today?" marker.
How. Scatter of ( RR_n , RR_n+1 ); SD1 = std perpendicular to identity, SD2 = std parallel. Rendered live.
HR exertion ( HR span )
bpm
How. Smoothed instantaneous HR series ( window of five beats ), max minus min. Descriptive, requires no user input.
HREI ( TRIMP-Banister )
load
How. HR reserve = ( avgHR - restHR ) / ( maxHR - restHR ), clamped to [0, 1]. HREI = duration_minutes x HR_reserve x sex_factor ( 1.92 male, 1.67 female ). Settings live under Personal in Settings; no entry required for the metric to still surface a generic value.
Reference. Banister, E.W. Modeling Elite Athletic Performance, 1991.
How. Drop from peak HR to lowest HR in the sixty seconds that follow the peak. Standard fitness signal for vagal reactivation.
Reference. Cole et al., NEJM 1999.
How. Default-to-trust; score starts at 1.0, only deducts for clear-cut problems ( implausible amplitude, baseline drift, off-physiology RR ). Rolling mean of last thirty beats shown as the Signal pill.
Movement gate
three states
How. Three-second std-dev of accelerometer magnitude. Thresholds: standstill < 0.04 g, light < 0.15 g, moving ≥ 0.15 g.
HRV frequency-domain (LF / HF / VLF)
ms² / ratio
How. RR-series resampled to 4 Hz with linear interpolation, Hann-windowed, real-input FFT via Accelerate vDSP. Power integrated per Task Force 1996 bands: VLF 0.0033-0.04 Hz, LF 0.04-0.15 Hz, HF 0.15-0.40 Hz. LF/HF ratio published as the autonomic-balance metric.
Reference. Task Force ESC / NASPE, Circulation 1996.
Breathing rate from RSA
/min
How. Free byproduct of the HRV spectrum: the dominant frequency inside the HF band corresponds to respiratory sinus arrhythmia. Multiply by sixty for breaths per minute. Typical 10-20 /min at rest.
DFA alpha1 / alpha2
scaling exponent
How. Detrended Fluctuation Analysis on the integrated mean-removed RR series. Linear fit slope of log(fluctuation) vs log(box size) for short scales (4-16 beats, alpha1) and long scales (16-64 beats, alpha2). The endurance community uses alpha1 = 0.75 as a heuristic for the first lactate threshold.
Reference. Peng et al., Chaos 1995; Rogero, Gronwald et al. 2020.
Sample Entropy + ApEn
nats
How. Non-linear complexity of the RR series. SampEn = -ln(matches at m+1 / matches at m), m=2, r=0.2 x SD. ApEn computed similarly. Lower values mean more regular rhythm; high entropy is associated with healthy variability.
Reference. Richman & Moorman, AJP-Heart 2000; Pincus, PNAS 1991.
How. Linear regression of smoothed instantaneous HR over the session. Reported as drift rate plus R^2 so you know how steady the workload actually was. Smaller drift at sustained effort = better aerobic fitness.
Stress & Readiness scores
0..100
How. Both computed from a 30-day baseline of your own sessions, never anyone else's. Stress = mean of three normalised inputs (RMSSD drop, resting HR rise, LF/HF rise). Readiness = RMSSD lift (60 %) + resting HR low (40 %). Every input is shown next to the score; no black box.
Sleep HRV cross-section
via HealthKit
How. Pulls sleep windows from HealthKit, buckets each RytmoECG session as "night" or "day", and reports the median RMSSD and HR per bucket. Healthy autonomic recovery shows higher RMSSD overnight than during day; we make the gap visible.
Pre / post workout HRV
Δ RMSSD
How. For each HealthKit workout, locate the nearest RytmoECG session within 8 h before and 12 h after. Report the delta RMSSD so you can see whether the bout left your vagal tone elevated, depressed, or unchanged.
How. GitHub-style 53 x 7 cell grid; each cell is one day, colour-coded by your chosen metric (RMSSD, mean HR, or session count). A year of recording visible without scrolling. Tap to switch metric.
HR zones (Z1-Z5)
% maxHR · time in zone
How. Five-zone breakdown by percent of personal maxHR (set in Settings). Each beat contributes its RR interval to the matching zone; per-session bars show time and percent for each. Standard endurance-coaching layout.
CSV export
research format
How. Every session can be exported as plain CSV: time_seconds, rr_seconds, hr_bpm, sqi per beat, plus a header comment block with sample rate, device, and timestamp. Drop straight into Python / R / MATLAB.
Advanced Analysis per event
verdict
How. Re-runs every detector against a single thirty-to-sixty-second strip in isolation; lists all parameters with flag colours. Verdict: likely arrhythmia, ambiguous, likely normal, or poor signal.