Wie man Signalverarbeitung mit SciPy durchführt.
Hier ist eine schrittweise Anleitung, wie man Signalverarbeitung mit SciPy durchführt.
Schritt 1: Importieren der benötigten Bibliotheken
Zuerst müssen Sie die erforderlichen Bibliotheken importieren. In diesem Fall verwenden wir scipy.signal für Signalverarbeitungsoperationen und numpy für die Manipulation von Arrays.
import numpy as np
from scipy import signal
Schritt 2: Erstellen eines Signals
Als Nächstes erstellen wir ein einfaches Signal, mit dem wir arbeiten können. Für dieses Tutorial generieren wir ein Sinussignal.
# Definieren der Parameter des Signals
Frequenz = 10 # Signal-Frequenz in Hz
Amplitude = 1 # Signal-Amplitude
Abtastrate = 100 # Anzahl der Samples pro Sekunde
Dauer = 1 # Signal-Dauer in Sekunden
# Generieren der Zeitachse
t = np.linspace(0, Dauer, int(Abtastrate * Dauer), endpoint=False)
# Generieren des Sinussignals
Signal_Daten = Amplitude * np.sin(2 * np.pi * Frequenz * t)
Schritt 3: Darstellung des Signals
Bevor wir das Signal verarbeiten, stellen wir es mit Hilfe von matplotlib grafisch dar.
import matplotlib.pyplot as plt
plt.plot(t, Signal_Daten)
plt.xlabel('Zeit (s)')
plt.ylabel('Amplitude')
plt.title('Signal')
plt.show()
Schritt 4: Anwenden eines Filters
Nun wenden wir einen Tiefpassfilter auf das Signal mithilfe der Bibliothek scipy.signal an. Als Beispiel verwenden wir einen Butterworth-Filter.
# Definieren der Filterparameter
Grenzfrequenz = 5 # Grenzfrequenz in Hz
Filterordnung = 4 # Filterordnung
# Erstellen des Butterworth-Filters
b, a = signal.butter(Filterordnung, Grenzfrequenz / (Abtastrate / 2), 'low')
# Filter auf das Signal anwenden
Gefiltertes_Signal = signal.lfilter(b, a, Signal_Daten)
Schritt 5: Darstellung des gefilterten Signals
Wir stellen das gefilterte Signal grafisch dar, um die Wirkung des Tiefpassfilters zu visualisieren.
plt.plot(t, Signal_Daten, label='Ursprüngliches Signal')
plt.plot(t, Gefiltertes_Signal, label='Gefiltertes Signal')
plt.xlabel('Zeit (s)')
plt.ylabel('Amplitude')
plt.title('Signal mit Tiefpassfilter')
plt.legend()
plt.show()
Schritt 6: Durchführen der Fourier-Transformation
Um den Frequenzinhalt des Signals zu analysieren, können wir eine Fourier-Transformation mit dem Modul scipy.fft durchführen.
# Führen Sie die Fourier-Transformation durch
Signal_Spektrum = np.fft.fft(Signal_Daten)
# Generieren der Frequenzachse
Frequenzen = np.fft.fftfreq(len(Signal_Daten), 1 / Abtastrate)
# Plot des Spektrums
plt.plot(Frequenzen, np.abs(Signal_Spektrum))
plt.xlabel('Frequenz (Hz)')
plt.ylabel('Magnitude')
plt.title('Signal-Spektrum')
plt.show()
Schritt 7: Durchführen eines Spektrogramms
Zuletzt generieren wir ein Spektrogramm des Signals mit Hilfe des Moduls scipy.signal.
# Definieren der Spektrogramm-Parameter
Fenstergröße = 256
Überlappung = int(Fenstergröße * 0.75)
# Berechnen des Spektrogramms
Frequenzen, Zeiten, Spektrogramm = signal.spectrogram(Signal_Daten, fs=Abtastrate, window='hann',
nperseg=Fenstergröße, noverlap=Überlappung)
# Plot des Spektrogramms
plt.pcolormesh(Zeiten, Frequenzen, 10 * np.log10(Spektrogramm), shading='auto')
plt.colorbar(label='Leistungsspektraldichte (dB/Hz)')
plt.xlabel('Zeit (s)')
plt.ylabel('Frequenz (Hz)')
plt.title('Spektrogramm')
plt.show()
Das war's! Sie haben erfolgreich Signalverarbeitung mit SciPy durchgeführt. Fühlen Sie sich frei, weitere Funktionen und Techniken der SciPy-Bibliothek für Ihre spezifischen Signalverarbeitungsanforderungen zu erkunden.