Die SciPy-Bibliothek ist eine leistungsstarke Ressource für wissenschaftliches Rechnen, und ihr Modul scipy.signal
bietet umfassende Werkzeuge für die Signalverarbeitung. Filterung ist ein fundamentaler Aspekt der Signalverarbeitung, und Butterworth-Filter werden aufgrund ihres maximal flachen Amplitudenverlaufs im Durchlassbereich häufig eingesetzt. Dieser Artikel befasst sich mit der Funktion scipy.signal.butter
, einem Schlüsselwerkzeug zur Entwicklung dieser Filter innerhalb von SciPy.
Inhaltsverzeichnis
- Butterworth-Filter verstehen
- Verwendung von
scipy.signal.butter
- Beispiel: Entwurf eines Tiefpass-Butterworth-Filters
- Beispiel: Anwendung des Filters und Visualisierung
- Fazit
Butterworth-Filter verstehen
Butterworth-Filter zeichnen sich durch ihren maximal flachen Amplitudenverlauf im Durchlassbereich aus. Diese Eigenschaft sorgt für minimale Signalverzerrungen im gewünschten Frequenzbereich. Diese Flachheit geht jedoch auf Kosten eines relativ allmählichen Abfalles im Sperrbereich (dem Frequenzbereich, in dem der Filter das Signal abschwächt). Um einen steileren Abfall zu erreichen, ist eine höhere Filterordnung erforderlich.
Verwendung von scipy.signal.butter
Die Funktion scipy.signal.butter
ist das Hauptwerkzeug für die Entwicklung von Butterworth-Filtern in SciPy. Ihre wichtigsten Parameter sind:
N
: Die Filterordnung. Höhere Ordnungen führen zu einem steileren Abfall, erhöhen aber die Komplexität und das Potenzial für Instabilität.Wn
: Die Grenzfrequenz (oder Frequenzen für Bandpass- und Bandsperrfilter), normiert auf die Nyquist-Frequenz (die halbe Abtastrate). Ein Wert von 0,5 entspricht der halben Abtastrate.btype
: Der Filtertyp: ‚lowpass‘, ‚highpass‘, ‚bandpass‘ oder ‚bandstop‘.analog
:True
entwirft einen analogen Filter;False
(Standard) entwirft einen digitalen Filter.output
: Gibt das Ausgabeformat an. ‚ba‘ (Zähler- und Nennerkoeffizienten) und ’sos‘ (Second-Order Sections) sind gängige Optionen. ’sos‘ wird im Allgemeinen für numerische Stabilität bevorzugt, insbesondere bei Filtern höherer Ordnung.
Beispiel: Entwurf eines Tiefpass-Butterworth-Filters
Entwerfen wir einen Tiefpass-Butterworth-Filter 4. Ordnung mit einer Grenzfrequenz von 10 Hz, angenommen eine Abtastrate von 100 Hz:
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
# Abtastrate
fs = 100 # Hz
# Grenzfrequenz (normiert)
cutoff = 10 / (fs / 2) # Normierung auf Nyquist-Frequenz
# Filterordnung
order = 4
# Filterentwurf mit SOS für Stabilität
sos = signal.butter(order, cutoff, btype='lowpass', analog=False, output='sos')
# Ausgabe SOS
print("Second-order sections (sos):", sos)
Beispiel: Anwendung des Filters und Visualisierung
Um den Filter anzuwenden und die Ergebnisse zu visualisieren:
# Beispielsignal
t = np.linspace(0, 1, fs, endpoint=False)
sig = np.sin(2 * np.pi * 20 * t) + np.sin(2 * np.pi * 5 * t)
# Anwendung des Filters
filtered_sig = signal.sosfilt(sos, sig)
# Darstellung des Original- und des gefilterten Signals
plt.figure(figsize=(10, 6))
plt.plot(t, sig, label='Originalsignal')
plt.plot(t, filtered_sig, label='Gefiltertes Signal')
plt.xlabel('Zeit (s)')
plt.ylabel('Amplitude')
plt.title('Originalsignal vs. gefiltertes Signal')
plt.legend()
plt.grid(True)
plt.show()
Fazit
scipy.signal.butter
ist ein leistungsstarkes Werkzeug zum Entwerfen von Butterworth-Filtern. Das Verständnis seiner Parameter und die Verwendung der Ausgabe ’sos‘ für numerische Stabilität sind entscheidend für ein effektives Filterdesign in Ihren Signalverarbeitungs-Workflows. Denken Sie daran, Grenzfrequenzen auf die Nyquist-Frequenz zu normieren. Die Visualisierung von Filterantworten mit Matplotlib verbessert das Verständnis und ermöglicht die Leistungsanalyse.