scipy.signal.

ellip#

scipy.signal.ellip(N, rp, rs, Wn, btype='low', analog=False, output='ba', fs=None)[Quelle]#

Entwurf von digitalen und analogen Elliptischen (Cauer)-Filtern.

Entwerfen Sie ein digitales oder analoges elliptisches Filter der Ordnung N und geben Sie die Filterkoeffizienten zurück.

Parameter:
Nint

Die Ordnung des Filters.

rpfloat

Die maximal zulässige Welligkeit unterhalb der Einheitsverstärkung im Durchlassbereich. Angegeben in Dezibel als positive Zahl.

rsfloat

Die im Sperrbereich geforderte Mindestdämpfung. Angegeben in Dezibel als positive Zahl.

Wnarray_like

Eine Skalar oder eine Sequenz der Länge 2, die die Grenzfrequenzen angibt. Bei elliptischen Filtern ist dies der Punkt im Übergangsbereich, an dem die Verstärkung erstmals unter -rp fällt.

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).

btype{‘lowpass’, ‘highpass’, ‘bandpass’, ‘bandstop’}, optional

Der Filtertyp. Standard ist ‘lowpass’.

analogbool, optional

Wenn True, wird ein analoger Filter zurückgegeben, andernfalls ein digitaler Filter.

output{‘ba’, ‘zpk’, ‘sos’}, optional

Typ der Ausgabe: Zähler/Nenner („ba“), Pol-Nullstelle („zpk“) oder Sektionen zweiter Ordnung („sos“). Standard ist „ba“ aus Gründen der Abwärtskompatibilität, aber „sos“ sollte für allgemeine Filterung verwendet werden.

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

ellipord, ellipap

Hinweise

Auch bekannt als Cauer- oder Zolotarev-Filter, maximiert der elliptische Filter die Übergangsrate zwischen dem Durchlass- und Sperrbereich der Frequenzantwort, auf Kosten von Welligkeit in beiden und verstärktem Klingeln in der Sprungantwort.

Wenn rp gegen 0 geht, wird der elliptische Filter zu einem Tschebyscheff-Typ-II-Filter (cheby2). Wenn rs gegen 0 geht, wird er zu einem Tschebyscheff-Typ-I-Filter (cheby1). Wenn beide gegen 0 gehen, wird er zu einem Butterworth-Filter (butter).

Der gleichmäßige Welligkeits-Durchlassbereich hat N Maxima oder Minima (zum Beispiel hat ein Filter der 5. Ordnung 3 Maxima und 2 Minima). Folglich ist die DC-Verstärkung für Filter ungerader Ordnung eins, oder -rp dB für Filter gerader Ordnung.

Der Parameter output='sos' wurde in 0.16.0 hinzugefügt.

Beispiele

Entwurf eines analogen Filters und Darstellung seiner Frequenzgangkurve, wobei die kritischen Punkte gezeigt werden

>>> from scipy import signal
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> b, a = signal.ellip(4, 5, 40, 100, 'low', analog=True)
>>> w, h = signal.freqs(b, a)
>>> plt.semilogx(w, 20 * np.log10(abs(h)))
>>> plt.title('Elliptic filter frequency response (rp=5, rs=40)')
>>> plt.xlabel('Frequency [rad/s]')
>>> plt.ylabel('Amplitude [dB]')
>>> plt.margins(0, 0.1)
>>> plt.grid(which='both', axis='both')
>>> plt.axvline(100, color='green') # cutoff frequency
>>> plt.axhline(-40, color='green') # rs
>>> plt.axhline(-5, color='green') # rp
>>> plt.show()
../../_images/scipy-signal-ellip-1_00_00.png

Generieren eines Signals, das aus 10 Hz und 20 Hz besteht, abgetastet mit 1 kHz

>>> t = np.linspace(0, 1, 1000, False)  # 1 second
>>> sig = np.sin(2*np.pi*10*t) + np.sin(2*np.pi*20*t)
>>> fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)
>>> ax1.plot(t, sig)
>>> ax1.set_title('10 Hz and 20 Hz sinusoids')
>>> ax1.axis([0, 1, -2, 2])

Entwerfen Sie ein digitales Hochpassfilter bei 17 Hz, um den 10-Hz-Ton zu entfernen, und wenden Sie es auf das Signal an. (Es wird empfohlen, das Format von Absolutwert-Absolutwert-Systemen (Second-Order Sections) beim Filtern zu verwenden, um numerische Fehler mit dem Übertragungsfunktionsformat (ba) zu vermeiden)

>>> sos = signal.ellip(8, 1, 100, 17, 'hp', fs=1000, output='sos')
>>> filtered = signal.sosfilt(sos, sig)
>>> ax2.plot(t, filtered)
>>> ax2.set_title('After 17 Hz high-pass filter')
>>> ax2.axis([0, 1, -2, 2])
>>> ax2.set_xlabel('Time [s]')
>>> plt.tight_layout()
>>> plt.show()
../../_images/scipy-signal-ellip-1_01_00.png