Source code for neurokit2.ppg.ppg_process

# -*- coding: utf-8 -*-
import pandas as pd

from ..signal import signal_rate
from ..signal.signal_formatpeaks import _signal_from_indices
from ..misc import as_vector
from .ppg_clean import ppg_clean
from .ppg_findpeaks import ppg_findpeaks


[docs]def ppg_process(ppg_signal, sampling_rate=1000, **kwargs): """Process a photoplethysmogram (PPG) signal. Convenience function that automatically processes an electromyography signal. Parameters ---------- ppg_signal : Union[list, np.array, pd.Series] The raw PPG channel. sampling_rate : int The sampling frequency of `emg_signal` (in Hz, i.e., samples/second). Returns ------- signals : DataFrame A DataFrame of same length as `emg_signal` containing the following columns: - *"PPG_Raw"*: the raw signal. - *"PPG_Clean"*: the cleaned signal. - *"PPG_Rate"*: the heart rate as measured based on PPG peaks. - *"PPG_Peaks"*: the PPG peaks marked as "1" in a list of zeros. info : dict A dictionary containing the information of peaks. See Also -------- ppg_clean, ppg_findpeaks Examples -------- >>> import neurokit2 as nk >>> >>> ppg = nk.ppg_simulate(duration=10, sampling_rate=1000, heart_rate=70) >>> signals, info = nk.ppg_process(ppg, sampling_rate=1000) >>> fig = nk.ppg_plot(signals) >>> fig #doctest: +SKIP """ # Sanitize input ppg_signal = as_vector(ppg_signal) # Clean signal ppg_cleaned = ppg_clean(ppg_signal, sampling_rate=sampling_rate) # Find peaks info = ppg_findpeaks(ppg_cleaned, sampling_rate=sampling_rate, **kwargs) # Mark peaks peaks_signal = _signal_from_indices(info['PPG_Peaks'], desired_length=len(ppg_cleaned)) # Rate computation rate = signal_rate(info["PPG_Peaks"], sampling_rate=sampling_rate, desired_length=len(ppg_cleaned)) # Prepare output signals = pd.DataFrame({"PPG_Raw": ppg_signal, "PPG_Clean": ppg_cleaned, "PPG_Rate": rate, "PPG_Peaks": peaks_signal}) return signals, info