очень простой подход будет вызывать
# spell out the args that were passed to the Matlab function
N = 10
Fc = 40
Fs = 1600
# provide them to firwin
h = scipy.signal.firwin(numtaps=N, cutoff=40, nyq=Fs/2)
# 'x' is the time-series data you are filtering
y = scipy.signal.lfilter(h, 1.0, x)
Это должно привести фильтр похож на тот, который заканчивается время сделанный в коде Matlab. Если ваша цель - получить функционально эквивалентные результаты, это должно обеспечить полезный фильтр .
Однако, если ваша цель состоит в том, чтобы код python обеспечивал точно такие же результаты, , тогда вам придется искать под капотом вызова design
(в Matlab); Из моей быстрой проверки, нет тривиального разбора через вызовы Matlab, чтобы точно определить, что он делает, т. Е. Какой метод проектирования используется и т. Д., И как сопоставить его с соответствующими вызовами scipy
. Если вам действительно нужна совместимость, и вам нужно всего лишь сделать это для ограниченного числа фильтров , вы можете, вручную, посмотреть поле Hd.Numerator
- этот массив чисел непосредственно соответствует переменной h
в приведенном выше коде python. Поэтому, если вы скопируете эти цифры в массив вручную, вы получите результаты, эквивалентные цифре.