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