我有时间相关的数据,我想对其执行傅立叶变换。数据位于http://pastebin.com/2i0UGJW9。问题是数据不是均匀间隔的。为了解决这个问题,我尝试对数据进行插值,然后执行快速傅立叶变换。
import numpy as np
from scipy.fftpack import fft, fftfreq, fftshift
from scipy.interpolate import interp1d
import matplotlib.pyplot as plt
x = np.linspace(min(times), max(times), len(times))
y = interp1d(times, data)(x)
yf = fft(y)
xf = fftfreq(len(times), (max(times)-min(times))/len(times))
xf = fftshift(xf)
yplot = fftshift(yf)
plt.figure()
plt.plot(xf, 1.0/len(times) * np.abs(yplot))
plt.grid()
plt.show()
Run Code Online (Sandbox Code Playgroud)
然而,这给出了以零为中心的单个尖峰,而不是预期的频率图。我怎样才能得到这个以给出准确的结果?