Source code for neurokit2.eda.eda_clean

# -*- coding: utf-8 -*-
import numpy as np
import scipy.signal

from ..misc import as_vector
from ..signal import signal_filter, signal_smooth


[docs]def eda_clean(eda_signal, sampling_rate=1000, method="neurokit"): """Preprocess Electrodermal Activity (EDA) signal. Parameters ---------- eda_signal : Union[list, np.array, pd.Series] The raw EDA signal. sampling_rate : int The sampling frequency of `rsp_signal` (in Hz, i.e., samples/second). method : str The processing pipeline to apply. Can be one of 'neurokit' (default) or 'biosppy'. Returns ------- array Vector containing the cleaned EDA signal. See Also -------- eda_simulate, eda_findpeaks, eda_process, eda_plot Examples -------- >>> import pandas as pd >>> import neurokit2 as nk >>> >>> eda = nk.eda_simulate(duration=30, sampling_rate=100, scr_number=10, noise=0.01, drift=0.02) >>> signals = pd.DataFrame({"EDA_Raw": eda, ... "EDA_BioSPPy": nk.eda_clean(eda, sampling_rate=100,method='biosppy'), ... "EDA_NeuroKit": nk.eda_clean(eda, sampling_rate=100, method='neurokit')}) >>> fig = signals.plot() >>> fig #doctest: +SKIP """ eda_signal = as_vector(eda_signal) method = method.lower() # remove capitalised letters if method == "biosppy": clean = _eda_clean_biosppy(eda_signal, sampling_rate) elif method in ["default", "neurokit", "nk"]: clean = _eda_clean_neurokit(eda_signal, sampling_rate) else: raise ValueError("NeuroKit error: eda_clean(): 'method' should be one of 'biosppy'.") return clean
# ============================================================================= # NK # ============================================================================= def _eda_clean_neurokit(eda_signal, sampling_rate=1000): # Filtering filtered = signal_filter(eda_signal, sampling_rate=sampling_rate, highcut=3, method="butterworth", order=4) return filtered # ============================================================================= # BioSPPy # ============================================================================= def _eda_clean_biosppy(eda_signal, sampling_rate=1000): """Uses the same defaults as `BioSPPy. <https://github.com/PIA-Group/BioSPPy/blob/master/biosppy/signals/eda.py>`_. """ # Parameters order = 4 frequency = 5 frequency = 2 * np.array(frequency) / sampling_rate # Normalize frequency to Nyquist Frequency (Fs/2). # Filtering b, a = scipy.signal.butter(N=order, Wn=frequency, btype="lowpass", analog=False, output="ba") filtered = scipy.signal.filtfilt(b, a, eda_signal) # Smoothing clean = signal_smooth(filtered, method="convolution", kernel="boxzen", size=int(0.75 * sampling_rate)) return clean