22#ifndef PQ_MOVING_AVERAGE_H_
23#define PQ_MOVING_AVERAGE_H_
31constexpr float PRE_INITIALIZED_STABILIZATION_TIME = 60.0f;
34inline float computeMovingAverageUpdate(
float runningValue,
float newValue,
float alpha) {
35 return runningValue + alpha * (newValue - runningValue);
39inline float computeMovingAverageDelta(
float runningValue,
float delta) {
40 return runningValue + delta;
44inline float computeAmendMovingAverageUpdate(
float runningValue,
float previousValue,
float newValue,
float alpha) {
45 return runningValue + alpha * (newValue - previousValue);
52inline float applyMovingAverageUpdate(
float& runningValue,
float newValue,
float alpha) {
53 return runningValue = computeMovingAverageUpdate(runningValue, newValue, alpha);
57inline float applyMovingAverageDelta(
float& runningValue,
float delta) {
58 return runningValue = computeMovingAverageDelta(runningValue, delta);
62inline float amendMovingAverageUpdate(
float& runningValue,
float previousValue,
float newValue,
float alpha) {
63 return runningValue = computeAmendMovingAverageUpdate(runningValue, previousValue, newValue, alpha);
67inline float movingAverageExponentialAlpha(
float nSamples) {
69 return (nSamples > 1.0f ?
70 2.0f / (nSamples + 1) :
75inline float movingAverageSimpleAlpha(
float nSamples) {
76 return 1.0f / ((float)nSamples + 1);
80float movingAverageAlpha(
float sampleRate,
float timeWindow=INFINITE_TIME_WINDOW,
unsigned int nSamples=UINT_MAX,
bool preInitialized=
false);