2016-10-11 127 views
1

我需要計算一個加權移動平均無循環和存儲信息的過程。重量可能是線性的,因此舊樣本的權重小於新樣本的權重。如何高效地計算加權移動平均數

例如,使用20個樣本的窗口,我的權重向量是:

[1 2 3 4 5 ... 20] 

我使用下面的公式來計算移動平均值:

newMean = currMean + (newSample - currMean)/WindowSize 

現在我需要「注入」體重。我可以知道: 1.我正在考慮哪個樣本(第14 ....第26 ....),我可以算。 當然2,我可以知道currMean

我能知道,但我不想做的事: 1.存儲所有樣本(在我的情況下,他們是1200 X 1980年×3矩陣,我根本就不存儲它們)。

我目前使用Matlab,但我真的不需要代碼,只是概念,如果它存在。

謝謝。

+1

我只是使用卷積和構造你的過濾器,使所有的權重總和爲1.即'(1:20)./ sum(1:20)' – Suever

+0

嗯我使用非常大的矩陣,我不我不認爲卷積對我有好處。我的意思是......我現在只是使用3個簡單的數學運算,爲什麼我只爲重量引入卷積? – Leo91

+2

卷積確實*精確*您正在嘗試做什麼,並且非常有效地做到這一點 – Suever

回答

0

研究數字信號處理技術。您正在描述一個FIR濾波器,它可以作爲卷積來實現,或者作爲一個高效的存儲電路來實現。基本上,您可以將其重寫爲遞歸方程,該方程只保留過濾器過去的過濾中間狀態變量。 MATLAB在filter函數中執行此操作(您可以鏈接內部狀態以繼續過濾)。請參閱filter的文檔,我也推薦閱讀DSP教科書。