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/2sein. Die Werte 0 undfs/2dü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_windowfü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/2liegen. Standard ist 2.
- Rückgabe:
- tapsndarray
Die Filterkoeffizienten des FIR-Filters, als eindimensionales Array der Länge numtaps.
Siehe auch
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]