Pulse Wave Analysis Tools

Pulse wave signals, such as blood pressure and PPG waves, are widely used in clinical medicine and consumer devices for physiological assessment, as they contain valuable information on cardiovascular function. These signals are influenced by the heart, with heart rate and stroke volume affecting their duration and morphology, and the vasculature, with arterial stiffness and reflection sites influencing their morphology. We have developed several algorithms for analysing arterial pulse wave signals.

PulseAnalyse is an in-house Matlab code for extracting cardiovascular indices from pulse waves, including blood pressure and PPG waves. It can analyse either a single pulse wave (e.g., a simulated pulse wave) or a recording (e.g., a 10-minute PPG recording). The algorithm performs several steps: signal quality assessment, noise filtering, fiducial point identification, index calculation, and plot generation of the analyses. It also includes optional features for estimating a central pressure wave from a peripheral wave and calibrating pressure waves using brachial cuff measurements. The link provides a user manual, examples for quick set up, and publications by Charlton et al. describing the tool (Am J Physiol, 2019 and Physiol Measur, 2018).


Central Blood Pressure is a set of in-house Matlab codes for estimating central blood pressure (cBP) from noninvasive aortic haemodynamic data and a peripheral BP measurement. As described by Mariscal-Harana et al. (Am J Physiol, 2021), the code includes three algorithms of increasing complexity, each based on a different blood flow model: the two-element and three-element Windkessel models, and a 1-D model of the thoracic aorta. In addition, algorithms are provided for estimating cardiovascular parameters (left ventricular ejection time, outflow vascular BP, total arterial resistance and compliance, aortic pulse wave velocity, and characteristic impedance) from noninvasive thoracic aorta haemodynamic data and peripheral BP measurements.


Transit Time is an in-house Matlab code for calculating the transit time between two pulse wave signals (blood pressure or flow waves) using foot-to-foot, least squared difference, or cross-correlation algorithms, as described by Gaddum et al. (Ann Biomed Eng, 2013). The article provides criteria for selecting the most accurate and least variable algorithm based on the noise, resolution, and correlation coefficient of the measured waveforms.

Funders