[PYTHON] Zeitänderungsvisualisierung (Spektrogramm) der Frequenzanalyse (FFT) mit scipy

Mit der Funktion von scipy0.16 ist es möglich geworden, die Visualisierung der Zeitänderung des erfassten Signals nach Anwendung der FFT einfach zu schreiben. Es ist möglich, so etwas wie eine Sprachanalyse mit beliebigen Daten durchzuführen. In meiner Mac-Umgebung habe ich Python in Anaconda eingefügt und die Version von scipy war also alt

conda update scipy

Und Scipy neu gemacht. Wenn Sie die Zeit nicht im Auge behalten möchten, verwenden Sie das fftpack von scipy.

Python-Nutzungsumgebung

Ich habe mit Anaconda, Python2.7, Scipy0.16, Mac OSX gebaut

Nichtstationäre Frequenzanalyse

Die FFT-Funktion von scipy.fftpack kann das Signal eines stationären Signals visualisieren, es ist jedoch schwierig, die Frequenzänderung eines instationären Signals in Zeitrichtung zu visualisieren. Sie können die zeitliche Änderung des FFT-Ergebnisses mithilfe des Spektrums von scipy.signal visualisieren.

Versuchen Sie beispielsweise, Ihre eigenen Daten zu verwenden. Hier habe ich eine CSV-Datei namens data.CSV mit der Zeit in der ersten Spalte und den Daten in der zweiten Spalte im selben Verzeichnis wie das Skript fft.py abgelegt. Die Daten wurden bei 10 kHz erfasst.

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 #Abtastfrequenz
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"Zeit[sec]")
plt.ylabel(u"Frequenz[Hz]")
# plt.colorbar()
plt.show()

Das nperseg von signal.spectrogram ist die Anzahl der Frequenzunterteilungen. Wenn Sie dies ändern, ändert sich die Anzahl der Unterteilungen. Standard 256. Da die Farbkarte je nach eingestellter Frequenz schwer zu erkennen ist, ist es ratsam, den vmax / vmin-Wert von pcolormesh von matplolib anzugeben.

spectram.png

Referenz

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

Zeitänderungsvisualisierung (Spektrogramm) der Frequenzanalyse (FFT) mit scipy
Zeitreihenanalyse 3 Vorverarbeitung von Zeitreihendaten
Datenanalyse beginnend mit Python (Datenvisualisierung 1)
Datenanalyse beginnend mit Python (Datenvisualisierung 2)
Zeitreihenanalyse 4 Konstruktion des SARIMA-Modells
Emotionale Analyse von Tweets mit Deep Learning
Empfehlung von Altair! Datenvisualisierung mit Python