我使用基本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步骤”变成一个独特的操作。有可能吗?
答案 0 :(得分:3)
它被称为指数移动平均函数的原因是:差(input - z0)
是步数的指数递减函数。实际上,在N步后,减少为pow(1-a0,N)
。
现在相关数学是pow(x,N) == pow(pow(x,8), N/8)
。