"Give me one wrist, no squeeze, and a green light, and I will tell you a systolic number. Whether it means anything is the entire subject of this section."
An Uncalibrated AI Agent
Why this section matters
Hypertension is the single largest modifiable risk factor for death on the planet, and the cuff that measures it has barely changed since the nineteenth century: inflate, occlude, listen, deflate, read one number, forget it until the next visit. A wearable that could read blood pressure continuously and without a squeeze would turn a once-a-year snapshot into a beat-by-beat trajectory, catching the nocturnal dips, the morning surges, and the drug responses that the cuff never sees. This is the most commercially attractive and the most scientifically treacherous target in wearable cardiovascular sensing. The physics that links the pulse waveform to arterial pressure is real, but it is confounded, drifting, and person-specific in ways that make an impressive-looking error metric one of the easiest numbers in this book to fake. This section teaches both the mechanism and the traps.
This section builds directly on the pulse-waveform physiology of Section 30.1 and treats the PPG trace as a measurement \(x = h(s) + \eta\) of a hidden arterial state \(s\), the sensor-model framing of Chapter 2. The estimation and error reasoning lean on Chapter 4, the leakage-safe evaluation on Chapter 5, and the calibrated-uncertainty machinery on Chapter 18. We stay off motion artifact and signal quality (that is Section 30.6) and off skin-tone fairness (Section 30.7), though both haunt every result here.
The physical link: pulse transit time and the elastic wall
Blood pressure couples to the PPG through the stiffness of the arterial wall. When the heart ejects, a pressure pulse travels down the arterial tree at a speed called pulse wave velocity (PWV). The Moens-Korteweg relation gives that speed from wall mechanics,
$$ \mathrm{PWV} = \sqrt{\frac{E\,h}{2\,\rho\,r}}, $$where \(E\) is the elastic modulus of the wall, \(h\) its thickness, \(r\) the vessel radius, and \(\rho\) the blood density. The crucial fact is that \(E\) itself rises with pressure: a pressurized artery is a stiffer artery. Higher blood pressure means a stiffer wall, a faster pulse, and therefore a shorter travel time. If we measure the time the pulse takes to reach a distal site, the pulse transit time (PTT), it falls as pressure rises. Because PWV depends on pressure roughly exponentially, a widely used linearization writes systolic pressure as
$$ \mathrm{SBP} \approx a - b\,\ln(\mathrm{PTT}), $$with person-specific constants \(a\) and \(b\). PTT is most cleanly measured as the delay between the ECG R-peak and the PPG foot, technically pulse arrival time (PAT) because it folds in the pre-ejection period, which is why a two-signal wearable (an ECG electrode plus a PPG diode, as on some smartwatches) can estimate it. A single-site PPG has no timing reference, so it instead reads pressure from the shape of one pulse (pulse-wave analysis): the sharpness of the upstroke, the height and timing of the dicrotic notch, and the reflected-wave features that a stiff, high-pressure tree distorts.
The constants are the person, and the person drifts
The physics gives you the trend (pressure up, transit time down) but never the absolute number. The offset \(a\) and slope \(b\) depend on that individual's vessel geometry, wall composition, and arm anatomy, and they drift as the vessel tone changes with temperature, posture, hydration, caffeine, and stress. This is why every credible cuffless device is either explicitly calibrated against a real cuff per user and re-calibrated on a schedule, or it is an implicit calibration baked into a per-subject model. A method that claims to read absolute pressure from PPG shape alone, with no per-person anchor, is claiming to have solved the hardest part by ignoring it.
Two families: timing-based and morphology-based
The first family is PTT/PAT regression. You align two sensors, extract the transit time per beat, fit the \(\mathrm{SBP} \approx a - b\,\ln(\mathrm{PTT})\) form (or a small linear model on PTT plus heart rate), and calibrate \(a,b\) against an initial cuff reading. It is interpretable, cheap, and grounded in mechanics, but it needs two synchronized sites and it degrades as the calibration ages. The second family is single-site PPG morphology: feed the raw pulse (and often its first and second derivatives, the velocity and acceleration plethysmograms) into a model that regresses systolic and diastolic pressure. Classical versions engineer dozens of fiducial features (upstroke time, systolic width, augmentation index) in the spirit of Chapter 8; deep versions hand a CNN or a temporal model (the architectures of Chapter 14) the whole window and let it learn the fiducials. Morphology needs only one diode, which is why it is the dream for a finger, wrist, or earbud, and it is also where the evaluation traps are most dangerous, because the model can learn the person instead of the pressure.
A smartwatch that reads pressure, once you feed it a cuff
Samsung's blood-pressure feature on the Galaxy Watch is the clearest deployed instance of the calibration principle. The watch uses PPG-derived pulse-wave features, but the user must first place a validated inflatable cuff on the same arm and enter the reading to set that person's baseline, then re-calibrate every four weeks. Between calibrations the watch reports the change from baseline, not an independent absolute measurement, which is exactly what the drifting-constants insight predicts. Aktiia and Biobeat build optical wrist and chest cuffless monitors on the same bargain: a calibration anchor plus periodic refresh. None of them escape the per-person offset; they manage it. The honest product claim is "trend between calibrations", and reading the fine print of any cuffless device tells you whether the vendor respects that limit.
The evaluation trap: predicting the mean looks like reading the pressure
Blood pressure within one resting person varies far less than pressure across a population. That single fact creates the field's signature failure mode. If your test set mixes many subjects and you split it by recording rather than by person, a model can memorize each subject's average pressure, output that average for every window, and post a low mean absolute error, all without responding to a single real pressure change. The reported error then measures how much the model remembers people, not how well it tracks blood pressure. The MIMIC waveform database (intensive-care records with a simultaneous arterial line as ground truth) is the workhorse dataset precisely because it has beat-accurate labels, and it is also where this trap has produced the most inflated published numbers, because critically ill patients cover a wide pressure range that a per-subject-mean predictor exploits.
import numpy as np
# Synthetic cohort: each subject has a stable mean BP; within a subject,
# pressure wobbles only a little around that mean.
rng = np.random.default_rng(0)
n_subjects, per_subj = 200, 50
subj_mean = rng.normal(120, 18, n_subjects) # between-subject spread (mmHg)
sbp = (subj_mean[:, None] + rng.normal(0, 6, (n_subjects, per_subj))) # within-subject wobble
# The "cheating" predictor: ignore the PPG, just output each subject's mean.
pred_mean = sbp.mean(axis=1, keepdims=True) * np.ones_like(sbp)
mae_cheat = np.abs(sbp - pred_mean).mean()
# The honest baseline you must beat: output the GLOBAL mean (knows no subject).
pred_global = np.full_like(sbp, sbp.mean())
mae_global = np.abs(sbp - pred_global).mean()
print(f"per-subject-mean MAE : {mae_cheat:5.2f} mmHg <- looks great, reads nothing")
print(f"global-mean MAE : {mae_global:5.2f} mmHg <- the real bar to clear")
The code makes the trap quantitative: the gap between the two printed numbers is the amount of "performance" that is pure memorization. The defense is the leakage-safe discipline of Chapter 5, split by subject before anything else, and, better still, evaluation that measures whether the model tracks within-subject change, not absolute level. A device is clinically useful when it catches your pressure rising, which the per-subject-mean predictor can never do.
A validated PPG toolkit instead of hand-cut fiducials
Extracting the systolic peak, dicrotic notch, and derivative-based fiducials from a raw pulse by hand is fifty-plus lines of peak logic and edge cases. The pyPPG and HeartPy libraries do it in a few:
import heartpy as hp
wd, m = hp.process(ppg_signal, sample_rate=fs) # fiducials + quality in one call
# m now holds beat-level timing and morphology features ready for a BP model
hp.process call replaces roughly 60 lines of custom upstroke-and-notch detection and, critically, also returns a signal-quality flag so you can drop unusable beats before they poison the BP regression. The judgment left to you is choosing which returned features are physiologically defensible inputs, not writing the detector.What "accurate" has to mean: the standards
Because a blood-pressure number changes medication decisions, cuffless devices are held to formal validation standards, and knowing them separates a wellness gadget from a medical claim. The classic Association for the Advancement of Medical Instrumentation / ISO threshold (ISO 81060-2) requires mean error within \(\pm 5\) mmHg and standard deviation under \(8\) mmHg against a reference cuff. The British Hypertension Society grades devices A through D by the fraction of readings within 5, 10, and 15 mmHg. Cuffless devices raise problems the cuff standards never anticipated (drift between calibrations, the need to prove the device tracks a real pressure change and not just a static level), which is why IEEE Std 1708 was written specifically for wearable cuffless monitors and ISO 81060-3 addresses continuous non-invasive measurement. The single most important protocol point: a valid study must induce genuine blood-pressure changes (exercise, posture, cold pressor) and show the device follows them, because a device evaluated only on resting subjects is, once again, being graded on the easy half of the problem. This connects forward to the clinical-validation and regulatory frame of Chapter 34.
Where the field is now
The research frontier is calibration-free and calibration-light estimation, and it is contested. Large public datasets (Aurora-BP from Microsoft, VitalDB and its perioperative arterial lines, the PulseDB curation of MIMIC and VitalDB) now let groups train morphology models with honest subject-disjoint splits, and the sobering finding is that calibration-free absolute accuracy still struggles to clear the ISO band under proper protocols. PPG-and-wearable foundation models (Chapter 20) pretrained on millions of unlabeled pulses are being probed as BP feature extractors, on the bet that a representation that has seen enough hearts needs less per-person calibration. In parallel, conformal-prediction wrappers (Chapter 18) are being used to attach an honest interval to each estimate, so a wide interval can flag "recalibrate me" rather than emit a confident wrong number. The open question is not whether PPG encodes pressure (it does) but whether the person-specific, drifting part can be removed without ever touching a cuff.
A green light is not a diagnosis
The gravest risk of cuffless BP is not a bad metric, it is a falsely reassured user. A hypertensive person whose watch reports "120/80" because its calibration drifted, or because it is quietly echoing their old baseline, may skip the medication that keeps them out of a stroke. This is why regulators treat an absolute-pressure claim very differently from a trend claim, and why the drift-and-calibration honesty above is a safety property, not a technicality. Never report an absolute cuffless number without a validity window and an uncertainty band.
Exercise: expose the memorization gap
Take any multi-subject PPG-BP dataset (PPG-BP or a PulseDB subset). (1) Train a morphology regressor twice: once with a random recording-level train/test split, once with a strict subject-disjoint split, and report the MAE gap; explain which number a vendor would prefer to advertise. (2) Add the per-subject-mean and global-mean baselines from the code above; state where your subject-disjoint model sits on that ladder. (3) Redesign the evaluation to score within-subject change tracking rather than absolute level, and argue why that metric is the one a clinician actually needs. (4) Using the ISO 81060-2 thresholds, decide whether your best model could make a medical claim, and if not, what calibration protocol would be required.
Self-check
- Starting from Moens-Korteweg, explain in one sentence why a higher blood pressure produces a shorter pulse transit time.
- Why can a single-site PPG estimate pressure from pulse shape but not from transit time, and what extra sensor does timing-based estimation require?
- A paper reports 4 mmHg MAE for cuffless SBP on a subject-mixed, recording-split MIMIC test set. Using the per-subject-mean argument, name the one experiment that would tell you whether that number reflects real pressure tracking.
What's Next
In Section 30.5, we turn the same pulse waveform toward the brain and the autonomic nervous system: staging sleep and quantifying stress from PPG. The pulse-shape and heart-rate-variability features that partly encode blood pressure also carry the slow autonomic rhythms of sleep and arousal, and we will see how a wearable reads a night of sleep architecture from the same green light, with its own, different, set of validation traps.