Source code for neurokit2.ecg.ecg_peaks

# - * - coding: utf-8 - * -

from ..signal import signal_fixpeaks, signal_formatpeaks
from .ecg_findpeaks import ecg_findpeaks


[docs]def ecg_peaks(ecg_cleaned, sampling_rate=1000, method="neurokit", correct_artifacts=False): """Find R-peaks in an ECG signal. Find R-peaks in an ECG signal using the specified method. Parameters ---------- ecg_cleaned : Union[list, np.array, pd.Series] The cleaned ECG channel as returned by `ecg_clean()`. sampling_rate : int The sampling frequency of `ecg_signal` (in Hz, i.e., samples/second). Defaults to 1000. method : string The algorithm to be used for R-peak detection. Can be one of 'neurokit' (default), 'pamtompkins1985', 'hamilton2002', 'christov2004', 'gamboa2008', 'elgendi2010', 'engzeemod2012' or 'kalidas2017'. correct_artifacts : bool Whether or not to identify artifacts as defined by Jukka A. Lipponen & Mika P. Tarvainen (2019): A robust algorithm for heart rate variability time series artefact correction using novel beat classification, Journal of Medical Engineering & Technology, DOI: 10.1080/03091902.2019.1640306. Returns ------- signals : DataFrame A DataFrame of same length as the input signal in which occurences of R-peaks marked as "1" in a list of zeros with the same length as `ecg_cleaned`. Accessible with the keys "ECG_R_Peaks". info : dict A dictionary containing additional information, in this case the samples at which R-peaks occur, accessible with the key "ECG_R_Peaks". See Also -------- ecg_clean, ecg_findpeaks, ecg_process, ecg_plot, signal_rate, signal_fixpeaks Examples -------- >>> import neurokit2 as nk >>> >>> ecg = nk.ecg_simulate(duration=10, sampling_rate=1000) >>> cleaned = nk.ecg_clean(ecg, sampling_rate=1000) >>> signals, info = nk.ecg_peaks(cleaned, correct_artifacts=True) >>> nk.events_plot(info["ECG_R_Peaks"], cleaned) #doctest: +ELLIPSIS <Figure ...> References ---------- - Gamboa, H. (2008). Multi-modal behavioral biometrics based on hci and electrophysiology. PhD ThesisUniversidade. - W. Zong, T. Heldt, G.B. Moody, and R.G. Mark. An open-source algorithm to detect onset of arterial blood pressure pulses. In Computers in Cardiology, 2003, pages 259–262, 2003. - Hamilton, Open Source ECG Analysis Software Documentation, E.P.Limited, 2002. - Jiapu Pan and Willis J. Tompkins. A Real-Time QRS Detection Algorithm. In: IEEE Transactions on Biomedical Engineering BME-32.3 (1985), pp. 230–236. - C. Zeelenberg, A single scan algorithm for QRS detection and feature extraction, IEEE Comp. in Cardiology, vol. 6, pp. 37-42, 1979 - A. Lourenco, H. Silva, P. Leite, R. Lourenco and A. Fred, "Real Time Electrocardiogram Segmentation for Finger Based ECG Biometrics", BIOSIGNALS 2012, pp. 49-54, 2012. """ rpeaks = ecg_findpeaks(ecg_cleaned, sampling_rate=sampling_rate, method=method) if correct_artifacts: _, rpeaks = signal_fixpeaks(rpeaks, sampling_rate=sampling_rate, iterative=True, method="Kubios") rpeaks = {"ECG_R_Peaks": rpeaks} instant_peaks = signal_formatpeaks(rpeaks, desired_length=len(ecg_cleaned), peak_indices=rpeaks) signals = instant_peaks info = rpeaks return signals, info