2016-10-11 90 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教科书。