iirdesign#
- scipy.signal.iirdesign(wp, ws, gpass, gstop, analog=False, ftype='ellip', output='ba', fs=None)[Quelle]#
Vollständiges Design von digitalen und analogen IIR-Filtern.
Konstruiert basierend auf Durchlass- und Sperrbereichsfrequenzen sowie Verstärkungen einen analogen oder digitalen IIR-Filter minimaler Ordnung für einen gegebenen Basistyp. Gibt die Ausgabe in Form von Zähler, Nenner ('ba'), Pol-Nullstelle ('zpk') oder zweistufigen Abschnitten ('sos') zurück.
- Parameter:
- wp, wsfloat oder Array-ähnlich, Form (2,)
Grenzfrequenzen des Durchlass- und Sperrbereichs. Mögliche Werte sind Skalare (für Tiefpass- und Hochpassfilter) oder Bereiche (für Bandpass- und Bandstoppfilter). Für digitale Filter sind dies dieselben Einheiten wie fs. Standardmäßig ist fs 2 Halbzylüsse/Sample, daher sind diese von 0 bis 1 normalisiert, wobei 1 die Nyquist-Frequenz ist. Zum Beispiel:
Tiefpass: wp = 0.2, ws = 0.3
Hochpass: wp = 0.3, ws = 0.2
Bandpass: wp = [0.2, 0.5], ws = [0.1, 0.6]
Bandstopp: wp = [0.1, 0.6], ws = [0.2, 0.5]
Für analoge Filter sind wp und ws Winkelgeschwindigkeiten (z. B. rad/s). Beachten Sie, dass für Bandpass- und Bandstoppfilter der Durchlassbereich strikt innerhalb des Sperrbereichs liegen muss oder umgekehrt. Beachten Sie auch, dass die Grenzfrequenz an den Bandkanten für IIR-Filter als Halbleistung, also -3dB, und nicht als Halbamplitude (-6dB) wie bei scipy.signal.fiwin definiert ist.
- gpassfloat
Der maximale Verlust im Durchlassbereich (dB).
- gstopfloat
Die minimale Dämpfung im Sperrbereich (dB).
- analogbool, optional
Wenn True, wird ein analoger Filter zurückgegeben, andernfalls ein digitaler Filter.
- ftypestr, optional
Der Typ des zu entwerfenden IIR-Filters
Butterworth : ‘butter’
Tschebyscheff I : ‘cheby1’
Tschebyscheff II : ‘cheby2’
Cauer/Elliptisch: ‘ellip’
- output{‘ba’, ‘zpk’, ‘sos’}, optional
Filterform der Ausgabe
zweistufige Abschnitte (empfohlen): ‘sos’
Zähler/Nenner (Standard): ‘ba’
Pol-Nullstelle: ‘zpk’
Im Allgemeinen wird die Form der zweistufigen Abschnitte ('sos') empfohlen, da die Ableitung der Koeffizienten für die Zähler/Nenner-Form ('ba') mit numerischen Instabilitäten behaftet ist. Aus Gründen der Abwärtskompatibilität ist die Standardform die Zähler/Nenner-Form ('ba'), wobei sich 'b' und 'a' in 'ba' auf die gängigen Namen der verwendeten Koeffizienten beziehen.
Hinweis: Die Verwendung der Form der zweistufigen Abschnitte ('sos') ist manchmal mit zusätzlichen Rechenkosten verbunden: für datenintensive Anwendungsfälle wird daher auch die Untersuchung der Zähler/Nenner-Form ('ba') empfohlen.
- fsfloat, optional
Die Abtastfrequenz des digitalen Systems.
Hinzugefügt in Version 1.2.0.
- Rückgabe:
- b, andarray, ndarray
Zähler- (b) und Nenner- (a) Polynome des IIR-Filters. Nur zurückgegeben, wenn
output='ba'.- z, p, kndarray, ndarray, float
Nullstellen, Pole und Systemverstärkung der Übertragungsfunktion des IIR-Filters. Nur zurückgegeben, wenn
output='zpk'.- sosndarray
Zweistufige Abschnittsdarstellung des IIR-Filters. Nur zurückgegeben, wenn
output='sos'.
Siehe auch
butterFilterentwurf unter Verwendung von Ordnung und kritischen Punkten
cheby1,cheby2,ellip,besselbuttordOrdnung und kritische Punkte aus Durchlass- und Sperrbereichsspezifikationen ermitteln
cheb1ord,cheb2ord,ellipordiirfilterAllgemeines Filterdesign unter Verwendung von Ordnung und kritischen Frequenzen
Hinweise
Der Parameter
output='sos'wurde in 0.16.0 hinzugefügt.Beispiele
>>> import numpy as np >>> from scipy import signal >>> import matplotlib.pyplot as plt >>> import matplotlib.ticker
>>> wp = 0.2 >>> ws = 0.3 >>> gpass = 1 >>> gstop = 40
>>> system = signal.iirdesign(wp, ws, gpass, gstop) >>> w, h = signal.freqz(*system)
>>> fig, ax1 = plt.subplots() >>> ax1.set_title('Digital filter frequency response') >>> ax1.plot(w, 20 * np.log10(abs(h)), 'b') >>> ax1.set_ylabel('Amplitude [dB]', color='b') >>> ax1.set_xlabel('Frequency [rad/sample]') >>> ax1.grid(True) >>> ax1.set_ylim([-120, 20]) >>> ax2 = ax1.twinx() >>> phase = np.unwrap(np.angle(h)) >>> ax2.plot(w, phase, 'g') >>> ax2.set_ylabel('Phase [rad]', color='g') >>> ax2.grid(True) >>> ax2.axis('tight') >>> ax2.set_ylim([-6, 1]) >>> nticks = 8 >>> ax1.yaxis.set_major_locator(matplotlib.ticker.LinearLocator(nticks)) >>> ax2.yaxis.set_major_locator(matplotlib.ticker.LinearLocator(nticks))