使用傅立叶分析进行时间序列预测

时间:2010-12-18 18:41:25

标签: python math matlab

对于已知具有季节性或日常模式的数据,我想使用傅立叶分析来进行预测。在运行时间序列数据fft后,我获得系数。如何使用这些系数进行预测?

我相信FFT假设它接收的所有数据构成一个周期,然后,如果我只是使用ifft重新生成数据,我也重新生成我的函数的延续,那么我可以将这些值用于未来的值吗?

简单地说:我运行fft为t = 0,1,2,.. 10然后在coef上使用ifft,我可以使用重新生成的时间序列为t = 11,12,... 20?

3 个答案:

答案 0 :(得分:33)

我知道这个问题对你来说可能不再适用,但是对于那些正在寻找答案的人我写了一个非常简单的Python中{4}} {/ 3>的外推法的例子。

在运行脚本之前,请确保已安装所有依赖项(numpy,matplotlib)。随意尝试一下。 enter image description here 附:局部静止小波可能比傅立叶外推更好。 LSW通常用于预测时间序列。傅立叶外推的主要缺点是它只是用周期N重复你的系列,其中N是你的时间序列的长度。

答案 1 :(得分:23)

听起来你想要一个外推去噪的组合。

您说您想要在多个时段重复观察到的数据。那么,只需重复观察到的数据。无需傅立叶分析。

但你也想找到“模式”。我认为这意味着在观察到的数据中找到主要频率成分。然后是,采用傅里叶变换,保留最大系数,并消除其余系数。

X = scipy.fft(x)
Y = scipy.zeros(len(X))
Y[important frequencies] = X[important frequencies]

关于周期性重复:设z = [x, x],即信号x的两个周期。然后Z[2k] = X[k]为{0,1,...,N-1}中的所有k,否则为零。

Z = scipy.zeros(2*len(X))
Z[::2] = X

答案 2 :(得分:7)

在时间序列数据上运行FFT时,会将其转换为频域。系数乘以系列中的项(正弦和余弦或复指数),每个都具有不同的频率。

外推总是危险的,但欢迎你试试。当你这样做的时候,你正在使用过去的信息来预测未来:“通过今天的预测来预测明天的天气。”请注意风险。

我建议阅读"Black Swan"