2013-07-24 18 views
7

Próbuję przekonwertować kod Matlab na język Python. Chcę wdrożyć fdesign.lowpass() z Matlab w Pythonie. Jaki będzie dokładny namiastkę tego kodu Matlab używając scipy.signal.firwin():Filtr dolnoprzepustowy w pytonie

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

Odpowiedz

5

Bardzo podstawowe podejście byłoby powołać

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

Powinno to wydajność filtra podobny do tego, który kończy się wykonane w kodzie Matlaba. Jeśli Twoim celem jest uzyskanie równoważnych funkcjonalnie wyników, powinien to być przydatny filtr .

Jednak jeśli Twoim celem jest, aby kod Pythona zapewniał dokładnie takie same wyniki, , będziesz musiał sprawdzić pod maską połączenia design (w Matlab); Z mojego szybkiego sprawdzenia nie jest trywialne analizowanie wywołań Matlab w celu dokładnego określenia, co robi, tj. Jaka metoda projektowania jest używana itd. Oraz jak zamapować to na odpowiednie wywołania scipy. Jeśli naprawdę potrzebujesz kompatybilności i potrzebujesz tylko dla ograniczonej liczby filtrów, możesz ręcznie spojrzeć na pole Hd.Numerator - ta tablica liczb bezpośrednio odpowiada zmiennej h w powyższym kodzie Pythona. Więc jeśli ręcznie skopiujesz te liczby do tablicy, otrzymasz wyniki równoważne numerycznie.