繁体   English   中英

奇怪的FFT输出python

[英]Strange FFT output python

我正在尝试进行FFT并将其绘制出来。 问题是,我的代码适用于较小的频率(例如50),但不适用于所需的较大频率。 我的代码怎么了?! 我希望在输入的正弦波频率处出现尖峰,但是尖峰在不同的频率上取决于我使用的采样间隔。

bins = 600
ss = 2048
freq = 44100
centerfreq = freq*bins/ss
# Number of samplepoints
N = ss
# sample spacing
T = 1 / 800.
x = np.linspace(0.0, N*T, N)
y = sin(2*np.pi*centerfreq*x)
yf = fft(y)
xf = np.linspace(0.0, 1.0/(2.0*T), N/2)
plt.plot(xf, 2.0/N * np.abs(yf[0:N/2]), 'r')

代码正确,您需要重新整理傅立叶理论和奈奎斯特采样定理,并确保数字有意义。 问题出在您的x轴刻度上。 plot函数将x中的第一项与y中的第一项一起绘制,如果x没有按您的期望缩放,您将感到意外。 如果绘制正弦信号(正弦波)并期望“度”,并且例如获得弧度,也会看到此信息。 您有责任很好地进行扩展,以使其符合您的期望。

请参阅此SO答案https://stackoverflow.com/a/25735436/2061422

from scipy import *
from numpy import *
from pylab import *  # imports for me to get going

bins = 600
ss = 2048
freq = 44100
centerfreq = freq*bins/ss
print centerfreq
# Number of samplepoints
N = ss
# sample spacing
T = 1. / freq   # i have decreased the spacing considerably
x = np.linspace(0.0, N*T, N)
sample_spacing = x[1] - x[0]  # but this is the real sample spacing
y = sin(2*np.pi*centerfreq*x)
yf = fft(y)
xf = np.linspace(0.0, 1.0/(2.0*T), N/2)
freqs = np.fft.fftfreq(len(y), sample_spacing) # read the manual on this fella.
plt.plot(freqs[:N/2], 1.0/N * np.abs(yf[0:N/2]), 'r')
plt.grid()
plt.show()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM