[PYTHON] Glättung von Zeitreihen und Wellenformdaten 3 Methoden (Glättung)

Was ist das

Ich beschäftige mich manchmal mit Zeitreihen und Wellenformdaten, deshalb habe ich versucht, sie zu glätten. Ich werde die drei Methoden zusammen als Memorandum aufschreiben.

Erzeugung von Wellenformdaten

Generieren Sie die Wellenformdaten, die dieses Mal verwendet werden sollen

import numpy as np
import matplotlib.pyplot as plt


N = 1024            #Anzahl von Beispielen
dt = 0.001          #Probenahmezyklus[s]
f1, f2 = 30, 90    #Frequenz[Hz]
a1, a2 = 1.5, 0.8 #Amplitude

t = np.arange(0, N*dt, dt) #Zeit[s]
wave = a1*np.sin(2*np.pi*f1*t) + a2*np.sin(2*np.pi*f2*t) + 0.3 * np.random.randn(N) #Signal


fig, ax = plt.subplots(figsize=(14.0, 6.0))
ax.plot(t, wave)
ax.set_xlabel("Time [s]")
ax.set_ylabel("Signal")
ax.grid()
plt.title("wave")
plt.show()

fig, ax = plt.subplots(figsize=(14.0, 6.0))
ax.plot(t, wave)
ax.set_xlim(0, 0.1)
ax.set_xlabel("Time [s]")
ax.set_ylabel("Signal")
ax.grid()
plt.title("enlarged view")
plt.show()

wave.png

1. Gleitender Durchschnitt

window = 5 #Bereich des gleitenden Durchschnitts
w = np.ones(window)/window

x = np.convolve(wave, w, mode='same')

fig, ax = plt.subplots(figsize=(14.0, 6.0))
ax.plot(t, x, label='moving average')
ax.plot(t, wave, alpha=0.3, label='wave')
ax.set_xlabel("Time [s]")
ax.set_ylabel("Signal")
ax.grid()
plt.legend()
plt.title("moving average window=5")
plt.show()

fig, ax = plt.subplots(figsize=(14.0, 6.0))
ax.plot(t, x, label='moving average')
ax.plot(t, wave, alpha=0.3, label='wave')
ax.set_xlim(0, 0.1)
ax.set_xlabel("Time [s]")
ax.set_ylabel("Signal")
ax.grid()
plt.legend()
plt.title("enlarged view")
plt.show()

mooving_avg.png

  1. Savitzky-Golay filter

2.1 Nicht differenziertes Muster

import scipy.signal

#Die Reihenfolge der polymorphen: 2
#Rahmenlänge: 5
x = scipy.signal.savgol_filter(wave, 5, 2, deriv=0)

fig, ax = plt.subplots(figsize=(14.0, 6.0))
ax.plot(t, x, label='Savitzky-Golay')
ax.plot(t, wave, alpha=0.3, label='wave')
ax.set_xlabel("Time [s]")
ax.set_ylabel("Signal")
ax.grid()
plt.legend()
plt.title("Savitzky-Golay deriv=0")
plt.show()

fig, ax = plt.subplots(figsize=(14.0, 6.0))
ax.plot(t, x, label='Savitzky-Golay')
ax.plot(t, wave, alpha=0.3, label='wave')
ax.set_xlim(0, 0.1)
ax.set_xlabel("Time [s]")
ax.set_ylabel("Signal")
ax.grid()
plt.legend()
plt.title("enlarged view")
plt.show()

sav0.png

2.2 Differenzierung erster Ordnung

x = scipy.signal.savgol_filter(wave, 5, 2, deriv=1)

fig, ax = plt.subplots(figsize=(14.0, 6.0))
ax.plot(t, x)
ax.set_xlabel("Time [s]")
ax.set_ylabel("Signal")
ax.grid()
plt.title("Savitzky-Golay deriv=1")
plt.show()

fig, ax = plt.subplots(figsize=(14.0, 6.0))
ax.plot(t, x)
ax.set_xlim(0, 0.1)
ax.set_xlabel("Time [s]")
ax.set_ylabel("Signal")
ax.grid()
plt.title("enlarged view")
plt.show()

sav1.png

2.3 Differential zweiter Ordnung

x = scipy.signal.savgol_filter(wave, 5, 2, deriv=2)

fig, ax = plt.subplots(figsize=(14.0, 6.0))
ax.plot(t, x)
ax.set_xlabel("Time [s]")
ax.set_ylabel("Signal")
ax.grid()
plt.title("Savitzky-Golay deriv=2")
plt.show()

fig, ax = plt.subplots(figsize=(14.0, 6.0))
ax.plot(t, x)
ax.set_xlim(0, 0.1)
ax.set_xlabel("Time [s]")
ax.set_ylabel("Signal")
ax.grid()
plt.title("enlarged view")
plt.show()

sav2.png

3. Fourier-Transformation

3.1 Fast Fourier Transform

x = np.fft.fft(wave)
x = np.abs(x) #Konvertieren Sie komplexe Zahlen in absolute Werte
x = x / N * 2 #Einstellen der Amplitude
fq = np.linspace(0, 1.0/dt, N) #Frequenzanpassung

fig, ax = plt.subplots(figsize=(14.0, 6.0))
ax.plot(fq[: int(N / 2)], x[: int(N / 2)])
ax.set_xlabel("Frequency [Hz]")
ax.set_ylabel("Swing")
ax.grid()
plt.title("Fast Fourier Transform")
plt.show()

#Frequenz 30,90, Amplitude 1.5, 0.Peak ist um 8 zu sehen

fft.png

3.2 Inverse Fast Fourier Transform without Noise

threshold = 0.6 #Größenschwelle

x = np.fft.fft(wave)
x_abs = np.abs(x)
x_abs = x_abs / N * 2
x[x_abs < threshold] = 0

x = np.fft.ifft(x)
x = x.real #Extrahieren Sie nur den Realteil aus einer komplexen Zahl

fig, ax = plt.subplots(figsize=(14.0, 6.0))
ax.plot(t, x, label='IFFT')
ax.plot(t, wave, alpha=0.3, label='wave')
ax.set_xlabel("Time [s]")
ax.set_ylabel("Signal")
ax.grid()
plt.legend()
plt.title("Inverse Fast Fourier Transform")
plt.show()

fig, ax = plt.subplots(figsize=(14.0, 6.0))
ax.plot(t, x, label='IFFT')
ax.plot(t, wave, alpha=0.3, label='wave')
ax.set_xlim(0, 0.1)
ax.set_xlabel("Time [s]")
ax.set_ylabel("Signal")
ax.grid()
plt.legend()
plt.title("enlarged view")
plt.show()

ifft.png

Wenn ich Zeit habe, möchte ich den theoretischen Teil hinzufügen und andere Methoden beschreiben.

Recommended Posts

Glättung von Zeitreihen und Wellenformdaten 3 Methoden (Glättung)
Über Zeitreihendaten und Übertraining
Differenzierung von Zeitreihendaten (diskret)
Zeitreihenanalyse 3 Vorverarbeitung von Zeitreihendaten
OpenFOAM-Zeitreihendaten lesen und Daten einstellen
Vergleich der Vorhersage von Zeitreihendaten zwischen dem SARIMA-Modell und dem Prophet-Modell
Leistungsfähigkeit von Vorhersagemethoden in der Zeitreihendatenanalyse Halboptimierung (SARIMA) [Memo]
Erfassung von Zeitreihendaten (täglich) von Aktienkursen
Zeigen Sie Details zu Zeitreihendaten mit Remotte an
[Python] Zeichnen Sie Zeitreihendaten
[Neueste Methode] Visualisierung von Zeitreihendaten und Extraktion häufiger Muster mithilfe des Pan-Matrix-Profils
Zeichnen Sie Zeitreihendaten in Python mit Pandas und Matplotlib
Eine Geschichte über das Clustering von Zeitreihendaten des Austauschs
"Zeitreihenanalyse von Wirtschafts- und Finanzdaten messen" Das Problem am Ende des Kapitels mit Python lösen
Berechnung der Zeitreihen-Kundenbindung
Python: Zeitreihenanalyse: Vorverarbeitung von Zeitreihendaten
So extrahieren Sie Funktionen von Zeitreihendaten mit PySpark Basics
Beim Zeichnen von Zeitreihendaten und Abrufen von matplotlib OverflowError
Vorhersage von Zeitreihendaten durch Simplex-Projektion
Vorhersage von Zeitreihendaten mit einem neuronalen Netzwerk
Beispiel für die Verwendung von Klassenvariablen und Klassenmethoden
[Python] Beschleunigt das Laden von Zeitreihen-CSV
Zeitreihenanalyse 4 Konstruktion des SARIMA-Modells
Erkennung von Zeitreihendatenanomalien für Anfänger
Trennung von Design und Daten in matplotlib
Zeichnen Sie die CSV von Zeitreihendaten mit einem Unixtime-Wert in Python (matplotlib).
Konvertierung von Zeitdaten in 25-Uhr-Notation
Einfache Einführung in die Python3-Serie und OpenCV3
[Kaggle] Ich habe versucht, mithilfe von tsfresh das Feature-Quantity-Engineering mehrdimensionaler Zeitreihendaten durchzuführen
Umgang mit Zeitreihendaten (Implementierung)
Zeitreihenanalyse Nr. 6 Gefälschte Rückkehr und republikanischer Teil
Formatieren und Anzeigen von Zeitreihendaten mit verschiedenen Maßstäben und Einheiten mit Python oder Matplotlib
Liste häufig verwendeter integrierter Funktionen und Methoden
Zusammenfassung der Kaggle-Kernel-Methode [Tabelle Zeitreihendaten]
Organisieren Sie die Bedeutung von Methoden, Klassen und Objekten
Häufig verwendete Methoden von Selen und schöner Suppe
Lesen von Zeitreihendaten in PyTorch
Datenbereinigung 3 Verwendung von OpenCV und Vorverarbeitung von Bilddaten
Grundlegende Bedienung von Python Pandas Series und Dataframe (1)
Ich habe versucht, "Grundlagen der Zeitreihenanalyse und des Zustandsraummodells" (Hayamoto) mit Pystan zu implementieren
[Einführung in die Elementzerlegung] Lassen Sie uns Zeitreihenanalysemethoden in R und Python arrange anordnen
Zeitreihenzerlegung
Implementierung der Clustering-K-Form-Methode für Zeitreihendaten [Unüberwachtes Lernen mit Python Kapitel 13]
Ich wollte nur die Daten des gewünschten Datums und der gewünschten Uhrzeit mit Django extrahieren
Es ist Zeit, ernsthaft über die Definition und die Fähigkeiten von Datenwissenschaftlern nachzudenken
Analyse von Finanzdaten durch Pandas und deren Visualisierung (2)
Verarbeitung von CSV-Daten in voller und halber Breite in Python
Merkmalsmenge, die aus Zeitreihendaten extrahiert werden kann
Liste der Python-Bibliotheken für Datenwissenschaftler und Dateningenieure
Analyse von Finanzdaten durch Pandas und deren Visualisierung (1)
Kenntnisse und Studienmethoden für zukünftige Datenanalysten erforderlich
Beziehung der Fibonacci-Zahlenreihe und des Goldenen Schnitts
Visualisieren Sie Daten und erfassen Sie gleichzeitig die Korrelation
Übersicht und Tipps von Seaborn mit statistischer Datenvisualisierung
Zusammenfassung der beim Extrahieren von Daten verwendeten Pandas-Methoden [Python]
Geschichte der Bildanalyse von PDF-Dateien und Datenextraktion
Vorhersage von Zeitreihendaten durch AutoML (automatisches maschinelles Lernen)
Analyse der Messdaten (2) -Hydrobacter und Anpassung, lmfit Empfehlung-
Visualisierung von Daten anhand einer erklärenden Variablen und einer objektiven Variablen