我正在分析一个我非常确定可以使用fft分解的时间序列数据集。我想开发一个使用sin/cos的和来估计数据的模型,但是在python中查找频率的语法遇到了问题。
这是数据data graph的图表
这是到原始数据的链接:https://drive.google.com/open?id=1mqZtQ-txdd_AFbKGBlbSL6903CK-_kXl
我见过的大多数示例每秒/时间段都有多个样本,但是这个集合中的数据表示某些指标的每分钟观察值。正因为如此,我在网上翻译这个问题的答案时遇到了麻烦
这是我天真的第一种方法
X = fftpack.fft(data)
freqs = fftpack.fftfreq(len(data))
plt.plot(freqs, np.abs(X))
plt.show()我的图不是在主要频率处达到峰值,而是在0处只有一个峰值。result
发布于 2019-06-14 07:12:58
您发布的FFT已被移位,因此0位于中心。中心左侧的数据表示负频率,右侧的数据表示正频率。如果你放大并仔细观察,我想你会看到靠近中心的两个峰,你将其解释为在0处的一个峰。从积极的方面来看,这个峰值的位置将告诉你哪个频率正在贡献重要的信号功率。
就像你说的,你的x轴可能是不正确的。scipy.fftpack.fftfreq需要知道时域信号采样之间的时间间隔(我想是以秒为单位),以便正确确定带宽并创建以Hz为单位的x轴数组。这应该可以做到:
dt = 60 # 60 seconds between samples
freqs = fftpack.fftfreq(len(data),dt)https://stackoverflow.com/questions/56588488
复制相似问题