systole.detection.ppg_peaks#
- systole.detection.ppg_peaks(signal: Union[List, ndarray, Series], sfreq: int, new_sfreq: int = 1000, method: str = 'rolling_average', clipping: bool = True, clipping_thresholds: Union[Tuple, List, str] = 'auto', clean_nan: bool = False, verbose: bool = False, detector_kws: Dict = {}) Tuple[ndarray, ndarray][source]#
- Systolic peak detection for PPG signals. - Two methods are available: - an adaptation of the rolling average + standard deviation approach described in [R57c6d7365c14-1]. - The Multi-scale peak and trough detection algorithm (MSPTD) [R57c6d7365c14-2]. - Before peaks detection, nans are interpolated (optional, Fale by default) the signal is resampled to the new sampling frequency (1000 Hz by default) and clipping artefacts are corrected using cubic spline interpolation (optional, True by default). - Note - This function will resample the signal to 1000 Hz by default. - Parameters
- signal
- The raw signal recorded from the pulse oximeter time series. 
- sfreq
- The sampling frequency (Hz). 
- new_sfreq
- If resample is True, the new sampling frequency (Hz). Defaults to 1000. 
- method
- The systolic peaks detection algorithm to use, can be “rolling_average” [R57c6d7365c14-1] (default) or “msptd” [R57c6d7365c14-2]. 
- clipping
- If True, will apply the clipping artefact correction described in [R57c6d7365c14-1]. Defaults to True. 
- clipping_thresholds
- The values of the minumum and maximum clipping thresholds. Can be a float or None. If None, no correction is applied. If “auto” is provided, will use - systole.utils.find_clipping()to find the values. Defaults to “auto”.
- This parameter is only relevant if cliping is True. 
 
- clean_nan
- If True, will interpolate NaNs values if any before any other operation. Defaults to False. 
- verbose
- Control function verbosity. Defaults to False (do not print processing steps). 
- detector_kws
- Additional keyword arguments that will be passed to the detector function. 
 
- Returns
- resampled_signal
- Signal resampled to the new_sfreq frequency. 
- peaks
- Boolean array of systolic peaks detection. 
 
- Raises
- ValueError
- If clipping_thresholds is not a tuple, a list or “auto”. If method is not a valid method name. 
 
 - References - R57c6d7365c14-1(1,2,3)
- van Gent, P., Farah, H., van Nes, N. and van Arem, B., 2019. Analysing Noisy Driver Physiology Real-Time Using Off-the-Shelf Sensors: Heart Rate Analysis Software from the Taking the Fast Lane Project. Journal of Open Research Software, 7(1), p.32. DOI: http://doi.org/10.5334/jors.241 
- R57c6d7365c14-2(1,2)
- S. M. Bishop and A. Ercole, ‘Multi-scale peak and trough detection optimised for periodic and quasi-periodic neuroscience data,’ in Intracranial Pressure and Neuromonitoring XVI. Acta Neurochirurgica Supplement, T. Heldt, Ed. Springer, 2018, vol. 126, pp. 189-195. <https://doi.org/10.1007/978-3-319-65798-1_39> 
 - Examples - >>> from systole import import_ppg >>> from systole.detection import ppg_peaks >>> ppg = import_ppg().ppg.to_numpy() # Import PPG signal - Using the rolling average method (default)#- >>> signal, peaks = ppg_peaks(signal=ppg, method="rolling_average") >>> print(f'{sum(peaks)} peaks detected.') 378 peaks detected. - Using the Multi-scale peak and trough detection algorithm#- >>> signal, peaks = ppg_peaks(signal=ppg, method="msptd") >>> print(f'{sum(peaks)} peaks detected.') 378 peaks detected.