Полосовой фильтр Matlab эквивалентен python - PullRequest
0 голосов
/ 26 марта 2020

В 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)

enter image description here

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()

enter image description here

Мне нужно найти путь в python применить такую ​​же фильтрацию, как в примере кода блока Matlab.

...