US

pyPPG: a Python toolbox for comprehensive photoplethysmography signal analysis - IOPscience

https://doi.org/10.1088/1361-6579/ad33a2 Archived on 2026-04-26 06:48 UTC
pyPPG: a Python toolbox for comprehensive photoplethysmography signal analysis - IOPscience
PaperThe following article is Open access

pyPPG: a Python toolbox for comprehensive photoplethysmography signal analysis

, and

Published 8 April 2024 © 2024 The Author(s). Published on behalf of Institute of Physics and Engineering in Medicine by IOP Publishing Ltd
, , Open Source and Validated Computational Tools for Physiological Time Series Analysis Citation Márton Á Goda et al 2024 Physiol. Meas. 45 045001DOI 10.1088/1361-6579/ad33a2

0967-3334/45/4/045001

Abstract

Objective. Photoplethysmography is a non-invasive optical technique that measures changes in blood volume within tissues. It is commonly and being increasingly used for a variety of research and clinical applications to assess vascular dynamics and physiological parameters. Yet, contrary to heart rate variability measures, a field which has seen the development of stable standards and advanced toolboxes and software, no such standards and limited open tools exist for continuous photoplethysmogram (PPG) analysis. Consequently, the primary objective of this research was to identify, standardize, implement and validate key digital PPG biomarkers. Approach. This work describes the creation of a standard Python toolbox, denoted pyPPG, for long-term continuous PPG time-series analysis and demonstrates the detection and computation of a high number of fiducial points and digital biomarkers using a standard fingerbased transmission pulse oximeter. Main results. The improved PPG peak detector had an F1-score of 88.19% for the state-of-the-art benchmark when evaluated on 2054 adult polysomnography recordings totaling over 91 million reference beats. The algorithm outperformed the open-source original Matlab implementation by ∼5% when benchmarked on a subset of 100 randomly selected MESA recordings. More than 3000 fiducial points were manually annotated by two annotators in order to validate the fiducial points detector. The detector consistently demonstrated high performance, with a mean absolute error of less than 10 ms for all fiducial points. Significance. Based on these fiducial points, pyPPG engineered a set of 74 PPG biomarkers. Studying PPG time-series variability using pyPPG can enhance our understanding of the manifestations and etiology of diseases. This toolbox can also be used for biomarker engineering in training data-driven models. pyPPG is available on https://physiozoo.com/.

Export citation and abstractBibTeXRIS

Original content from this work may be used under the terms of the Creative Commons Attribution 4.0 licence. Any further distribution of this work must maintain attribution to the author(s) and the title of the work, journal citation and DOI.

1. Introduction

Photoplethysmography is an optical sensing technique widely used for health and fitness monitoring in clinical and consumer devices (Charlton et al 2022b), such as smartwatches and pulse oximeters. Photoplethysmography was developed in the 1930s (Allen 2007), and its potential value for assessing cardiovascular health was recognised in the 1940s (Dillon and Hertzman 1941). It was not until the 1970s that photoplethysmography became widely used as the sensing technology in pulse oximeters (Aoyagi 2003). Photoplethysmography-based wearable devices entered the consumer market in the 2010s (Charlton and Marozas 2022), and are now used by millions of people for unobtrusive health monitoring (Natarajan et al 2020).

The photoplethysmogram (PPG) signal contains a wealth of information on the heart, blood vessels, breathing and autonomic nervous system (Allen 2007). Consequently, much research is focused on extracting physiological information from the PPG (Mejia-Mejia et al 2022), including physiological parameters, such as blood pressure and breathing rate (Charlton et al 2017a, Mukkamala et al 2022), and disease indicators, such as vascular age and cardiovascular risk markers (Charlton et al 2022b). The value of photoplethysmography for heart rate and oxygen saturation monitoring is well established, its utility for detecting atrial fibrillation has recently been demonstrated (Perez et al 2019), and its potential to detect other diseases, such as sleep apneas and peripheral arterial disease, is being researched (Charlton et al 2022b).

1.1. The PPG signal

The PPG signal is an optical measurement of the arterial pulse wave (Charlton et al 2019), i.e. the wave generated when blood is ejected from the heart, temporarily increasing arterial pressure and causing vessel expansion and contraction (Alastruey et al 2023). Consequently, the PPG signal is influenced by a range of physiological systems, such as the heart, including heart rate, heart rhythm and the nature of ejection (Charlton et al 2022b), the blood vessels, including vessel stiffness, diameter and blood pressure (Charlton et al 2022b), the microvasculature, including peripheral compliance and resistance (Charlton et al 2022b), the autonomic nervous system, which influences heart rate variability (Gil et al 2010) and the respiratory system, which impacts the pulse wave through changes in intrathoracic pressure (Charlton et al 2017b). Thus, there is potential to extract much physiological information from the PPG signal.

The PPG signal can be acquired using a range of sensors and devices. PPG sensors consist of a light source such as a LED, and a light sensor, such as a photodiode (Sun and Thakor 2015). The light source illuminates a region with vasculature, such as the fingertip, and the light sensor measures how much light is either transmitted through or reflected from the tissue. In pulse oximeters, the PPG is typically acquired in transmission mode using a fingerclip probe (Nitzan et al 2020), while in consumer devices such as smartwatches, fitness trackers, and earbuds (i.e. hearables), it is typically acquired in reflection mode (Charlton and Marozas 2022). The amount of light received by sensors fluctuates with each heartbeat; usually, the amount of absorbed light increases during systole, when blood volume is greatest, and then decreases during diastole, when blood volume returns to its initial level (Allen 2007). This produces a pulse wave bearing several features, which can serve as physiological biomarkers (see figure 2) (Charlton et al 2022b).

Several factors can affect the morphology and quality of the PPG signal (Charlton et al 2022). First, PPG signals recorded during movement are often contaminated by motion artifacts (Park et al 2022). Second, PPG sensors must have good contact with the skin to obtain high-quality signals (Sun and Thakor 2015). Third, LED and photodiode positioning (Khan et al 2019), and acquiring multiple PPG signals (Charlton and Marozas 2022) can impact signal quality. Fourth, the wavelength of light emitted by the PPG sensor influences signal quality, with green wavelengths often preferred for reflectance mode PPG (Bashkatov et al 2005). Fifth, the contact pressure exerted by the sensor on the skin affects signal morphology (Chandrasekhar et al 2020). Sixth, the level of skin perfusion affects signal quality (Kyriacou et al 2002, Park et al 2022); low perfusion levels are usually associated with low wrist temperatures and with diseases such as Raynaud’s syndrome. Finally, the PPG measurement site (e.g. upper wrist) can affect signal morphology (Rajala et al 2018), quality (Prinable et al 2017) and susceptibility to motion artifact (Charlton et al 2022). Alternative sites, such as the arm, ear, chest, or face, may offer advantages in motion artifact reduction and in heart rate estimation accuracy (Charlton et al 2022). In addition, flexible and adhesive sensor attachments are emerging, promising improved contact and signal quality (Khan et al 2019).

1.2. Applications of photoplethysmography

At present, photoplethysmography is most commonly applied for heart rate monitoring in smartwatches (Temko 2017), and for oxygen saturation monitoring in pulse oximeters (Nitzan et al 2020). Smartwatches, fitness trackers and hearables are widely used, with an estimated 1.1 billion connected wearable devices worldwide in 2022 (Statista 2023). Pulse oximetry is a standard-of-care technique used in a range of clinical settings from intensive care to home monitoring (Ortega et al 2011, Greenhalgh et al 2021). Recently, the applications of photoplethysmography-based wearables have been expanded to include atrial fibrillation detection (Perez et al 2019), blood pressure monitoring (Vybornova et al 2021), and oxygen saturation monitoring (Spaccarotella et al 2022). Several additional potential applications of wearable photoplethysmography devices are being researched (Charlton et al 2023), including sleep staging (Kotzen et al 2022), mental health assessment (Cakmak et al 2021, Lyzwinski et al 2023), identifying obstructive sleep apnea (Behar et al 2014, 2019), and detection of peripheral arterial disease (Stansby et al 2022). Each of these applications uses PPG signal analysis to derive physiological information from the PPG.

Photoplethysmography confers several advantages over other physiological monitoring technologies, which have resulted in its widespread adoption. Measurements can be obtained quickly without the need for a trained operator, and photoplethysmography sensors are non-invasive, unobtrusive and low-cost. It is also a more compact and accessible monitoring modality than others, such as electrocardiogram (ECG) and blood pressure measurement. Furthermore, PPG measurements can be obtained without significantly disrupting daily activities, while ECG electrodes, for instance, can require careful placement and proper skin preparation to ensure accurate readings. However, a key disadvantage is that the PPG signal is highly susceptible to noise, such as in cases of poor sensor contact or motion (Li and Clifford 2012).

1.3. Standardising PPG signal analysis

A key step in the use of photoplethysmography for health and fitness monitoring is the development of PPG signal analysis algorithms. Such algorithms typically extract either inter-beat-intervals (e.g. for detection of atrial fibrillation) or PPG pulse wave shape features (e.g. for estimation of blood pressure). However, unlike in other application fields, such as heart rate variability analysis, there are no standards for PPG signal analysis, and only limited open tools are available. Consequently, standardized and reproducible analysis of PPG signals is lacking. Although there are some open-source PPG toolboxes, they lack validation and are often incomplete (see table 1).

Table 1. Comparison of open-source PPG signal processing toolboxes: pyPPG (this work), PPGFeat (Abdullah et al 2023), PulseAnalyse (Charlton et al 2019), NeuroKit2 (Makowski et al 2021), (RRest MIT Critical Data et al 2016), PPGSynth (Tang et al 2020), PhysioNet Cardiovascular Signal Toolbox (PCST) (Vest et al 2018), HeartPy (Van Gent et al 2019a, van Gent et al 2019b), BioSPPy (Carreiras et al 2015). Only toolboxes capable of prefiltering and detecting peaks in PPG signals are included.

 pyPPGPPGFeatPulseAnalyseNeuroKit2RRestPPGSynthPCSTHeartPyBioSPPy
Prefiltering
Peak detection
Onset detection
Other fiducial points
Biomarker engineering
Signal quality
Quantitative validation
Programing languagePythonMatlabMatlabPythonMatlabMatlabMatlabPythonPython

Table 2. Fingertip PPG databases used for the quantitative validation experiments.

DatabaseNumber of subjectsLength of recordingsGender (M:F)FilteringSampling rateAge
MESA2056∼10 h1:1.2Digital256 Hz54–95 years
PPG-BP2192 s1:1.08Hardware1 kHz20–89 years

Efficient analysis of long-term continuous physiological time-series poses a challenge for many PPG toolboxes. While a number of toolboxes enable accurate peak detection, they usually do not support the detection of other fiducial points and the engineering of standard digital biomarkers (see table 1). Moreover, a number of these toolboxes are implemented in Matlab, which limits their use by the wider open-source community. Although PPGFeat toolbox can detect most of the common PPG fiducial points, it is usable using a user interface that enables the analysis of a single pulse wave only.

Despite the extensive research and applications in the field of PPG analysis, there is an urgent need to standardize approaches, terminologies, variables and definitions. Furthermore, there is no comprehensive toolbox available that covers all standard PPG biomarkers. It is important to acknowledge that certain variables may have different terminologies in the scientific literature, but our objective was to unify them to facilitate a broader understanding of PPG biomarkers. To fill this gap, we developed standardized nomenclature and toolbox. The assigned names for variables aim to provide insights into their origin, while the definitions ensure accurate interpretation and improved comprehensibility.

1.4. Paper overview

The primary aim of this research was to create a standardized toolbox (pyPPG) for analysis if long-term finger PPG recordings in real-time. This paper presents standardized definitions for the state-of-the-art PPG fiducial points and biomarkers implemented within the pyPPG toolbox. It provides an overview of the steps involved in raw data processing and biomarker engineering, as well as validation of the fiducial point extraction process (see figure 1). Additionally, the paper presents performance results and benchmarks them against other publicly available toolboxes.

Figure 1. Refer to the following caption and surrounding text.

Figure 1. Flowchart for continuous PPG time series analysis. The terms PPG’, PPG”, and PPG‴ correspond to the first, second, and third derivatives of the PPG signal, respectively. The analysis comprises several key components, including: preprocessing, pulse wave segmentation, fiducial points identification and biomarker engineering.

Standard image High-resolution image

The pyPPG toolbox provides an open-source and validated fiducial point detection and extraction of standardized, state-of-the-art digital biomarkers for the continuous PPG time series.

2. Materials and methods

2.1. Databases

Two databases were used to validate the pyPPG toolbox (see table 2). The multi-ethnic study of atherosclerosis (MESA) database (Dean et al 2016, Zhang et al 2018) was used to validate the peak detector, and the PPG and blood pressure (PPG-BP) database (Liang et al 2018, Abdullah et al 2023) was used to validate the fiducial point detection algorithm. The MESA database consists of polysomnography (PSG) recordings from 2056 adults, aged 54–95 years, with subclinical cardiovascular disease, including 19 998 h of PPG recordings (Chen et al 2015, Rinkevičius et al 2023). Males accounted for 45.5% of the subjects. The database was downloaded from the National Sleep Resource Center (Zhang et al 2018). The PSG recordings in MESA were acquired at home, and included fingertip PPG signals measured at 256 Hz from the fingertip using Nonin 8000 series pulse oximeters (Nonin Medical Inc., Plymouth, US), alongside simultaneous ECG signals. The PPG-BP dataset contains 657 short (2 s) PPG recordings collected from 219 adult subjects, aged 20–89 years, with different health statuses (including healthy, hypertensive and diabetic subjects). Males accounted for 48% of the subjects. The data include fingertip PPG signals measured at 1 kHz using a SEP9AF-2 PPG sensor (SMPLUS Company, Korea). Signals were acquired using a 12 bit ADC, and the hardware applied a 0.512 Hz band-pass filter. Use of the retrospective databases available at open-access http://sleepdata.org for this research was approved by the institutional review board from the Technion-IIT Rappaport Faculty of Medicine (number 62-2019).

2.2. Overview of the pyPPG toolbox

The pyPPG toolbox is a standardized resource for real-time analysis of long-term finger PPG recordings. The toolbox consists of five main components, as summarized in figure 1:

  • 1.  
    Loading a raw PPG signal: the toolbox can accept various file formats such as .mat, .csv, .txt, or .edf. These files should contain raw PPG data along with the corresponding sampling rate.
  • 2.  
    Preprocessing: the raw PPG signal is filtered to remove noise and artifacts. Subsequently, the first, second, and third derivatives (PPG’, PPG”, and PPG”’) of the PPG signal are computed and filtered. The resampling of the filtered PPG signal to 75 Hz is specifically performed for systolic peak detection.
  • 3.  
    Pulse wave segmentation: the toolbox employs a peak detector to identify the systolic peaks. Based on the peak locations, the toolbox also detects the pulse onsets and offsets, which indicate the start and end of the PPG pulse waves.
  • 4.  
    Fiducial points identification: for each pulse wave, the toolbox detects a set of fiducial points.
  • 5.  
    Biomarker engineering: based on the fiducial points, a set of 74 PPG digital biomarkers are engineered.

The pyPPG toolbox also provides an optional PPG signal quality index based on the Matlab implementation of the work by Li and Clifford (2012). Signal quality assessment is performed based on template matching, which provides a numerical indicator for the quality of pulse waves (varying between 0 and 1). This can be used to identify distorted pulse waves. Whilst this signal quality index is provided by pyPPG, it was not used for the experiments conducted in this research.

2.3. Preprocessing

PPG signal filtering is one of the most essential parts of preprocessing. The human heart rate ranges between 30 and 200 beats per minute (Paliakaitė et al 2020). Therefore, in PPG signal analysis, it is common to apply bandpass filtering such 0.5−8 Hz (Abdullah et al 2023), 0.5−10 Hz (Finnegan et al 2023), 0.5−15 Hz (Mejia-Mejia et al 2022), 0.5−20 Hz (Allen and Murray 2000, Liang et al 2018), or 0.5−25 Hz (Chowdhury et al 2020), to conserve the frequency content of the PPG pulse waves while filtering out lower-frequency content (e.g. baseline wander due to respiration) and higher-frequency content (e.g. muscle noise or power interference).

Whilst fiducial point detection can be simpler with lower low-pass cut-off frequencies such as 8 Hz, the drawback of using lower cut-off frequencies is that they significantly distort the pulse wave shape and reduce the accuracy with which the pulse onset and other fiducial points can be identified. Conversely, cut-off frequencies above 12 Hz can make it more complex to detect fiducial points due to the presence of extra waves in the PPG derivatives. Therefore, during the benchmarking process of other toolboxes for fiducial point detection (see section 3.2), the 0.5−12 Hz frequency band was employed for filtering purposes. Although the 0.5−12 Hz band is recommended by default for PPG analysis, user can customize the passband filter in the pyPPG toolbox. The following zero-phase filters were implemented (see figure A1):

  • 1.  
    Bandpass filtering between 0.512 Hz: a fourth-order Chebyshev Type II filter was used for the original signal. The 12 Hz low-pass cut-off filter was used to avoid time-shifting of fiducial points (particularly pulse onset, and dicrotic notch) and to eliminate unwanted high-frequency content from the PPG derivatives. The 0.5 Hz high-pass cut-off filter was used to minimize baseline wandering whilst retaining content at low heart rates.
  • 2.  
    50 ms moving average filtering (MAF): in the case of very noisy signals, some high-frequency content can remain in the band-pass filter signal. For this purpose, a 50 ms standard flat (boxcar or top-hat) MAF with a 9 Hz cut-off frequency was applied after the band-pass filtering.
  • 3.  
    10 ms MAF for the PPG derivatives: to eliminate the high-frequency content in the PPG derivatives, a 10 ms standard flat (boxcar or top-hat) MAF with 45 Hz cut-off frequency was applied.

The toolbox provides default filtering parameters that are optimized for fingertip PPG signals. Users have the flexibility to customize these parameters according to their requirements, e.g. cut-off frequencies, filter order and MAF size. The applied filtering technique minimally alters the amplitude, which is also verified on the PPG-BP dataset (see figure A1).

It is common for the PPG signal to be sampled at over 100 Hz and up to 1 kHz, as, for example, in the PPG-BP dataset. However, an excessive sampling frequency may not be ideal for long-term data processing due to the computational load. The default behavior of the toolbox is to resample PPG signals at 75 Hz using the Python resample function which is based on the Fourier method. Resampling was employed to reduce the computational load of the systolic peak detector. However, for the identification of other fiducial points the original sampling frequency was used.

2.4. Pulse wave segmentation

The toolbox identifies individual pulse waves in a PPG signal by identifying systolic peaks (sp), and then identifying the pulse onset (on) and offset (off) on either side of each systolic peak which indicate the start and end of the pulse wave, respectively.

2.4.1. Systolic peak detection

The sp is the most important fiducial point of the PPG signal (see figure 2). It is defined as the point with the highest amplitude between two consecutive pulse onsets (see figure 2). The pyPPG toolbox uses an enhanced sp detection algorithm to enable real-time analysis of long-term PPG measurements. The algorithm is an enhanced version of the Aboy beat detector (Aboy et al 2005), which performed either best (Kotzen 2022), or amongst the best (Charlton et al 2022a) in recent benchmarking studies of PPG beat detectors. We focused on improving the beat detector’s performance and reducing its computational complexity.

Figure 2. Refer to the following caption and surrounding text.

Figure 2. The fiducial points of the PPG signal include the systolic peak (sp), the pulse onset and offset (on, off), the dicrotic notch (dn) and the diastolic peak (dp). The fiducial points of PPG derivatives are represented by u, v, w, a, b, c, d, e, f, p1, p2. The biomarkers are calculated based on this set of fiducial points.

Standard image High-resolution image

The original Aboy algorithm utilizes an advanced filtering technique to accurately detect systolic peaks (Aboy et al 2005). PPG recordings are segmented into 10-second windows and then filtered using three digital filters. The first filter helps to estimate the heart rate, while the second and third filters are used for peak detection. Two modifications were made to the Aboy algorithm (Aboy et al 2005). First, to enhance the speed of the previous Matlab implementation (Charlton et al 2022a), the finite impulse response (FIR) filter was replaced by a zero-phase fifth-order Chebyshev Type II infinite impulse response (IIR) filter, which applied the same cut-off frequencies as the original Aboy peak detector. Second, adaptive heart rate estimation is included to handle strong baseline wandering and rapid amplitude fluctuations (Goda et al 2023). When estimating heart rate, if the number of detected peaks is outside the expected lower and upper limits (see Goda et al 2023), then that 10 s segment of data is deemed to be low quality and the HR from the previous segment is retained. The resulting modified peak detector is denoted Aboy++.

When first presenting the Aboy++ algorithm et al (Goda et al 2023), we evaluated it on a small subset consisting of 100 recordings from the MESA dataset containing over 4.25 million reference beats. Aboy++ achieved an F1-score of 85.5% (79.78–92.57), compared to 80.99% (73.91–85.52) for the Aboy peak detector. In addition, the computational time of Aboy++ was over 57 times faster than that of Aboy. Specifically, the median peak detection time for 1 h segments was 114.24 s for Aboy, compared to 1.98 s for Aboy++.

2.4.2. Pulse onset detection

On corresponds to the beginning of the pulse wave and the beginning of the systolic upslope (see figure 2 and table 3). This systolic upslope is caused by increasing arterial pressure during systole (Addison 2016). On is typically, but not necessarily, a minimum point. pyPPG includes a novel on detection algorithm. Previously, on was identified as the minimum value between two successive detected sp (Farooq et al 2010, Vadrevu and Manikandan 2019), or identified using the slope sum function approach (Deshmane 2009, Nemati et al 2016). However, during long-term measurements there can be multiple local minima between successive sp, particularly in a noisy PPG signal. We define on as the initiation of the systolic upslope, which is usually a minimum point, although not always. We used a simple, yet accurate approach to detect on as the first maximum preceding the p1-point on the PPG‴. off is equivalent to on on the next pulse wave.

Table 3. Definition of PPG fiducial points.

Fiducial point definitionsReferences
PPG
1 on Pulse onset. The beginning of the systolic upslope, typically, but not necessarily, a minimum point 
2 sp Systolic peak. The highest amplitude between two consecutive pulse onsets 
3 dn Dicrotic notch. If a diastolic peak is present, then it is the local minimum preceding the diastolic peak. If there is no diastolic peak, then it is the inflection point between the systolic peak and f-point
4 dp Diastolic peak. The first local maximum of the PPG pulse wave after the dicrotic notch and before the 0.8 pulse interval; if there is no maxima, then the first local maximum of the PPG pulse wave after the e-point and before the 0.8 pulse interval.Takazawa et al (1998)
5 off Pulse offset. The local minimum preceding the next pulse wave’s systolic upslope
PPG′
5 u The highest amplitude between the pulse onset and systolic peak on PPG′Alty et al (2003)
6 v The lowest amplitude between the u-point and diastolic peak on PPG′Suboh et al (2022)
7 w The first local maximum or inflection point after the dicrotic notch on PPGSuboh et al (2022)
PPG″  
8 a The highest amplitude between pulse onset and systolic peak on PPG″Takazawa et al (1998)
9 b The first local minimum after the a-point on PPG″Takazawa et al (1998)
10 c The local maximum with the highest amplitude between the b-point and e-point, or if no local maximum is present, then the inflection point on PPG″Takazawa et al (1998)
11 d The local minimum with the lowest amplitude between the c-point and e-point, or if no local minimum is present, then the inflection point on PPG″Takazawa et al (1998)
12 e The local maximum with the highest amplitude after the b-point and before the diastolic peak on PPG″Takazawa et al (1998)
13 f The first local minimum after the e-point on PPG″Takazawa et al (1998)
PPG 
14 p1 The first local maximum after the b-point on PPG‴Charlton et al (2018)
15 p2 The last local minimum after the b-point and before the d-point on PPG‴ 

2.5. Fiducial points detection

Table 4 summarises the algorithmic approaches used to detect fiducial points. The approaches were designed based on those used in PulseAnalyse. Additional approaches were created for the fiducial points which were not implemented in PulseAnalyse (for v and w points). The approaches were then refined according to the fiducial point definitions presented in table 3.

Table 4. Detection and correction of PPG fiducial points.

Fiducial point detections and corrections
sp Initially detected based on Aboy++ algorithm (2023), and corrects the peaks’ location (interbeat intervals) error.
 Initially detected based on following rules:
on,(1) minimum point before sp
 (2) successive onsets    Followed by the first maximum preceding the p1-point on the PPG‴
off (3) Tsp a is minimum 120 ms
 I (4) Tdp b is minimum 300 ms
dn Initially detected based on Balmer’s algorithm (Balmer et al 2018), followed by searching for a minimum point between the sp and dp. If the time difference exceeds 100 ms between the identified dn and the minimum point, the value of dn is then substituted with the identified minimum point. (This correction was not used for PPG-BP dataset)
dp Initially detected based on the definition in table 3, followed by recalculate based on definition using updated values of on, dn, e and off. (This correction was not used for PPG-BP dataset)
v Initially detected based on the definition in table 3, followed by the v is local minimum between u and e.
w Initially detected based on the definition in table 3, followed by the w is local maximum between e and f, following the v.
e Detected based on definition, with the additional constraint of an upper bound of 60% of the pulse wave duration.
f Detected based on the definition in table 3, followed by recalculate using updated value of w and an additional constraint of an upper bound of 80% of the pulse wave duration.
p2 Detected based on c, d, e points.

a Systolic time, the time between the pulse onset and dicrotic notch. b Diastolic time, the time between the dicrotic notch and pulse offset. In the case of u, ad and p1, the detection proceeds the definition according to table 3.

2.5.1. Dicrotic notch detection

The dicrotic notch (dn) plays an important role as a fiducial point in the analysis of PPG signals, holding immense potential for various applications such as heart disease detection (Gu et al 2008) and arterial stiffness assessment (Addison 2016). Its significance stems from its association with the duration of systole, which is known to be affected by heart disease. Additionally, appearance of the diastolic wave following the dn allows for the evaluation of arterial stiffness, with the hypothesis that the presence of the dn is influenced by the arterial stiffness. However, it should be noted that the visibility of the dn diminishes progressively with age, making it typically no longer discernible in elderly subjects (Charlton et al 2022c).

None of the existing definitions of dn are entirely satisfactory. Typically, the dn is easily recognizable when a distinct local minimum exists between the sp and the dp (see figure 2). Yet, in many cases, the dp is not clearly visible, rendering it difficult to accurately identify the dn. Dawber et al (1973) categorized different classes of dn, which are illustrated in figure 3. The fiducial point dn can be classified into four classes: Class 1, in which the dn is an incisura, Class 2, in which there is a horizontal line at the dn, Class 3, in which there is a change in gradient on the downslope, and Class 4, in which there is no clear evidence of the dn.

Figure 3. Refer to the following caption and surrounding text.

Figure 3. Different classes of PPG pulse waves according to the characteristics of the dicrotic notch, as defined by Dawber et al (1973). The figure was adapted from Charlton et al (2022c).

Standard image High-resolution image

Another morphological approach for dn identification involves locating it at the time of zero-crossing of the PPG” between the d and e points (Chakraborty et al 2021). Yet, situations may arise where the local minimum of the dn is visible, but the occurrence of the d and e points precedes the zero-crossing point, as depicted in figure 2. Thus, debate regarding the precise location for defining the dn is ongoing.

2.5.2. Fiducial points of PPG derivatives

Additional fiducial points were defined on the PPG derivatives (PPG’, PPG” and PPG”’) as depicted in figure 2 (Charlton et al 2022c, Suboh et al 2022). The fiducial point detection algorithms in pyPPG are based on standardized, morphological definitions (see table 3). Consequently, these points do not necessarily correspond to points with consistent physiological interpretations. On the PPG’ signal, the maximum point of the systolic slope is denoted as the u-point, while the minimum point is referred to as the v-point. The u-point has been used to assess arterial stiffness (von Wowern et al 2015). On the PPG” signal, six further fiducial points are defined. Among these, four points (a, b, c, and d) are typically observed during the systolic phase (see figure 2). As the diastolic phase begins, the e-point becomes visible, followed by the appearance of the f-point (Suboh et al 2022). Points a to e have been used to assess vascular ageing (Takazawa et al 1998), and the d-point has been identified as a predictor of cardiovascular mortality. On the PPG”’ signal, p1 represents the early systolic component of the PPG pulse wave, while p2 corresponds to the late systolic component (Takazawa et al 1998). p1 and p2 are used to calculate the augmentation index, which has been found to be elevated in atherosclerotic and diabetic subjects (Bortolotto et al 2000, Pilt et al 2014).

2.5.3. Correction of the fiducial points

After pyPPG detects the fiducial points, some postprocessing routines are applied (see table 4). Each fiducial point is represented only once per pulse wave. In the correction process, multiple fiducial points are utilized to ascertain the accurate positioning of fiducial points based on their expected relative position. Inconsistent points are adjusted according to other fiducial points or discarded. This postprocessing routine is optional and can be disabled by the user.

2.6. Biomarker engineering

We implemented standardized biomarkers, employing uniform definitions for annotation. While the PulseAnalyse toolbox provides important biomarkers, pyPPG not only includes a more extensive collection of biomarkers but also features their up-to-date implementation. More specifically, the pyPPG toolbox includes a comprehensive collection of 74 standard PPG morphological biomarkers which are calculated from the timings and amplitudes of the fiducial points (see tables 58). The biomarkers were categorized into four groups: (1) PPG Signal—biomarkers that are based on the location of the fiducial points of the PPG signal, (2) Signal Ratios—biomarkers that are based on ratios of the fiducial points of the PPG signal, (3) PPG Derivatives—biomarkers that are based on the location of the fiducial points of the PPG derivatives and (4) Derivatives Ratios—biomarkers that are based on ratios of the fiducial points of the PPG derivatives.

Table 5. Biomarkers derived from the PPG signal categorized by intervals, amplitudes and areas.

PPG SignalReferences
1Intervals T pi Pulse interval, the time between the pulse onset and pulse offsetChowdhury et al (2020)
2  T pp Peak-to-peak interval, the time between two consecutive systolic peaksKurylyak et al (2013)
3  T sys Systolic time, the time between the pulse onset and dicrotic notchAhn (2017)
4  T dia Diastolic time, the time between the dicrotic notch and pulse offsetAhn (2017)
5  T sp Systolic peak time, the time between the pulse onset and systolic peakAlty et al (2003)
6  T dp Diastolic peak time, the time between the pulse onset and diastolic peakChowienczyk et al (1999)
7 Δ T Time delay, the time between the systolic peak and diastolic peakChowienczyk et al (1999)
8  T swx Systolic width, the width at x% of the systolic peak amplitude between the pulse onset and systolic peakKurylyak et al (2013)
9  T dwx Diastolic width, the width at x% of the systolic peak amplitude between the systolic peak and pulse offsetKurylyak et al (2013)
10  T pwx Pulse width, the sum of the systolic width and diastolic width at x%Kurylyak et al (2013)
11Amplitudes A sp Systolic peak amplitude, the difference in amplitude between the pulse onset and systolic peakChua and Heneghan (2006)
12  ${{\boldsymbol{A}}}_{{dn}}$ Dicrotic notch amplitude, the difference in amplitude between the pulse onset and dicrotic notchDuan et al (2016)
13  A dp Diastolic peak amplitude, the difference in amplitude between the pulse onset and diastolic peakDuan et al (2016)
14  A off Pulse onset amplitude, the difference in amplitude between the pulse onset and pulse offset 
15Areas AUC pi Area under pulse interval curve, the area under the pulse wave between pulse onset and pulse offsetDuan et al (2016)
16  AUC sys Area under systolic curve, the area under the pulse wave between the pulse onset and dicrotic notchAhn (2017)
17  AUC dia Area under diastolic curve, the area under the pulse wave between the dicrotic notch and pulse offsetAhn (2017)

Table 6. Biomarkers derived from the signal ratios categorized by intervals, amplitudes, areas and combinations thereof.

Signal ratiosReferences
1Intervals IPR Instantaneous pulse rate, 60/Tpi Lueken et al (2017)
2  T sys / T dia Ratio of the systolic time versus the diastolic timeAhn (2017)
3  T pwx / T pi Ratio of the pulse width at x% of the systolic peak amplitude versus the pulse intervalChowdhury et al (2020)
4  T pwx / T ps Ratio of the pulse width at x% of the systolic peak amplitude versus the systolic peak timeChowdhury et al (2020)
5  T dwx / T swx Ratio of the diastolic width versus the systolic width at x% widthKurylyak et al (2013)
6  T sp / T pi Ratio of the systolic peak time versus the pulse interval 
7Amplitudes A sp /Aoff Ratio of the systolic peak amplitude versus the pulse offset amplitude 
8  A dp /Asp Reflection index, ratio of the diastolic peak amplitude versus the systolic peak amplitudeChowienczyk et al (1999)
9Areas IPA Inflection point area, ratio of the area under diastolic curve versus the area under systolic curveWang et al (2009)
10Combined T sp /Asp Ratio of the systolic peak time versus the systolic peak amplitudeLiu et al (2021)
11  A sp T Stiffness index, ratio of the systolic peak amplitude versus the time delayMillasseau et al (2002)
12  A sp /( T pi T sp )Ratio of the systolic peak amplitude versus the difference between the pulse interval and systolic peak timeChowdhury et al (2020)

Table 7. Biomarkers derived from the PPG derivatives.

PPG derivativesReferences
1Intervals T u u-point time, the time between the pulse onset and u-pointms
2  T u v-point time, the time between the pulse onset and v-pointSuboh et al (2022)
3  T w w-point time, the time between the pulse onset and w-pointSuboh et al (2022)
4  T a a-point time, the time between the pulse onset and a-pointSuboh et al (2022)
5  T b b-point time, the time between the pulse onset and b-pointSuboh et al (2022)
6  T c c-point time, the time between the pulse onset and c-pointSuboh et al (2022)
7  T d d-point time, the time between the pulse onset and d-pointSuboh et al (2022)
8  T e e-point time, the time between the pulse onset and e-pointSuboh et al (2022)
9  T f f-point time, the time between the pulse onset and f-pointSuboh et al (2022)
10  T bc b−c time, the time between the b-point and c-pointCharlton et al (2018)
11  T bd b−d time, the time between the b-point and d-pointCharlton et al (2018)
12  ${{\boldsymbol{T}}}_{{p}_{1}}$ p1-point time, the time between the pulse onset and p1-pointSuboh et al (2022)
13  ${{\boldsymbol{T}}}_{{p}_{2}}$ p2-point time, the time between the pulse onset and p2-pointSuboh et al (2022)
14  ${{\boldsymbol{T}}}_{{p}_{1}-{dp}}$ p1 − dia time, the time between the p1-point and diastolic peakPeltokangas et al (2017)
15  ${{\boldsymbol{T}}}_{{p}_{2}-{dp}}$ p2 − dia time, the time between the p2-point and diastolic peakPeltokangas et al (2017)

Table 8. Biomarkers derived from the derivatives ratios categorized into intervals, amplitudes, areas, and combinations of these.

Derivatives ratiosReferences
1Intervals Tu/Tpi Ratio of the u-point time versus the pulse intervalChowdhury et al (2020)
2  T v / T pi Ratio of the v-point time versus the pulse intervalChowdhury et al (2020)
3  T w / T pi Ratio of the w-point time versus the pulse interval 
4  T a / T pi Ratio of the a-point time versus the pulse intervalChowdhury et al (2020)
5  T b / T pi Ratio of the b-point time versus the pulse intervalChowdhury et al (2020)
6  T c / T pi Ratio of the c-point time versus the pulse interval 
7  T d / T pi Ratio of the d-point time versus the pulse interval 
8  T e / T pi Ratio of the e-point time versus the pulse interval 
9  T f / T pi Ratio of the f-point time versus the pulse interval 
10 ( T u T a )/ T pi Ratio of the difference between the u-point-time and a-point time versus the pulse intervalChowdhury et al (2020)
11 ( T v T b )/ T pi Ratio of the difference between the v-point time and b-point time versus the pulse intervalChowdhury et al (2020)
12Amplitudes A u /Asp Ratio of the u-point amplitude versus the systolic peak amplitudeAlty et al (2003)
13  A v /Au Ratio of the v-point amplitude versus the u-point amplitude 
14  A w /Au Ratio of the w-point amplitude versus the u-point amplitude 
15  A b /Aa Ratio of the b-point amplitude versus the a-point amplitudeTakazawa et al (1998)
16  A c /Aa Ratio of the c-point amplitude versus the a-point amplitudeTakazawa et al (1998)
17  A d /Aa Ratio of the d-point amplitude versus the a-point amplitudeTakazawa et al (1998)
18  A e /Aa Ratio of the e-point amplitude versus the a-point amplitudeTakazawa et al (1998)
19  A f /Aa Ratio of the f-point amplitude versus the a-point amplitude 
20  ${{\boldsymbol{A}}}_{{p}_{2}}/{{\boldsymbol{A}}}_{{p}_{1}}$ Ratio of the p2-point amplitude versus the p1-point amplitudePeltokangas et al (2017)
21 ( A c Ab )/Aa Ratio of the difference between the b-point amplitude and c-point amplitude versus the a-point amplitudeAhn (2017)
22 ( A d A b )/ A Ratio of the difference between the b-point amplitude and d-point amplitude versus the a-point amplitudeAhn (2017)
23  AGI Aging index, (Ab -Ac -Ad -Ae )/Aa Takazawa et al (1998)
24  ${{\boldsymbol{AGI}}}_{{mod}}$ Modified aging index, (Ab -Ac -Ad )/Aa Ushiroyama et al (2005)
25  ${{\boldsymbol{AGI}}}_{{\inf }}$ Informal aging index, (Ab -Ae )/Aa Baek et al (2007)
26  AI Augmentation index, (PPG(Tp2)-PPG(Tp1))/AspTakazawa et al (1998)
27  ${{\boldsymbol{RI}}}_{{p}_{1}}$ Reflection index of p1, Adp /(PPG(T${}_{{p}_{1}}$)-PPG(Tpi (0)))Peltokangas et al (2017)
28  ${{\boldsymbol{RI}}}_{{p}_{2}}$ Reflection index of p2, Adp /(PPG(p2)-PPG(Tpi (0)))Peltokangas et al (2017)
29Combined SC Spring constant, PPG”(Tsp )/((Asp -Au )/Asp )Wei (2013)
30  IPAD Inflection point area plus normalised d-point amplitude, AUCdia /AUCsys +Ad /Aa Ahn (2017)

For a given window consisting of a set of beats, pyPPG provides the following nine general statistics for each biomarker (see appendix tables A2A5): average (AVG), median (MED), standard deviation (SD), lower and upper quartiles (Q1, Q3), inter-quartile range (IQR), skewness (SKW, indicating a lack of symmetry in the distribution), kurtosis (KUR, indicating the pointedness of a peak in the distribution curve), and the average difference between the mean and each data value (MAD). For each biomarker, we provide these summary statistics including measures of the central tendency and dispersion.

2.7. Validation

2.7.1. Systolic peak detection

The performance and computational complexity of Aboy++ were evaluated. Performance was assessed in comparison to reference ECG-derived beats using the F1-score, which is a commonly used statistic for evaluating the performance of such algorithms. The F1-score is particularly suitable for this purpose because it effectively combines multiple fractional measures by utilizing a harmonic mean between the sensitivity and positive predictive value. F1-scores are reported as MED and quartiles (Q1, Q3). The performance and computational complexity of Aboy++ were compared to against the implementation of Aboy provided by Charlton et al (2022a). Due to the high computational needs of Aboy, the two algorithms were compared on a subset of MESA consisting of 100 PPG recordings (1173 h). Aboy++ was then assessed on the entire MESA database, with the exception of two recordings which did not have an ECG reference signal. Thus 2054 PPG recordings, consisting of more than 19 000 h of continuous PPG signals and over 91 million reference beats were included. The median recording length was 10 h, with a 2.5 h interquartile range (IQR). The 10 h long recordings were divided into 10 min segments. Segments were excluded if they did not contain a minimum of 300 ECG reference beats or if the extracted biomarkers could not be successfully evaluated. A key step in this assessment was to synchronise the timings of ECG-derived beats and PPG systolic peaks. This was achieved by forecasting the PPG sp by extracting electrocardiogram (ECG) peaks from the PSG recordings as a reference signal, similar to the work of Kotzen et al (2021). The evaluation metric was based on the alignment of the ECG-R-wave and PPG sp. The methods for performance assessment are elaborated in our previous work (Kotzen et al 2021, Goda et al 2023).

2.7.2. Fiducial point detection

The fiducial point detection algorithm was validated by comparison against the manual annotations of the PPG-BP (Liang et al 2018) database. The data were manually annotated by two annotators (MG and PC) per the definitions in table 3. An annotation tool was adapted from the open source RRest toolbox for this purpose (Charlton et al 2017b). Fiducial points that could not be confidently identified were not annotated it. After both annotators independently annotated the prefiltered signal, the inter-annotator time differences were calculated. If the time discrepancy was >10 ms, then the annotators discussed the case and either agreed on a location or excluded the fiducial point (i.e. the annotators were not confident of its location). The final reference annotations were determined as the average of the annotations provided by the two annotators. In the PPG-BP database, each subject has three recordings. The first complete, high-quality pulse wave was selected for each subject. In total, more than 3000 fiducial points from 219 patients were manually annotated by the two annotators. The PPG-BP dataset typically includes high-quality pulse waves. However, for the final evaluation, certain fiducial points were excluded due to unclear or ambiguous annotations (see table 9). Only 1 element (<1%) was excluded for w, 2 elements (∼1%) for p2, 7 elements combined for c and d (∼3%), and 29 elements (∼13%) for dn out of a total of 219. We provide access to the manual annotations on the https://pyppg.readthedocs.io website. The PPG signals were filtered with a 12 Hz cut-off frequency during the manual annotation. The inter-annotator reliability of annotations is presented in table A1.

Table 9. Benchmark of PPG toolboxes for the detection of 219 fiducial points.

Fiducial point sp on dn u v w a b c d e f p1 p2
No. excluded points a 002900100770002
pyPPG (this work) 5(9) 7(10) 9(12) 1(1) 2(7) 3(6) 1(1) 2(2) 4(6) 4(6) 2(2) 3(8) 1(1) 2(3)
PulseAnalyse Charlton et al (2019) 5(9) 13(37)24(18)2(1) 1(1) 2(2) 9(27)9(26)3(15)5(19)37(35)28(40)
PPGFeat Abdullah et al (2023)26(24) 7(27) 50(47)16(44)15(21)53(99)19(38)17(37)22(40)26(38)28(46)37(65)

a This number refers to fiducial points that have been excluded due to unclear or ambiguous annotations.The mean (and standard deviation) of the absolute errors are reported for each fiducial in ms.

2.7.3. Fiducial point benchmarking

To assess the performance of the fiducial point detection algorithm, pyPPG was benchmarked against two publicly available PPG toolboxes capable of detecting fiducial points (PulseAnalyse (Charlton et al 2019) and PPGFeat (Abdullah et al 2023)). Both benchmarked toolboxes were implemented in Matlab. Performance was assessed using the mean absolute error (MAE) and the standard deviation of the absolute errors (SD) of the fiducial point detections in comparison to the reference. Bland–Altman plots (Bland and Altman 1986) with the limits of agreement (1.96SD, indicating 95% of errors) are also provided.

In benchmarking, the same reference labels were used. For all toolboxes, the PPG signals were filtered between 0.5 and 12 Hz. In the case of pyPPG and PPGFeat, PPG signals were filtered using the built-in filtering capabilities. However, for PulseAnalyse, we provided pre-filtered data as input to the toolbox as this toolbox does not enable the pre-filtering of short PPG segments.

3. Results

3.1. pyPPG peak detection

The pyPPG peak detector was evaluated on the 2054 recordings of the MESA dataset, which included more than 91 million reference beats. The peak detection achieved a median F1-score of 88.19% (lower—upper quartiles of 81.73%–92.71%). pyPPG demonstrated the same performance in real-time operation.

3.2. Evaluation of benchmarking

The results for the benchmarking of pyPPG against other PPG toolboxes (Pulse Analyse and PPGFeat) are presented in table 9. A total of 219 distinct pulse waves were employed for the benchmarking process. With pyPPG, the MAEs were <10 ms for all fiducial points, were less than one fifth of those for PPGFeat for all fiducial points except on, and less than those for PulseAnalyse for all except three fiducial points (sp, a, b). In comparison to the other toolboxes, pyPPG showed particular improvements in the detection of dn, p1 and p2. In addition, pyPPG was able to detect fiducial points (see figure A2) which were not detected by PulseAnalyse (v and w) or PPGFeat (p1, p2). Bland–Altman plots were generated to present the differences between the manual annotations and pyPPG fiducial points detection (see figures 4 and 5).

Figure 4. Refer to the following caption and surrounding text.

Figure 4. Bland–Altman plots for fiducial points of PPG and PPG’. RMSE: root mean squared error, n: number of fiducial points, ±1.96SD: the limits of agreement, and Pearson correlation p-value.

Standard image High-resolution image
Figure 5. Refer to the following caption and surrounding text.

Figure 5. Bland–Altman plots for fiducial points of PPG” and PPG‴. RMSE: root mean squared error, n: number of fiducial points, ±1.96SD: the limits of agreement, and Pearson correlation p-value.

Standard image High-resolution image

Note that the straight-line appearance of the Bland–Altman results for on is due to the times of the reference onsets always being equal to zero, as they were used to define the start time of each pulse wave.

3.3. pyPPG and PhysioZoo PPG

The resulting systolic peak detection and fiducial points detection algorithms are packaged into an open-source Python library denoted pyPPG. In addition, a user-friendly interface is also implemented in the PhysioZoo Software. In order to ensure that pyPPG could process a large dataset without technical issues, we ran it over the full MESA database and reported standard statistics for all biomarkers (see appendix tables A2A5).

4. Discussion

This work is expected to contribute significantly to the scientific field of computerized cardiology, leading to a better understanding of the PPG signal. The pyPPG toolbox provides an open-source, scientifically validated and comprehensive resource for PPG time series analysis. To develop pyPPG we reviewed and standardized the definition of PPG fiducial points and standard features developed over the past decades. Finally, integrating pyPPG in PhysioZoo, we provide a user interface enabling access of this resource to scientists with limited computational skills. Overall, the new resource provides scientists interested in PPG analysis with an exhaustive set of tools supporting their research. The major contribution was the implementation and quantitative validation of a fiducial point detector. The peak detection algorithm in the pyPPG toolbox was validated on 19 000 h of continuous PPG data, encompassing more than 91 million reference beats. It performed with an 88.18% F1-score while processing a 1 h segment in 1.98 s. When evaluated on 3000 manually annotated fiducial points, pyPPG had a low MAE and consistently outperformed two other open toolboxes. An additional contribution is the integration of 74 standardized physiological PPG biomarkers within pyPPG. The toolbox was made open-source, rendering it the only comprehensive and validated Python library that is publicly accessible. In future work, additional biomarkers such as pulse wave decomposition (Kontaxis et al 2020) can be added to further expand the toolbox.

A user-friendly interface is also implemented in the PhysioZoo Software software. This interface enables data visualization, exploration and quantitative analysis of a PPG recording. This novel solution provides researchers and clinicians with a valuable resource for comprehensive and reproducible PPG analysis. Finally, the manual annotations of the 219 recordings, including more than 3000 fiducial points, were made open-access to ensure reproducibility of the results and to enable further investigations and advancements in the field of PPG analysis.

In this study we refined the definitions of fiducial points in an attempt to harmonise the disparate and/or vague definitions found in the literature, and we then used these definitions when annotating reference fiducial points for the assessment of the proposed toolbox. Other toolboxes may be using slightly different definitions of fiducial points and this may indeed be reflected by the results. The performance of the peak detection algorithms was only performed on sleep data from atherosclerosis patients (see appendix tables A2A5). Therefore the evaluation of Aboy++ on additional databases would be very beneficial. Another limitation of the work was the focus on the analysis of PPG measured using standard clinical oximeters. Adapting the toolbox to incorporate other PPG sources, such as like earlobe PPG or smartwatches, will be of interest, particularly given the widespread use of the latter. The program had another limitation related to the controversial nature of morphological and physiological characteristics of fiducial points (see appendix figure A2). Hence, creating a standardized toolbox presented a significant challenge. Future research can focus on exploration of the impact of amplitude or time-normalization of waves, or any other normalization technique, on variations in signal characteristics.

The pyPPG toolbox enables the analysis of large PPG datasets. This could enable a better understanding of the underlying pathophysiology and etiology of heart diseases. The toolbox may also provide valuable features to train machine learning algorithms towards specific diagnosis and risk-prediction tasks. This can be achieved using the following methodology: for short PPG recordings, features can be engineered across the entire recording and used as input for a classifier. For long-term PPG recordings, given that features are typically derived from short time windows rather than from the entire recording, the features can be engineered over shorter windows. Summary statistics capturing both the central tendency and dispersion of a specific feature can be computed. These summary statistics can then be included as features in the model. As such, the pyPPG toolbox is a valuable tool which can be used in many physiological and data-driven PPG-related research.

In conclusion, this work provides a standardized and advanced toolbox for the analysis of PPG. Studying the PPG time-series variability using pyPPG can enhance our understanding of the manifestations and etiology of diseases. This toolbox can also be used for biomarker engineering in training data-driven models.

Acknowledgments

MAG and JAB acknowledge the Estate of Zofia (Sophie) Fridman and funding from the Israel Innovation Authority. PHC acknowledges funding from the British Heart Foundation (grant FS/20/20/34626). This article is based upon work from COST Action CA18216 VascAgeNet, supported by COST (European Cooperation in Science and Technology, www.cost.eu). We acknowledge the assistance of ChatGPT, an AI-based language model developed by OpenAI, for its help in editing the English language of this manuscript.

The Multi-Ethnic Study of Atherosclerosis (MESA) Sleep Ancillary study was funded by NIH-NHLBI Association of Sleep Disorders with Cardiovascular Health Across Ethnic Groups (RO1 HL098433). MESA is supported by NHLBI funded contracts HHSN268201500003I, N01-HC-95159, N01-HC-95160, N01-HC-95161, N01-HC-95162, N01-HC-95163, N01-HC-95164, N01-HC-95165, N01-HC-95166, N01-HC-95167, N01-HC-95168 and N01-HC-95169 from the National Heart, Lung, and Blood Institute, and by cooperative agreements UL1-TR-000040, UL1-TR-001079, and UL1-TR-001420 funded by NCATS. The National Sleep Research Resource was supported by the National Heart, Lung, and Blood Institute (R24 HL114473, 75N92019R002).

Data availability statement

All data that support the findings of this study are included within the article (and any supplementary information files). The MESA and the PPG-BP databases can be accessed via the following links:

Code and benchmarking availability

The source code, the annotations of the fiducial points, and the results of benchmarked toolboxes are available at http://physiozoo.com and http://pyppg.readthedocs.io websites. The fiducial point annotations and benchmarking results are accessible at https://doi.org/10.5281/zenodo.10523285.

Appendix

The appendix includes figure A1 illustrating default pyPPG prefiltering, figure A2 comparing high and low-quality PPG' and PPG'' signals, table A1 showing the inter-annotator differences for fiducial points, and tables A2A5 providing general statistics for each biomarker.

Figure A1. Refer to the following caption and surrounding text.

Figure A1. Prefiltering of the PPG, PPG, PPG, and PPG signals. In panel (a), the raw PPG signal is represented by the black curve, while the red curve represents the application of a fourth-order Chebyshev Type II filter (Cheby2). In panels (a)–(d), the green dashed curve represents the filtered version of the red curve obtained through moving average filtering (MAF). Panels (b)–(d) display the PPG’, PPG”, and PPG‴signals, respectively. The black curve depicts the derivatives of the red curve from the preceding panel. Likewise, the red curve corresponds to the derivative of the green curve shown in the previous panel.

Standard image High-resolution image
Figure A2. Refer to the following caption and surrounding text.

Figure A2. A comparison between high and low-quality PPG’ and PPG” signals. Record 124_1 is a high-quality signal, where all fiducial points are easily detectable. Conversely, in the case of Record 209_1, the annotation of fiducial points w and f was unclear or ambiguous. The reference fiducial points are represented by empty circles and squares, while the detected points are indicated by crosses and stars.

Standard image High-resolution image

Table A1. Inter-annotator differences for fiducial points.

Fiducial point sp on dn u v w a b c d e f p1 p2
No. excluded points a 002900100770002
MAE (SD) ms3(4)3(4)4(5)1(1)2(2)2(3)2(2)3(2)3(3)2(3)2(2)2(3)1(1)2(2)

a This number refers to fiducial points that have been excluded due to unclear or ambiguous annotations.The mean and standard deviation of the absolute errors (MAE and SD respectively) are reported for each fiducial in ms.

Table A2. Summary statistics for biomarkers of PPG signal from the MESA database for 2054 PPG recordings.

PPG signal
BiomarkerAVGMEDSDQ1Q3IQRSKWKURMADUnit
T pi 0.850.830.150.790.880.103.1929.440.09s
T pp 0.850.830.140.790.880.092.7124.630.08s
T sys 0.380.360.070.340.390.054.0838.560.04s
T dia 0.470.470.130.410.510.101.8920.180.08s
T sp 0.210.200.050.180.220.044.5046.990.03s
T dp 0.380.360.070.340.390.054.0838.560.04s
Δ T 0.170.160.050.140.190.052.1214.020.03s
T sw10 0.160.160.040.140.180.042.9627.860.03s
T sw25 0.140.140.040.120.160.032.6826.060.02s
T sw33 0.130.130.040.110.150.032.5725.510.02s
T sw50 0.110.110.030.100.130.032.3223.750.02s
T sw66 0.100.090.030.080.110.032.1222.200.02s
T sw75 0.080.080.030.070.100.032.1122.220.02s
T sw90 0.060.050.020.040.060.022.4523.710.01s
T dw10 0.500.500.130.440.550.111.3916.160.08s
T dw25 0.380.370.120.330.420.092.0418.590.08s
T dw33 0.330.320.120.270.360.092.3019.300.07s
T dw50 0.230.210.100.180.250.073.2124.360.06s
T dw66 0.160.140.090.120.170.054.5138.240.05s
T dw75 0.130.110.080.090.130.045.1847.430.04s
T dw90 0.070.060.070.050.070.026.1463.890.03s
T pw10 0.670.660.140.610.720.111.6018.130.09s
T pw25 0.520.510.130.470.560.102.0519.560.08s
T pw33 0.460.450.120.400.500.102.2219.760.08s
T pw50 0.350.330.110.290.380.082.8622.450.07s
T pw66 0.250.240.100.210.270.064.0034.200.05s
T pw75 0.210.190.090.170.220.044.5842.410.05s
T pw90 0.130.120.080.100.140.045.1853.150.04s
A sp 0.200.180.120.140.220.073.5034.290.06nu
${{\boldsymbol{A}}}_{{dn}}$ 0.100.100.100.070.130.061.0134.450.05nu
A dp 0.090.080.090.060.110.052.3134.980.05nu
A off 0.000.000.07−0.010.010.021.0340.120.03nu
A pi 9.509.7197.748.6410.481.83−0.27162.9113.21nu
A sys 4.374.3323.773.764.971.20−0.24148.023.49nu
A dia 5.135.2174.424.066.182.12−0.18158.9310.21nu

Average (AVG); median (MED); standard deviation (SD); lower and upper quartiles (Q1, Q3); inter-quartile range (IQR); Skewness (SKW, indicating a lack of symmetry in the distribution; Kurtosis (KUR, indicating the pointedness of a peak in the distribution curve); and the average difference between the mean and each data value (MAD).

Table A3. Summary statistics for biomarkers of signal ratios from the MESA database for 2054 PPG recordings.

Signal ratios
BiomarkerAVGMEDSDQ1Q3IQRSKWKURMADUnit
IPR 73.4573.339.8769.3377.508.160.4112.576.53%
T sys / T dia 91.3381.2239.3271.4198.4127.00393.222923.7624.38%
T pw25/ T pi 62.0062.7510.5257.0868.0010.91−85.54610.457.62%
T pw50/ T pi 40.8739.979.8535.3445.279.9378.04627.297.09%
T pw75/ T pi 24.7423.547.8321.0226.515.49247.901915.654.88%
T pw25/ T sp 266.17260.6276.87226.93294.0367.10174.351698.5950.18%
T pw50/ T sp 174.02165.7861.20144.75189.0844.33289.072596.0436.91%
T pw75/ T sp 105.6898.5847.9186.73111.6324.90435.034669.7924.71%
T dw10/ T sw10 336.94323.76132.82271.42380.80109.38250.742289.2782.14%
T dw25/ T sw25 298.33277.70148.79229.72333.07103.35355.273273.4284.17%
T dw33/ T sw33 277.89252.94155.82207.23308.78101.55400.583716.3285.66%
T dw50/ T sw50 230.45195.56176.10159.28246.4187.13519.265062.4386.84%
T dw66/ T sw66 197.33154.47212.89123.35199.7876.43634.826779.4591.84%
T dw75/ T sw75 187.13137.75244.73108.57182.5874.01685.407569.2399.48%
T dw90/ T sw90 185.76114.54373.6290.54154.4263.88800.799758.14132.09%
T sp / T pi 24.8024.115.4421.7126.995.28195.601503.323.80%
A sp /Aoff −251.50−225.295093.80−265.99−190.8375.16−79.2715 171.47673.97%
A dp /Asp 50.6547.32306.5437.3756.4219.05−132.428856.2654.04%
IPA 1.351.2419.000.951.500.550.21146.182.53nu
T sp /Asp 2.591.8941.341.412.631.225.04118.116.17nu
A sp T 1.321.131.060.871.480.614.2643.190.54nu
A sp /( T pi T sp )0.320.280.210.230.360.133.7836.180.11nu

Average (AVG); median (MED); standard deviation (SD); lower and upper quartiles (Q1, Q3); inter-quartile range (IQR); Skewness (SKW, indicating a lack of symmetry in the distribution; Kurtosis (KUR, indicating the pointedness of a peak in the distribution curve); and the average difference between the mean and each data value (MAD).

Table A4. Summary statistics for biomarkers of PPG derivative from the MESA database for 2054 PPG recordings.

PPG derivatives
BiomarkerAVGMEDSDQ1Q3IQRSKWKURMADUnit
T u 0.110.080.110.060.110.056.2162.130.06s
T v 0.380.330.150.290.420.133.2420.960.11s
T w 0.420.370.160.320.470.142.8015.510.11s
T a 0.060.040.080.030.070.046.0560.850.04s
T b 0.110.090.080.080.120.045.3350.570.05s
T c 0.150.130.090.110.170.064.0432.390.05s
T d 0.220.210.110.160.270.112.0211.560.07s
T e 0.350.340.110.300.390.091.3813.260.07s
T f 0.380.370.110.330.430.101.3311.520.08s
T bc 0.040.030.020.020.040.020.871.690.01s
T bd 0.110.100.070.060.150.091.285.240.05s
T p1 0.130.110.080.090.140.054.9244.110.05s
T p2 0.210.190.100.140.250.112.3113.100.07s
T p1−dp 0.250.250.080.220.280.06−0.4119.470.05s
T p2−dp 0.170.170.100.110.230.11−0.577.900.07s

Average (AVG); median (MED); standard deviation (SD); lower and upper quartiles (Q1, Q3); inter-quartile range (IQR); Skewness (SKW, indicating a lack of symmetry in the distribution; Kurtosis (KUR, indicating the pointedness of a peak in the distribution curve); and the average difference between the mean and each data value (MAD).

Table A5. Summary statistics for biomarkers of PPG derivative from the MESA database for 2054 PPG recordings.

Derivatives Ratios
BiomarkerAVGMEDSDQ1Q3IQRSKWKURMADUnit
T u / T pi 11.188.4411.577.329.952.63498.542700.885.23%
T v / T pi 49.8241.8819.9634.7163.4728.7682.65−12.9216.85%
T w / T pi 54.0245.9320.0138.8467.6028.7680.94−12.5816.85%
T a / T pi 5.804.077.962.595.522.94547.313988.163.88%
T b / T pi 11.4210.288.048.4411.723.28539.864105.763.88%
T c / T pi 15.0714.058.4611.3516.665.31469.693478.374.59%
T d / T pi 25.5923.1612.7116.5032.0515.55134.11393.659.83%
T e / T pi 38.8940.3313.6831.8747.1315.26−3.42169.2610.24%
T f / T pi 43.0244.6313.6335.8151.2915.48−2.06162.9510.28%
( T u Ta )/Tpi 5.333.538.882.966.073.12550.254378.083.95%
( T v Tb )/Tpi 38.3330.9019.5924.3852.2027.8269.31−26.8916.40%
A u /Asp 11.4411.2910.859.8512.913.06−342.2719 223.853.01%
A v /Au −56.53−50.3531.53−65.01−40.2824.74−581.356066.9617.48%
A w /Au 8.396.6021.72−5.4821.4326.91−23.67268.6416.59%
A b /Aa −67.51−71.6062.78−96.23−41.6754.56−366.505557.1239.35%
A c /Aa 8.736.2142.85−14.3430.6544.99151.811769.1430.31%
A d /Aa −75.06−67.1068.71−94.36−48.4245.95−515.477369.8136.15%
A e /Aa 76.9966.6188.5846.5690.7844.22916.6414 471.1132.28%
A f /Aa −56.11−48.0768.51−70.78−25.9644.82−576.396746.5633.40%
A p2/ A p1 29.51127.291310.7524.64204.19179.55−845.2412 641.48370.00%
( A c Ab )/Aa 76.2469.0375.9330.69107.3576.65559.287767.5546.26%
( A d Ab )/Aa −7.556.3569.52−33.0534.8067.84−152.71442.6750.05%
AGI −78.17−69.51112.94−113.36−28.2485.11−706.7211 560.2857.14%
${{\boldsymbol{AGI}}}_{{mod}}$ −1.18−9.1066.72−44.1142.1386.2345.44152.1952.43%
${{\boldsymbol{AGI}}}_{{\inf }}$ −144.50−130.56132.13−172.72−99.7073.01−831.1013 837.3654.63%
AI 42.3338.3384.6317.1457.4040.26924.7913 287.8436.73%
RI p1 132.42111.382657.6683.44154.6571.21325.9117 081.63504.55%
RI p2 132.42111.382657.6683.44154.6571.21325.9117 081.63504.55%
SC 0.000.000.000.000.000.00−16.01271.470.00nu
IPAD 1.930.4329.07−0.010.790.8010.28235.073.64nu

Average (AVG); median (MED); standard deviation (SD); lower and upper quartiles (Q1, Q3); inter-quartile range (IQR); Skewness (SKW, indicating a lack of symmetry in the distribution; Kurtosis (KUR, indicating the pointedness of a peak in the distribution curve); and the average difference between the mean and each data value (MAD).

Please wait… references are loading.