2013-07-24 12 views
7

Ich versuche, einen Matlab-Code in Python zu konvertieren. Ich möchte fdesign.lowpass() von Matlab in Python implementieren. Was den genauen Ersatz dieses Matlab-Code scipy.signal.firwin() verwendet wird:Tiefpassfilter in 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); 

Antwort

5

Ein sehr einfacher Ansatz wäre

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

Dies sollte einen Filter ähnlich den einen ergibt, das endet als im Matlab-Code gemacht. Wenn Ihr Ziel ist, funktionell äquivalente Ergebnisse zu erhalten, sollte dies einen nützlichen Filter zur Verfügung stellen.

Wenn jedoch Ihr Ziel ist, dass der Python-Code genau die gleichen Ergebnisse liefern, dann müssen Sie unter der Haube des design Anrufs (in Matlab) schauen; ; Von meiner schnellen Überprüfung aus ist es nicht trivial, die Matlab-Aufrufe zu analysieren, um genau zu bestimmen, was sie tut, d. H. Welche Entwurfsmethode verwendet wird usw. und wie diese in entsprechende Aufrufe von scipy abgebildet wird. Wenn Sie wirklich Kompatibilität wollen, und Sie nur für eine begrenzte Anzahl von Filtern tun müssen, könnten Sie von Hand auf das Hd.Numerator Feld schauen - dieses Array von Zahlen entspricht direkt der h Variable im obigen Python-Code. Wenn Sie also die Zahlen von Hand in ein Array kopieren, erhalten Sie numerisch gleichwertige Ergebnisse.