scipy.signal.

firwin#

scipy.signal.firwin(numtaps, cutoff, *, width=None, window='hamming', pass_zero=True, scale=True, fs=None)[Quelle]#

FIR-Filterentwurf mittels der Fenster-Methode.

Diese Funktion berechnet die Koeffizienten eines FIR-Filters (Finite Impulse Response). Der Filter hat eine lineare Phase; er ist vom Typ I, wenn numtaps ungerade ist, und vom Typ II, wenn numtaps gerade ist.

Filter vom Typ II haben immer eine Nullstelle bei der Nyquist-Frequenz. Daher wird eine ValueError-Ausnahme ausgelöst, wenn firwin mit geradem numtaps und einem Bandpass aufgerufen wird, dessen rechtes Ende bei der Nyquist-Frequenz liegt.

Parameter:
numtapsint

Länge des Filters (Anzahl der Koeffizienten, d.h. Ordnung des Filters + 1). numtaps muss ungerade sein, wenn ein Passband die Nyquist-Frequenz einschließt.

cutofffloat oder 1-D array_like

Grenzfrequenz des Filters (ausgedrückt in denselben Einheiten wie fs) ODER ein Array von Grenzfrequenzen (d.h. Bandkanten). Im ersteren Fall, als Float, sollte die Grenzfrequenz mit dem Halbamplitudenpunkt übereinstimmen, wo die Dämpfung -6 dB beträgt. Im letzteren Fall sollten die Frequenzen in cutoff positiv und monoton steigend zwischen 0 und fs/2 sein. Die Werte 0 und fs/2 dürfen nicht in cutoff enthalten sein. Es ist zu beachten, dass dies vom Verhalten von scipy.signal.iirdesign abweicht, wo die Grenzfrequenz der Halbleistungspunkt (-3dB) ist.

widthfloat oder None, optional

Wenn width nicht None ist, wird angenommen, dass es die ungefähre Breite des Übergangsbereichs ist (ausgedrückt in denselben Einheiten wie fs) für die Kaiser FIR-Filterkonstruktion. In diesem Fall wird das Argument window ignoriert.

windowstring oder Tupel aus String und Parameterwerten, optional

Gewünschtes Fenster, das verwendet werden soll. Siehe scipy.signal.get_window für eine Liste von Fenstern und erforderlichen Parametern.

pass_zero{True, False, ‘bandpass’, ‘lowpass’, ‘highpass’, ‘bandstop’}, optional

Wenn True, ist die Verstärkung bei Frequenz 0 (d.h. der „DC-Gain“) 1. Wenn False, ist der DC-Gain 0. Kann auch ein String-Argument für den gewünschten Filtertyp sein (entspricht btype in IIR-Designfunktionen).

Hinzugefügt in Version 1.3.0: Unterstützung für String-Argumente.

scalebool, optional

Auf True setzen, um die Koeffizienten so zu skalieren, dass die Frequenzantwort bei einer bestimmten Frequenz exakt eins ist. Diese Frequenz ist entweder

  • 0 (DC), wenn das erste Passband bei 0 beginnt (d.h. pass_zero ist True)

  • fs/2 (die Nyquist-Frequenz), wenn das erste Passband bei fs/2 endet (d.h. der Filter ist ein einzelner Hochpassfilter); andernfalls die Mitte des ersten Passbands

fsfloat, optional

Die Abtastfrequenz des Signals. Jede Frequenz in cutoff muss zwischen 0 und fs/2 liegen. Standardwert ist 2.

Rückgabe:
h(numtaps,) ndarray

Koeffizienten eines FIR-Filters der Länge numtaps.

Löst aus:
ValueError

Wenn ein Wert in cutoff kleiner oder gleich 0 oder größer oder gleich fs/2 ist, wenn die Werte in cutoff nicht streng monoton steigend sind, oder wenn numtaps gerade ist, aber ein Passband die Nyquist-Frequenz einschließt.

Beispiele

Tiefpass von 0 bis f

>>> from scipy import signal
>>> numtaps = 3
>>> f = 0.1
>>> signal.firwin(numtaps, f)
array([ 0.06799017,  0.86401967,  0.06799017])

Verwenden Sie eine spezifische Fensterfunktion

>>> signal.firwin(numtaps, f, window='nuttall')
array([  3.56607041e-04,   9.99286786e-01,   3.56607041e-04])

Hochpass („Stop“ von 0 bis f)

>>> signal.firwin(numtaps, f, pass_zero=False)
array([-0.00859313,  0.98281375, -0.00859313])

Bandpass

>>> f1, f2 = 0.1, 0.2
>>> signal.firwin(numtaps, [f1, f2], pass_zero=False)
array([ 0.06301614,  0.88770441,  0.06301614])

Bandsperre

>>> signal.firwin(numtaps, [f1, f2])
array([-0.00801395,  1.0160279 , -0.00801395])

Multiband (Passbänder sind [0, f1], [f2, f3] und [f4, 1])

>>> f3, f4 = 0.3, 0.4
>>> signal.firwin(numtaps, [f1, f2, f3, f4])
array([-0.01376344,  1.02752689, -0.01376344])

Multiband (Passbänder sind [f1, f2] und [f3, f4])

>>> signal.firwin(numtaps, [f1, f2, f3, f4], pass_zero=False)
array([ 0.04890915,  0.91284326,  0.04890915])