Мне нужна помощь с проблемой экспоненциального сглаживания в C ++
Сглаживание следует этому уравнению:
newValue = inputSignal*smoothFactor + (1-smoothFactor)*oldValue
Моя функция должна иметь только один входной параметр, то есть inputSignal
параметр ( smoothFactor
может быть объявлен внутри функции и не является предметом проблемы) и один выходной параметр, то есть newValue
,
Теперь у меня проблема в том, что в ПЕРВОМ расчете отсутствует oldValue
, так как oldValue
является предшествующим newValue
в первом вызове функции.
Итак oldValue
должен равняться первому inputSignal
в первом вызове функции.
Это означает, что при первом вызове моя функция должна вести себя иначе, чем при каждом последующем вызове. Я могу решить это, если я объявлю глобальный i=0
параметр и подсчитать i++
после первого звонка. Это, однако, не является функцией, независимой от внешних обстоятельств, что и должно быть.
Я смог решить проблему с i=0
а также i++
глобальные переменные, но не могут найти решение без этого.
Вы можете использовать локальную статическую переменную в функции (см. этот вопрос). Локальные статические переменные инициализируются один раз при первом вызове метода. Таким образом, вы можете использовать это:
double smooth(double inputSignal) {
static double oldValue = inputSignal; // Executed only once on first invocation
double newValue = inputSignal*smoothFactor + (1-smoothFactor)*oldValue;
oldValue = newValue; // Store it for next invocation
return newValue;
}