2013-07-24 2 views
7

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

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

ответ

5

очень простой подход будет вызывать

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

Смежные вопросы