在python fft没有在正确的地方显示高峰

我试图了解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倍


  • 你的datay是真实的,所以也许你应该使用scipy.fftpack.rfft为真实序列进行scipy.fftpack.rfft
  • 如果您正在寻找具有两个不同峰值的FFT,那么您必须给它的数据是正弦波的总和,该正弦波的项的周期是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()
    

    在这里输入图像描述

    链接地址: http://www.djcxy.com/p/67757.html

    上一篇: fft in python not showing peaks in right place

    下一篇: git push error: HTTP request failed: The requested URL returned 504