【问题标题】:How to efficiently compute WEIGHTED moving average如何有效地计算加权移动平均线
【发布时间】:2017-02-20 02:39:24
【问题描述】:

我需要计算一个没有循环且不存储信息的加权移动平均值。权重可以是线性的,因此旧样本的权重小于新样本的权重。

例如,使用 20 个样本窗口,我的权重向量将是:

[1 2 3 4 5 ... 20]

我正在使用以下公式来计算移动均值:

   newMean = currMean + (newSample - currMean)/WindowSize

现在我需要“注入”重量。

我能知道的: 1.我正在考虑哪个样本(14th....26th....),我可以数数。 2.当然,我可以知道currMean

我可以知道但我不想做的事情: 1. 存储所有样本(在我的情况下它们是 1200 x 1980 x 3 矩阵,我根本无法存储它们)。

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

谢谢。

【问题讨论】:

  • 我将只使用卷积并构造您的过滤器,使所有权重总和为 1。即(1:20) ./ sum(1:20)
  • 嗯,我正在使用非常大的矩阵,我不认为卷积对我有好处。我的意思是..我现在只使用 3 个简单的数学运算,为什么我应该只为权重引入卷积?
  • 卷积精确地完成你想要做的事情,而且效率很高
  • 我一次只能访问一个样本(我不记得其他样本)。
  • 您可能想看看 (en.wikipedia.org/wiki/Moving_average),它告诉您如何计算指数加权移动平均值,而无需像现在这样使用更多存储空间。

标签: matlab math mean weighted


【解决方案1】:

研究数字信号处理技术。您正在描述一个 FIR 滤波器,它可以实现为卷积或内存高效电路。基本上你可以将它重写为一个递归方程,它只保留过滤器长度超过过滤的中间状态变量。 MATLAB 在filter 函数中执行此操作(您可以链接内部状态以继续过滤)。请参阅filter 的文档,我还建议阅读 DSP 教科书。

【讨论】:

    猜你喜欢
    • 2017-12-19
    • 2012-04-26
    • 2015-05-03
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 2019-07-08
    • 2014-11-18
    相关资源
    最近更新 更多