我有一套data。它显然具有一些周期性。我想通过使用傅立叶变换找出它的频率并将其绘制出来。
这是我的一个镜头,但似乎不太好。
这是相应的代码,我不知道它失败的原因:
import numpy
from pylab import *
from scipy.fftpack import fft,fftfreq
import matplotlib.pyplot as plt
dataset = numpy.genfromtxt(fname='data.txt',skip_header=1)
t = dataset[:,0]
signal = dataset[:,1]
npts=len(t)
FFT = abs(fft(signal))
freqs = fftfreq(npts, t[1]-t[0])
subplot(211)
plot(t[:npts], signal[:npts])
subplot(212)
plot(freqs,20*log10(FFT),',')
xlim(-10,10)
show()
我的问题是:由于原始数据是非常周期性的,我希望在频域中看到峰值非常尖锐;我怎样才能使峰值更好看?
答案 0 :(得分:4)
这是数据分析的问题。
xlim(0,max(freqs))
。EDIT。 用:
dataset = numpy.genfromtxt(fname='data.txt',skip_header=1)[::30];
t,signal = dataset.T
(...)
plot(freqs,FFT)
xlim(0,1)
ylim(0,30)
光谱是
为获得最佳质量频谱,只需重新获取信号很长时间(对于美丽的峰值),采样频率为1 Hz,这将为您提供[0,0.5 Hz]频率标度(参见Nyquist标准)。