您如何计算指数移动平均线的X°步长?

时间:2017-11-10 15:04:58

标签: c++ algorithm moving-average

我使用基本Exponential Moving Average filter

来平滑一些数据
int main ()
{
    double a0 = 0.1;
    double input = 8.0;
    double z = 0.0;

    for(int i=0; i < 200; i++) {
        z += a0 * (input - z);
        std::cout << i  << "° : "<< z << std::endl;
    }
}

由于某些原因,我想每X(= 8)步骤做一次。 事实是,就目前而言,我不知道如何计算每8°输入。我仍然处理每个输入,只“存储”8°。

你如何“节省CPU”避免在每一步计算它?是否有一系列我可以提前计算8°的值?

这是我所拥有的实际code(每一步都很顺利):

int main ()
{
    double a0 = 0.1;
    double input = 8.0;
    double z = 0.0;
    int step = 8;


    for(int i=0; i < 200; i+=8) {
        z += a0 * (input - z);
        std::cout << i  << "° : "<< z << std::endl;

        int j = 1;
        while (j++ < step) {
            z += a0 * (input - z);
        }
    }
}

我想避免将“7步骤”变成一个独特的操作。有可能吗?

1 个答案:

答案 0 :(得分:3)

它被称为指数移动平均函数的原因是:差(input - z0)是步数的指数递减函数。实际上,在N步后,减少为pow(1-a0,N)

现在相关数学是pow(x,N) == pow(pow(x,8), N/8)