可视化傅立叶变换(python fft)的组件时遇到问题

时间:2019-06-13 21:00:18

标签: python fft

我正在分析一个时间序列数据集,我确信可以使用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

1 个答案:

答案 0 :(得分:2)

您发布的FFT已移动,因此0居中。中心左侧的数据代表负频率,右侧的数据代表正频率。如果放大并更仔细地看,我想您会看到在中心附近有两个峰,您将它们解释为0的单个峰。仅从正向看,该峰的位置将告诉您频率正在贡献重要的信号功率。

就像您说的那样,您的x轴可能不正确。 scipy.fftpack.fftfreq需要知道您的时域信号采样之间的时间(以秒为单位),才能正确确定带宽并创建以Hz为单位的x轴阵列。应该这样做:

dt = 60 # 60 seconds between samples
freqs = fftpack.fftfreq(len(data),dt)