[PYTHON] Visualisation du changement de temps (spectrogramme) de l'analyse de fréquence (FFT) avec scipy

Avec la fonction de scipy0.16, il est devenu possible d'écrire facilement la visualisation du changement d'heure du signal acquis après application de la FFT. Il est possible de faire quelque chose comme l'analyse vocale avec des données arbitraires. Dans mon environnement Mac, j'ai mis python dans anaconda et la version de scipy était ancienne, donc

conda update scipy

Et a rendu Scipy nouveau. Si vous ne voulez pas garder une trace du temps, utilisez le fftpack de scipy.

environnement d'utilisation de python

J'ai construit avec anaconda, python2.7, scipy0.16, Mac OSX

Analyse de fréquence non stationnaire

La fonction FFT de scipy.fftpack permet de visualiser le signal d'un signal stationnaire, mais il est difficile de visualiser le changement de fréquence d'un signal non stationnaire dans le sens du temps. Vous pouvez visualiser le changement d'heure du résultat FFT en utilisant le spectre de scipy.signal.

Par exemple, essayez d'utiliser vos propres données. Ici, je mets un fichier CSV appelé data.CSV avec l'heure dans la première colonne et les données dans la deuxième colonne dans le même répertoire que le script appelé fft.py. Les données ont été acquises à 10 kHz.

code

fft.py


# -*- coding: utf-8 -*
import numpy as np
import matplotlib.pyplot as plt
from scipy import fftpack
from scipy import signal

plt.close('all')

input_file = u"data.CSV"
(time, data) = np.loadtxt(input_file,unpack=True, delimiter=",",usecols = (0,1))

fs = 10000.0 #Fréquence d'échantillonnage
f,t,Sxx = signal.spectrogram(data, fs, nperseg=512)

plt.figure()
plt.pcolormesh(t,f,Sxx,vmax=1e-6)
plt.xlim([0,18])
plt.xlabel(u"temps[sec]")
plt.ylabel(u"la fréquence[Hz]")
# plt.colorbar()
plt.show()

Le nperseg du signal.spectrogramme est le nombre de divisions de fréquence. Si vous changez ceci, le nombre de divisions changera. Par défaut 256. Puisque la carte des couleurs peut être difficile à voir en fonction de la façon dont la fréquence est définie, il est conseillé de spécifier la valeur vmax / vmin de pcolormesh de matplolib.

spectram.png

référence

http://docs.scipy.org/doc/scipy-dev/reference/generated/scipy.signal.spectrogram.html#scipy.signal.spectrogram

http://docs.scipy.org/doc/scipy/reference/fftpack.html

Recommended Posts

Visualisation du changement de temps (spectrogramme) de l'analyse de fréquence (FFT) avec scipy
Analyse des séries chronologiques 3 Prétraitement des données des séries chronologiques
Analyse de données à partir de python (visualisation de données 1)
Analyse de données à partir de python (visualisation de données 2)
Analyse des séries chronologiques 4 Construction du modèle SARIMA
Analyse émotionnelle des tweets avec apprentissage en profondeur
Recommandation d'Altair! Visualisation des données avec Python