我使用了fft.fft(data)并绘制了我期望的结果,该结果与输入数据的频率有关。
我原本希望能看到50 Hz,但是却有些奇怪。

import numpy as np
import math as m
import matplotlib.pyplot as plt


data=[]

for x in range(1000):
    data.append(m.sin(2*m.pi*50*0.001*x))


plt.plot(np.fft.fft(data)/len(data))

plt.show()


我应该怎么做才能看到50 Hz?

非常感谢你

最佳答案

您需要在绘图中指定x轴。

首先,创建数据:

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0, 1, 1000)
data = np.sin(2*np.pi*50*t)


现在,获取频率:

f = np.fft.fftfreq(len(data), t[1]-t[0]) # length of data, and dt


并绘制fft与频率的幅值:

data_fft = np.abs(np.fft.fft(data)) / len(data)
plt.plot(f, data_fft)

关于python - Numpy FFT结果出乎意料,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22991226/

10-17 02:41