Как бы вы рассчитали шаг X ° экспоненциальной скользящей средней?

Я сглаживаю некоторые данные, используя основные Exponential Moving Average фильтр:

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 °.

Как бы вы «сохранили процессор», чтобы не рассчитывать его на каждом шаге? Есть ли серия, в которой я могу просто рассчитать значение 8 ° вперед?

Это актуальный код У меня есть (что гладко на каждом шаге):

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 шагов времени» в уникальной операции. Является ли это возможным?

2

Решение

Это называется экспоненциальный функция скользящего среднего по причине: разница (input - z0) экспоненциально убывающая функция числа шагов. Фактически, после N шагов уменьшение pow(1-a0,N),

Теперь соответствующая математика pow(x,N) == pow(pow(x,8), N/8),

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]