scipy.signal.

cheby1#

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

Entwurf eines digitalen oder analogen Chebyshev-Typs I-Filters.

Entwirft einen digitalen oder analogen Chebyshev-Typ-I-Filter der Ordnung N und gibt 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.

Wnarray_like

Eine Skalar- oder Längen-2-Sequenz, die die Grenzfrequenzen angibt. Für Typ-I-Filter 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

cheb1ord, cheb1ap

Hinweise

Der Chebyshev-Typ-I-Filter maximiert die Anstiegsrate zwischen dem Durchlassbereich und dem Sperrbereich der Frequenzantwort, auf Kosten von Welligkeit im Durchlassbereich und erhöhter Schwingung in der Sprungantwort.

Typ-I-Filter haben einen schnelleren Abfall als Typ-II-Filter (cheby2), aber Typ-II-Filter haben keine Welligkeit im Durchlassbereich.

Der äquireplische Durchlassbereich hat N Maxima oder Minima (z. B. hat ein Filter 5. Ordnung 3 Maxima und 2 Minima). Folglich ist die DC-Verstärkung für Filter ungerader Ordnung eins, und für Filter gerader Ordnung -rp dB.

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.cheby1(4, 5, 100, 'low', analog=True)
>>> w, h = signal.freqs(b, a)
>>> plt.semilogx(w, 20 * np.log10(abs(h)))
>>> plt.title('Chebyshev Type I frequency response (rp=5)')
>>> 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(-5, color='green') # rp
>>> plt.show()
../../_images/scipy-signal-cheby1-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 einen digitalen Hochpassfilter bei 15 Hz, um den 10-Hz-Ton zu entfernen, und wenden Sie ihn auf das Signal an. (Es wird empfohlen, zur Vermeidung numerischer Fehler bei der Transferfunktion (ba)-Format das Format der zweiten Ordnung (second-order sections) zu verwenden.)

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