2013-03-12 60 views
0

我有一個Matlab數組,其中有Ns個元素。對於該數組中的每個元素,我想要計算該元素及其鄰居的加權平均值(平均總計n個值)。元素來自週期性數據,因此可以將數組視爲循環。在Matlab中將大陣列元素的全加權限制更小的陣列

然後,我想存儲加權平均代替該元素,並將數組下采樣到Nd = Ns/n長陣列。

理想情況下,我想使用類似於完全加權限制的東西 - 我認爲這個元素的權重比我平均衡量其鄰居的要多。例如,對於n = 3,我將用0.5來加權元素,而用0.25來加權它們的相鄰元素。

有沒有一種簡單而有效的方法來做到這一點,而不必使用下采樣函數?我的代碼必須與遠程服務器上較舊版本的Matlab兼容。

+0

[whathaveyoutried.com](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – 2013-03-12 02:37:09

+0

我做了一個循環,並寫邏輯做加權平均。由於我的數據是週期性的,我在我的數組上使用了repmat,以確保它的最終條件正確。 – vergere6 2013-03-12 04:19:54

回答

0

你在找什麼是moving average,它可以通過FIR filter獲得。假設x是你的陣列,它是一維的,你可以使用filter命令爲:

y = filter(ones(1, n), 1, x); 

下采樣的結果,使用索引:

y_downsampled = y(1:n:Ns); 

簡單地說,該ones(1, n)分別表示重量。如果你想讓一個元素的權重比其他元素的權重更大,請根據自己的喜好進行修改。在你的例子中,你可以將它改爲[0.25, 0.5, 0.25]

如果您的數組是二維的,您應該使用其他合適的過濾命令,如filter2

+1

謝謝,這應該是訣竅! – vergere6 2013-03-12 04:22:23

+0

我相信在第一個參數中應該有n除以得到平均值。 – vergere6 2013-03-12 07:28:50