我使用fft分析了以下的sunspots.dat数据,这是一个经典的例子。我得到了来自fft的实数和虚数部分的结果。然后我尝试使用这些系数(前20个)按照傅里叶变换的公式重新创建数据。考虑到实数部分对应于a_n,虚数部分对应于b_n,我得到了:
import numpy as np
from scipy import *
from matplotlib import pyplot as gplt
from scipy import fftpack
def f(Y,x):
total = 0
for i in range(20):
total += Y.real[i]*np.cos(i*x) + Y.imag[i]*np.sin(i*x)
return total
tempdata = np.loadtxt("sunspots.dat")
year=tempdata[:,0]
wolfer=tempdata[:,1]
Y=fft(wolfer)
n=len(Y)
print n
xs = linspace(0, 2*pi,1000)
gplt.plot(xs, [f(Y, x) for x in xs], '.')
gplt.show()
然而,由于某些原因,我的图形与ifft生成的图形不一致(两侧使用相同数量的系数)。可能出了什么问题?
数据:
np.abs(fft(wolfer*hanning(len(wolfer))))
,则n=30附近的峰值显示比没有窗口时更多的结构。 - mtrw