В Matlab есть функция с именем bandpass
, которую я часто использую. Do c функции можно найти здесь: https://ch.mathworks.com/help/signal/ref/bandpass.html
Я ищу способ применения полосового фильтра в Python и получить то же самое или почти тот же выходной отфильтрованный сигнал.
Мой сигнал можно скачать здесь: https://gofile.io/?c=JBGVsH
Код Matlab:
load('mysignal.mat')
y = bandpass(x, [0.015,0.15], 1/0.7);
plot(x);hold on; plot(y)
Python код:
import matplotlib.pyplot as plt
import scipy.io
from scipy.signal import butter, lfilter
x = scipy.io.loadmat("mysignal.mat")['x']
def butter_bandpass(lowcut, highcut, fs, order=5):
nyq = 0.5 * fs
low = lowcut / nyq
high = highcut / nyq
b, a = butter(order, [low, high], btype='band')
return b, a
def butter_bandpass_filter(data, lowcut, highcut, fs, order=6):
b, a = butter_bandpass(lowcut, highcut, fs, order=order)
y = lfilter(b, a, data)
return y
y = butter_bandpass_filter(x, 0.015, 0.15, 1/0.7, order=6)
plt.plot(x);plt.plot(y);plt.show()
Мне нужно найти путь в python применить такую же фильтрацию, как в примере кода блока Matlab.