您将如何计算指数移动平均线的 X° 步长?
How would you calculate the X° step of an Exponential 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° 输入一次。我仍然处理每个输入,"store" 只有 8°。
你会如何"save 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 个步骤”变成一个独特的操作。可能吗?
它被称为 指数 移动平均函数是有原因的:差异 (input - z0)
是步数的指数递减函数。事实上,在 N 步之后减少的是 pow(1-a0,N)
。
现在相关的数学是pow(x,N) == pow(pow(x,8), N/8)
。
我使用基本的 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° 输入一次。我仍然处理每个输入,"store" 只有 8°。
你会如何"save 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 个步骤”变成一个独特的操作。可能吗?
它被称为 指数 移动平均函数是有原因的:差异 (input - z0)
是步数的指数递减函数。事实上,在 N 步之后减少的是 pow(1-a0,N)
。
现在相关的数学是pow(x,N) == pow(pow(x,8), N/8)
。