scipy.signal.

firwin2#

scipy.signal.firwin2(numtaps, freq, gain, *, nfreqs=None, window='hamming', antisymmetric=False, fs=None)[Quelle]#

FIR-Filterentwurf mittels der Fenster-Methode.

Ausgehend von den gegebenen Frequenzen freq und den entsprechenden Verstärkungen gain konstruiert diese Funktion einen FIR-Filter mit linearer Phase und (ungefähr) dem gegebenen Frequenzgang.

Parameter:
numtapsint

Die Anzahl der Taps im FIR-Filter. numtaps muss kleiner sein als nfreqs.

freqarray_like, 1-D

Die Frequenz-Abtastpunkte. Typischerweise 0.0 bis 1.0, wobei 1.0 Nyquist ist. Die Nyquist-Frequenz ist die Hälfte von fs. Die Werte in freq müssen nicht-abnehmend sein. Ein Wert kann einmal wiederholt werden, um eine Diskontinuität zu implementieren. Der erste Wert in freq muss 0 sein, und der letzte Wert muss fs/2 sein. Die Werte 0 und fs/2 dürfen nicht wiederholt werden.

gainarray_like

Die Filterverstärkungen an den Frequenz-Abtastpunkten. Bestimmte Einschränkungen für die Verstärkungswerte, abhängig vom Filtertyp, werden angewendet, siehe Hinweise für Details.

nfreqsint, optional

Die Größe des Interpolationsgitters, das zur Konstruktion des Filters verwendet wird. Für das effizienteste Verhalten sollte dies eine Zweierpotenz plus eins sein (z.B. 129, 257, etc.). Der Standardwert ist eins mehr als die kleinste Zweierpotenz, die nicht kleiner als numtaps ist. nfreqs muss größer sein als numtaps.

windowstring oder (string, float) oder float, oder None, optional

Fensterfunktion, die verwendet werden soll. Standard ist "hamming". Siehe scipy.signal.get_window für die vollständige Liste möglicher Werte. Wenn None, wird keine Fensterfunktion angewendet.

antisymmetricbool, optional

Ob die resultierende Impulsantwort symmetrisch/antisymmetrisch ist. Siehe Hinweise für weitere Details.

fsfloat, optional

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

Rückgabe:
tapsndarray

Die Filterkoeffizienten des FIR-Filters, als eindimensionales Array der Länge numtaps.

Hinweise

Ausgehend von der gegebenen Menge von Frequenzen und Verstärkungen wird der gewünschte Frequenzgang im Frequenzbereich konstruiert. Die inverse FFT wird auf den gewünschten Frequenzgang angewendet, um den zugehörigen Faltungskern zu erstellen, und die ersten numtaps Koeffizienten dieses Kerns, skaliert mit window, werden zurückgegeben.

Der FIR-Filter wird lineare Phase haben. Der Typ des Filters wird durch den Wert von 'numtaps` und das Flag antisymmetric bestimmt. Es gibt vier mögliche Kombinationen:

  • ungerades numtaps, antisymmetric ist False, Filter vom Typ I wird erzeugt

  • gerades numtaps, antisymmetric ist False, Filter vom Typ II wird erzeugt

  • ungerades numtaps, antisymmetric ist True, Filter vom Typ III wird erzeugt

  • gerades numtaps, antisymmetric ist True, Filter vom Typ IV wird erzeugt

Der Betragsfrequenzgang aller Filter außer Typ I unterliegt den folgenden Einschränkungen:

  • Typ II – Null bei der Nyquist-Frequenz

  • Typ III – Null bei Null- und Nyquist-Frequenzen

  • Typ IV – Null bei Nullfrequenz

Hinzugefügt in Version 0.9.0.

Referenzen

[1]

Oppenheim, A. V. und Schafer, R. W., "Discrete-Time Signal Processing", Prentice-Hall, Englewood Cliffs, New Jersey (1989). (Siehe z.B. Abschnitt 7.4.)

[2]

Smith, Steven W., "The Scientist and Engineer’s Guide to Digital Signal Processing", Kap. 17. http://www.dspguide.com/ch17/1.htm

Beispiele

Ein Tiefpass-FIR-Filter mit einem Frequenzgang, der auf [0.0, 0.5] gleich 1 ist und auf [0.5, 1.0] linear von 1 auf 0 abfällt.

>>> from scipy import signal
>>> taps = signal.firwin2(150, [0.0, 0.5, 1.0], [1.0, 1.0, 0.0])
>>> print(taps[72:78])
[-0.02286961 -0.06362756  0.57310236  0.57310236 -0.06362756 -0.02286961]