mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-10 04:53:04 +02:00
add a decay to the event delta average
This commit is contained in:
parent
cf1254f53b
commit
6e540d166b
2 changed files with 19 additions and 14 deletions
|
@ -9,26 +9,24 @@
|
|||
#include "SharedUtil.h"
|
||||
#include "SimpleMovingAverage.h"
|
||||
|
||||
SimpleMovingAverage::SimpleMovingAverage(float numSamplesToAverage) :
|
||||
SimpleMovingAverage::SimpleMovingAverage(int numSamplesToAverage) :
|
||||
_numSamples(0),
|
||||
_numSamplesToAverage(numSamplesToAverage),
|
||||
_average(0),
|
||||
_eventDeltaAverage(0) {
|
||||
_eventDeltaAverage(0),
|
||||
WEIGHTING(1.0f / numSamplesToAverage),
|
||||
ONE_MINUS_WEIGHTING(1 - WEIGHTING) {
|
||||
|
||||
}
|
||||
|
||||
int SimpleMovingAverage::updateAverage(float sample) {
|
||||
if (_numSamples > 0) {
|
||||
|
||||
float firstCoefficient = 1 - (1.0f / _numSamplesToAverage);
|
||||
float secondCoefficient = (1.0f / _numSamplesToAverage);
|
||||
|
||||
_average = (firstCoefficient * _average) + (secondCoefficient * sample);
|
||||
_average = (ONE_MINUS_WEIGHTING * _average) + (WEIGHTING * sample);
|
||||
|
||||
float eventDelta = (usecTimestampNow() - _lastEventTimestamp) / 1000000;
|
||||
|
||||
if (_numSamples > 1) {
|
||||
_eventDeltaAverage = (firstCoefficient * _eventDeltaAverage) +
|
||||
(secondCoefficient * eventDelta);
|
||||
_eventDeltaAverage = (ONE_MINUS_WEIGHTING * _eventDeltaAverage) +
|
||||
(WEIGHTING * eventDelta);
|
||||
} else {
|
||||
_eventDeltaAverage = eventDelta;
|
||||
}
|
||||
|
@ -46,6 +44,11 @@ void SimpleMovingAverage::reset() {
|
|||
_numSamples = 0;
|
||||
}
|
||||
|
||||
float SimpleMovingAverage::getEventDeltaAverage() {
|
||||
return (ONE_MINUS_WEIGHTING * _eventDeltaAverage) +
|
||||
(WEIGHTING * ((usecTimestampNow() - _lastEventTimestamp) / 1000000));
|
||||
}
|
||||
|
||||
float SimpleMovingAverage::getAverageSampleValuePerSecond() {
|
||||
return _average * (1 / _eventDeltaAverage);
|
||||
return _average * (1 / getEventDeltaAverage());
|
||||
}
|
|
@ -14,21 +14,23 @@
|
|||
|
||||
class SimpleMovingAverage {
|
||||
public:
|
||||
SimpleMovingAverage(float numSamplesToAverage);
|
||||
SimpleMovingAverage(int numSamplesToAverage);
|
||||
|
||||
int updateAverage(float sample);
|
||||
void reset();
|
||||
|
||||
int getSampleCount() { return _numSamples; };
|
||||
float getAverage() { return _average; };
|
||||
float getEventDeltaAverage() { return _eventDeltaAverage; };
|
||||
float getEventDeltaAverage();
|
||||
float getAverageSampleValuePerSecond();
|
||||
private:
|
||||
int _numSamples;
|
||||
int _numSamplesToAverage;
|
||||
double _lastEventTimestamp;
|
||||
float _average;
|
||||
float _eventDeltaAverage;
|
||||
|
||||
const float WEIGHTING;
|
||||
const float ONE_MINUS_WEIGHTING;
|
||||
};
|
||||
|
||||
#endif /* defined(__hifi__Stats__) */
|
||||
|
|
Loading…
Reference in a new issue