Source code for pydiogment.utils.filters

"""
- Description: implements the scipybased Butterworth filters.
bandpas: https://stackoverflow.com/questions/12093594/how-to-implement-band-pass-butterworth-filter-with-scipy-signal-butter
highpass: https://stackoverflow.com/questions/39032325/python-high-pass-filter
"""
from scipy.signal import butter, lfilter


[docs]def butter_lowpass(cutoff, fs, order=5): """ Design lowpass filter. Args: - cutoff (float) : the cutoff frequency of the filter. - fs (float) : the sampling rate. - order (int) : order of the filter, by default defined to 5. """ # calculate the Nyquist frequency nyq = 0.5 * fs # design filter low = cutoff / nyq b, a = butter(order, low, btype='low', analog=False) # returns the filter coefficients: numerator and denominator return b, a
[docs]def butter_highpass(cutoff, fs, order=5): """ Design a highpass filter. Args: - cutoff (float) : the cutoff frequency of the filter. - fs (float) : the sampling rate. - order (int) : order of the filter, by default defined to 5. """ # calculate the Nyquist frequency nyq = 0.5 * fs # design filter high = cutoff / nyq b, a = butter(order, high, btype='high', analog=False) # returns the filter coefficients: numerator and denominator return b, a
[docs]def butter_bandpass(low_cut, high_cut, fs, order=5): """ Design band pass filter. Args: - low_cut (float) : the low cutoff frequency of the filter. - high_cut (float) : the high cutoff frequency of the filter. - fs (float) : the sampling rate. - order (int) : order of the filter, by default defined to 5. """ # calculate the Nyquist frequency nyq = 0.5 * fs # design filter low = low_cut / nyq high = high_cut / nyq b, a = butter(order, [low, high], btype='band') # returns the filter coefficients: numerator and denominator return b, a
[docs]def butter_filter(sig, fs, ftype="low", low_cut=50, high_cut=2000, order=5): """ Apply filter to signal. Args: - sig (array) : the signal array to filter. - fs (float) : the sampling rate. - ftype (str) : the filter type, by default defined to a low pass filter - low_cut (float) : the low cutoff frequency, by default defined to 50Hz - high_cut (float) : the high cutoff frequency, by default defined to 2000Hz. - order (int) : order of the filter, by default defined to 5. Returns: array of the filtered signal. """ if ftype == "band" : b, a = butter_bandpass(low_cut, high_cut, fs, order) elif ftype == "high" : b, a = butter_highpass(high_cut, fs, order) else : b, a = butter_lowpass(low_cut, fs, order) # filter signal y = lfilter(b, a, sig) return y