Source code for neurokit2.emg.emg_clean

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

from ..misc import as_vector
from ..signal import signal_detrend


[docs]def emg_clean(emg_signal, sampling_rate=1000): """Preprocess an electromyography (emg) signal. Clean an EMG signal using a set of parameters, such as: in `BioSPPy <https://github.com/PIA-Group/BioSPPy/blob/e65da30f6379852ecb98f8e2e0c9b4b5175416c3/biosppy/signals/emg.py>>`_: fourth order 100 Hz highpass Butterworth filter followed by a constant detrending. Parameters ---------- emg_signal : Union[list, np.array, pd.Series] The raw EMG channel. sampling_rate : int The sampling frequency of `emg_signal` (in Hz, i.e., samples/second). Defaults to 1000. Returns ------- array Vector containing the cleaned EMG signal. See Also -------- emg_amplitude, emg_process, emg_plot Examples -------- >>> import pandas as pd >>> import neurokit2 as nk >>> >>> emg = nk.emg_simulate(duration=10, sampling_rate=1000) >>> signals = pd.DataFrame({"EMG_Raw": emg, "EMG_Cleaned":nk.emg_clean(emg, sampling_rate=1000)}) >>> fig = signals.plot() >>> fig #doctest: +SKIP """ emg_signal = as_vector(emg_signal) # Parameters order = 4 frequency = 100 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="highpass", analog=False) filtered = scipy.signal.filtfilt(b, a, emg_signal) # Baseline detrending clean = signal_detrend(filtered, order=0) return clean