2014-01-08 55 views
0

我想使用FastFourierTransformation來識別模式,以便預測未來的監測指標值。我想要做的是:如何使用apache的commons.math FastFourierTransformer進行時間序列預測

我監控傳入流量負載,這是季節性重複(白天高選),另外還有一週時間內的趨勢(週末時流量更低,季節性重複)。 雖然我嘗試了一些增強迴歸算法,但我也想使用FFT來識別最重要的係數,以識別這兩個最重要的頻率,然後嘗試進行外推以預測流量在不遠的將來。 雖然我在數學方面的理論背景給我帶來了一些麻煩,但我正在努力與apache.commons.math3.transform.FastFourierTransformation。 假設我用doube [] array存儲在觀察的時間內我最新的交通負荷,我使用下面的代碼:

double [] initialSignal = getMonitoringData(timeslide);

FastFourierTransformer fft = new FastFourierTransformer(DftNormalization.STANDARD);

Complex [] result = fft.transform(initialSignal, TransformType.FORWARD);

但是我不熟悉Complex []數組表示什麼。數組中每個Complex對象的虛數屬性是否代表相關的正弦係數? 因此,如果我想採用去噪後的初始信號,我只需將Complex []結果數組的較低有效係數設置爲零即可。 但儘管如此,如果我有以下

Complex [] denoised = fft.transform(importantCoefficiants, TransformType.INVERSE);

的結果仍然是複雜的陣列。我怎樣才能得到時間序列的新變換的x(t)值? 如何預測x(t+1), x(t+2) ... x(t+n) values,如何去除初始時間序列後?

+0

自從大學以來已經有一段時間了,但我認爲複數的大小代表了該頻率的功率,而方向則表示該分量的相位。所以你想找到sqrt(re^2 + im^2)最大的係數。 – erickson

回答

0

嗯,我想我昨天晚上找到了一個解決方案,與埃裏克森的答案非常相似。 我計算了x^2 + y^2,然後我考慮了最重要的係數。我將數組的其他元素設置爲零,然後執行IFFT。我現在的最後一個問題是:

我如何推斷Complex數組中的給定結果以預測未來值?例如,如果我有n = 4096個樣本(Complex [4096]數組)作爲我的輸入,那麼我假設x(n + 1)的值將是數組[0]的值,x (n + 2)將是數組[1]等的值?

相關問題