pythonでFFTしてみた

便利な世の中になったもんだ。
参考にしたのは
org-technology.com
ism1000ch.hatenablog.com
など。
ソースは以下。

import numpy as np
from scipy.fftpack import fft
from scipy.fftpack import fftfreq
from scipy.fftpack import fftshift
import matplotlib.pyplot as plt
import pandas as pd

#データ数
N = 800   

#サンプリング周期(sec)
dt = 0.001

#周波数  
f = 5.0

#時間軸       
t = np.linspace(1,N,N) * dt - dt

#時系列データ
y = np.sin(2 * np.pi * f * t)

#周波数軸(MATLAB等で言うfftshiftがかかっている)
freq = fftfreq(N,dt)

#FFT
yf = fft(y)

plt.figure(1)
plt.xlabel("time(sec)")
plt.ylabel("value(a.u.)")
plt.plot(t,y)

plt.figure(2)
plt.xlabel("freq(Hz)")
plt.ylabel("amplitude(a.u.)")
plt.plot(freq,np.abs(yf))
#plt.plot(freq,np.real(yf)) #実部
#plt.plot(freq,np.imag(yf)) #虚部

print(np.real(yf))
plt.show()

df = pd.DataFrame(freq)
df.to_csv("freq.csv")


5Hzのsin波
f:id:ossannt:20170720231304p:plain

FFT結果(power)
f:id:ossannt:20170720231307p:plain