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.iirdesignabweicht, 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_windowfü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
btypein 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/2liegen. 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/2ist, wenn die Werte in cutoff nicht streng monoton steigend sind, oder wenn numtaps gerade ist, aber ein Passband die Nyquist-Frequenz einschließt.
Siehe auch
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])