<やりたい事> pythonで 以下の機械data のFFT 周波数解析をしたいです。
色々しらべ FFTの式は見つけたのですが どうもあてはめる場所があっているかもわからない状況です。結果が 例題にあったようにきれいな波になりません。
波がいくつかに分かれない。
2パターン試しましたが どちらも上手くいきません。
初心者のため 何をどこに入れたらよいのか理解ができません。
宜しくお願い致します。
1秒単位 (86400秒/日)
サンプルデータ
日付 時間 機械
2020/10/10 0:00:00 342
2020/10/10 0:00:01 245
2020/10/10 0:00:02 206
2020/10/10 0:00:03 173
:
:
2020/10/10 23:59:57 419
2020/10/10 23:59:58 467
2020/10/10 23:59:59 536
Python 3.7
import numpy as np
from numpy.fft import fftn, ifftn, fftfreq
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# csvファイルdataの読み込み
df = pd.read_csv('C:/Users/Desktop/sample.csv', engine = 'python')
試しケース1
y = np.fft.fft(df['機械'])
N = len(y)
dt = 0.00000001
t = np.arange(0, N*dt, dt)
freq = np.fft.fftfreq(N, dt)
plt.plot(freq,y)
plt.xlabel('Number of data')
plt.ylabel('Output')
plt.title('FFT of macine')
試しケース2
parameters
target_freq = 1.0 # [Hz]
N = 86400
t = df['機械'] # number of data
fs = 100.0 # sampling frequency [Hz]
sample data to check FFT
dt = 1 / fs
#t = np.arange(N) * dt
y = np.sin(2 * np.pi * target_freq * t)
FFT
f = np.fft.fftfreq(N, dt)
y_hat = np.fft.fft(y)
Plot
fig, ax = plt.subplots(2, 1, figsize=(12, 9))
ax[0].plot(t, y, linestyle="--", marker=".")
ax[0].set_xlabel("Time [sec]")
i = f.argsort()
ax[1].plot(f[i], np.abs(y_hat[i]), linestyle="--", marker=".")
ax[1].set_xlabel("Freq [Hz]")
ax[1].axvline(x=target_freq, color="red")
plt.show()
以上 宜しくお願い致します。
あなたの回答
tips
プレビュー