1
0
Fork 0

Fix #1186 moving average filter

fix incorrect behaviour of the moving average filter as reported
and patched by bmbroom.
This commit is contained in:
Torsten Dreyer 2013-09-05 10:21:44 +02:00
parent b24d8f2159
commit 7e117d2558

View file

@ -224,11 +224,23 @@ void MovingAverageFilterImplementation::initialize( double initvalue )
double MovingAverageFilterImplementation::compute( double dt, double input )
{
std::deque<double>::size_type samples = _samplesInput.get_value();
_inputQueue.resize(samples+1, 0.0);
if (_inputQueue.size() != samples) {
// For constant size filters, this code executed once.
bool shrunk = _inputQueue.size() > samples;
_inputQueue.resize(samples, _output_1);
if (shrunk) {
_output_1 = 0.0;
for (int ii = 0; ii < samples; ii++)
_output_1 += _inputQueue[ii];
_output_1 /= samples;
}
}
double output_0 = _output_1 + (input - _inputQueue.back()) / samples;
_output_1 = output_0;
_inputQueue.pop_back();
_inputQueue.push_front(input);
return output_0;
}