iirfilter#
- scipy.signal.iirfilter(N, Wn, rp=None, rs=None, btype='band', analog=False, ftype='butter', output='ba', fs=None)[Quelle]#
IIR-Filterdesign für digitale und analoge Filter anhand von Ordnung und kritischen Punkten.
Entwirft einen digitalen oder analogen Filter der Ordnung N und gibt die Filterkoeffizienten zurück.
- Parameter:
- Nint
Die Ordnung des Filters.
- Wnarray_like
Eine Skalar oder eine Sequenz der Länge 2, die die kritischen Frequenzen angibt.
Für digitale Filter sind Wn in derselben Einheit wie fs angegeben. Standardmäßig ist fs 2 Halbzyklen/Sample, daher sind diese von 0 bis 1 normalisiert, wobei 1 die Nyquist-Frequenz ist. (Wn sind somit in Halbzyklen / Sample.)
Für analoge Filter ist Wn eine Winkelfrequenz (z. B. rad/s).
Wenn Wn eine Sequenz der Länge 2 ist, muss
Wn[0]kleiner alsWn[1]sein.- rpfloat, optional
Für Tschebyscheff- und Elliptische Filter gibt dies die maximale Welligkeit im Durchlassbereich an. (dB)
- rsfloat, optional
Für Tschebyscheff- und Elliptische Filter gibt dies die minimale Dämpfung im Sperrbereich an. (dB)
- btype{‘bandpass’, ‘lowpass’, ‘highpass’, ‘bandstop’}, optional
Der Filtertyp. Standard ist 'bandpass'.
- 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’
Bessel/Thomson: ‘bessel’
- output{‘ba’, ‘zpk’, ‘sos’}, optional
Filterform der Ausgabe
Zweite-Ordnung-Abschnitte (empfohlen): ‘sos’
Zähler/Nenner (Standard): ‘ba’
Pol-Nullstelle : ‘zpk’
Im Allgemeinen wird die Form der zweite-Ordnung-Abschnitte (‘sos’) empfohlen, da die Ableitung der Koeffizienten für die Zähler/Nenner-Form (‘ba’) numerischen Instabilitäten unterliegt. Aus Gründen der Abwärtskompatibilität ist die Standardform die Zähler/Nenner-Form (‘ba’), wobei sich das ‚b‘ und das ‚a‘ in ‚ba‘ auf die üblicherweise verwendeten Namen der Koeffizienten beziehen.
Hinweis: Die Verwendung der zweite-Ordnung-Abschnitte-Form (‘sos’) ist manchmal mit zusätzlichen Rechenkosten verbunden: Für datenintensive Anwendungsfälle wird daher empfohlen, auch die Zähler/Nenner-Form (‘ba’) zu untersuchen.
- 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,ellipordiirdesignAllgemeines Filterdesign mit Spezifikationen für Durchlass- und Sperrbereich
Hinweise
Der Parameter
output='sos'wurde in 0.16.0 hinzugefügt.Beispiele
Generiert einen Tschebyscheff II Analog-Bandpassfilter der 17. Ordnung zwischen 50 Hz und 200 Hz und plottet die Frequenzantwort.
>>> import numpy as np >>> from scipy import signal >>> import matplotlib.pyplot as plt
>>> b, a = signal.iirfilter(17, [2*np.pi*50, 2*np.pi*200], rs=60, ... btype='band', analog=True, ftype='cheby2') >>> w, h = signal.freqs(b, a, 1000) >>> fig = plt.figure() >>> ax = fig.add_subplot(1, 1, 1) >>> ax.semilogx(w / (2*np.pi), 20 * np.log10(np.maximum(abs(h), 1e-5))) >>> ax.set_title('Chebyshev Type II bandpass frequency response') >>> ax.set_xlabel('Frequency [Hz]') >>> ax.set_ylabel('Amplitude [dB]') >>> ax.axis((10, 1000, -100, 10)) >>> ax.grid(which='both', axis='both') >>> plt.show()
Erstellt einen digitalen Filter mit denselben Eigenschaften in einem System mit einer Abtastrate von 2000 Hz und plottet die Frequenzantwort. (Die Implementierung mit zweite-Ordnung-Abschnitten ist erforderlich, um die Stabilität eines Filters dieser Ordnung zu gewährleisten)
>>> sos = signal.iirfilter(17, [50, 200], rs=60, btype='band', ... analog=False, ftype='cheby2', fs=2000, ... output='sos') >>> w, h = signal.freqz_sos(sos, 2000, fs=2000) >>> fig = plt.figure() >>> ax = fig.add_subplot(1, 1, 1) >>> ax.semilogx(w, 20 * np.log10(np.maximum(abs(h), 1e-5))) >>> ax.set_title('Chebyshev Type II bandpass frequency response') >>> ax.set_xlabel('Frequency [Hz]') >>> ax.set_ylabel('Amplitude [dB]') >>> ax.axis((10, 1000, -100, 10)) >>> ax.grid(which='both', axis='both') >>> plt.show()