我正在尝试理解numpy fft函数,因为我的数据减少很奇怪。 但是现在我已经改变了两个正弦的简单总和,我得到了奇怪的结果。我所拥有的峰值非常高,在零附近有几个点宽,其余部分变平。有没有人知道我可能做错了什么?
import numpy as np
from numpy import exp, sqrt, pi, linspace
from matplotlib import cm
import matplotlib.pyplot as plt
import scipy as sp
import pylab
#fourier
tdata = np.arange(5999.)/300
datay = 3*np.sin(tdata)+6*np.sin(2*tdata)
fouriery = np.fft.fft(datay)
freqs = np.fft.fftfreq(datay.size, d=0.1)
pylab.plot(freqs,fouriery)
pylab.show()
我得到的是: 虽然它应该在两侧都有两个侧面,其中一个比另一个高2倍
答案 0 :(得分:4)
datay
是真实的,所以也许你应该为一个用FFT
使用scipy.fftpack.rfft
的真实序列。2*pi/n
的整数倍,其中n = len(datay)
。如果没有,它将需要许多这样的正弦
用来近似数据的波浪。import numpy as np
import matplotlib.pyplot as plt
import scipy.fftpack as fftpack
pi = np.pi
tdata = np.arange(5999.)/300
datay = 3*np.sin(2*pi*tdata)+6*np.sin(2*pi*2*tdata)
fouriery = fftpack.rfft(datay)
freqs = fftpack.rfftfreq(len(datay), d=(tdata[1]-tdata[0]))
plt.plot(freqs, fouriery, 'b-')
plt.xlim(0,3)
plt.show()