[PYTHON] Lissage des séries temporelles et des données de forme d'onde 3 méthodes (lissage)

Qu'est-ce que c'est

Je m'occupe parfois de séries temporelles et de données de forme d'onde, alors j'ai essayé un lissage. J'écrirai les trois méthodes ensemble dans un mémorandum.

Génération de données de forme d'onde

Générer les données de forme d'onde à utiliser cette fois

import numpy as np
import matplotlib.pyplot as plt


N = 1024            #Le nombre d'échantillons
dt = 0.001          #Cycle d'échantillonnage[s]
f1, f2 = 30, 90    #la fréquence[Hz]
a1, a2 = 1.5, 0.8 #amplitude

t = np.arange(0, N*dt, dt) #temps[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. Moyenne mobile

window = 5 #Gamme de moyenne mobile
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 Modèle non différencié

import scipy.signal

#L'ordre du polymorphe: 2
#Longueur du cadre: 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 Différenciation de premier ordre

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 Différentiel de second ordre

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. Transformée de Fourier

3.1 Fast Fourier Transform

x = np.fft.fft(wave)
x = np.abs(x) #Convertir des nombres complexes en valeurs absolues
x = x / N * 2 #Réglage de l'amplitude
fq = np.linspace(0, 1.0/dt, N) #Réglage de la fréquence

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

#Fréquence 30,90, amplitude 1.5, 0.Le pic est vu vers 8

fft.png

3.2 Inverse Fast Fourier Transform without Noise

threshold = 0.6 #Seuil de magnitude

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 #Extraire uniquement la partie réelle d'un nombre complexe

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

Si j'ai le temps, j'aimerais ajouter la partie théorique et décrire d'autres méthodes.

Recommended Posts

Lissage des séries temporelles et des données de forme d'onde 3 méthodes (lissage)
À propos des données de séries chronologiques et du surentraînement
Différenciation des données de séries chronologiques (discrètes)
Analyse des séries chronologiques 3 Prétraitement des données des séries chronologiques
Lecture des données de séries chronologiques OpenFOAM et des ensembles de données
Comparaison de la prédiction des données de séries chronologiques entre le modèle SARIMA et le modèle Prophet
Puissance des méthodes de prédiction dans l'analyse de données chronologiques Semi-optimisation (SARIMA) [Memo]
Acquisition de données chronologiques (quotidiennes) des cours des actions
Voir les détails des données de séries chronologiques dans Remotte
[Python] Tracer des données de séries chronologiques
[Dernière méthode] Visualisation des données de séries chronologiques et extraction de modèles fréquents à l'aide du profil Pan-Matrix
Graphique des données de séries chronologiques en Python à l'aide de pandas et matplotlib
Une histoire de regroupement de données de séries chronologiques d'échange
"Analyse des séries chronologiques de mesure des données économiques et financières" Résolution du problème de fin de chapitre avec Python
Calcul de la fidélité des clients dans les séries chronologiques
Python: analyse des séries chronologiques: prétraitement des données des séries chronologiques
Comment extraire des fonctionnalités de données de séries chronologiques avec les bases de PySpark
Lors du traçage des données de séries chronologiques et de l'obtention d'une erreur de débordement matplotlib
Prédiction des données de séries chronologiques par projection simplex
Prédire les données de séries chronologiques avec un réseau neuronal
Exemple d'utilisation de variables de classe et de méthodes de classe
[Python] Accélère le chargement du fichier CSV de séries chronologiques
Analyse des séries chronologiques 4 Construction du modèle SARIMA
Détection d'anomalies de données chronologiques pour les débutants
Séparation de la conception et des données dans matplotlib
Tracer CSV de données de séries temporelles avec une valeur unixtime en Python (matplotlib)
Conversion des données de temps en notation 25 heures
Introduction facile de la série python3 et d'OpenCV3
[Kaggle] J'ai essayé l'ingénierie de quantité de caractéristiques de données de séries chronologiques multidimensionnelles à l'aide de tsfresh
Comment gérer les données de séries chronologiques (mise en œuvre)
Analyse des séries chronologiques n ° 6 Faux retour et partie républicaine
Formater et afficher des données de séries chronologiques avec différentes échelles et unités avec Python ou Matplotlib
Liste des fonctions et méthodes intégrées fréquemment utilisées
Résumé de la méthode Kaggle's Kernel [Table time series data]
Organiser la signification des méthodes, des classes et des objets
Méthodes fréquemment utilisées de sélénium et de belle soupe
Comment lire les données de séries chronologiques dans PyTorch
Nettoyage des données 3 Utilisation d'OpenCV et prétraitement des données d'image
Fonctionnement de base de Python Pandas Series et Dataframe (1)
J'ai essayé d'implémenter "Bases de l'analyse des séries temporelles et du modèle d'espace d'état" (Hayamoto) avec pystan
[Introduction à la décomposition des éléments] Organisons les méthodes d'analyse des séries chronologiques en R et python ♬
Décomposition des séries temporelles
Implémentation de la méthode de clustering k-shape pour les données de séries chronologiques [Apprentissage non supervisé avec python Chapitre 13]
Je voulais juste extraire les données de la date et de l'heure souhaitées avec Django
Il est temps de réfléchir sérieusement à la définition et aux compétences des data scientists
Analyse des données financières par pandas et leur visualisation (2)
Traitement pleine largeur et demi-largeur des données CSV en Python
Quantité d'entités pouvant être extraite des données de séries chronologiques
Liste des bibliothèques Python pour les data scientists et les data ingénieurs
Analyse des données financières par pandas et leur visualisation (1)
Connaissances et méthodes d'étude requises pour les futurs analystes de données
relation entre la série de nombres de Fibonacci et le nombre d'or
Visualisez les données et saisissez la corrélation en même temps
Vue d'ensemble et astuces de Seaborn avec visualisation de données statistiques
Récapitulatif des méthodes Pandas utilisées lors de l'extraction de données [Python]
Histoire de l'analyse d'image du fichier PDF et de l'extraction de données
Prédiction de données chronologiques par AutoML (apprentissage automatique automatique)
Analyse des données de mesure (2) -Hydrobacter et raccord, recommandation lmfit-
Comment visualiser les données par variable explicative et variable objective