Фильтр нижних частот в python

Я пытаюсь преобразовать код Matlab в Python. Я хочу реализовать fdesign.lowpass() из Matlab в Python. Какова будет точная замена этого кода Matlab с помощью scipy.signal.firwin():

demod_1_a = mod_noisy * 2.*cos(2*pi*Fc*t+phi);
d = fdesign.lowpass('N,Fc', 10, 40, 1600);
Hd = design(d);
y = filter(Hd, demod_1_a);

1 ответов


очень основным подходом было бы вызвать

# 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 выше. Поэтому, если вы скопируете их числа в массив вручную, вы получите численно равны результаты.