From: Torsten Dreyer Date: Thu, 5 Sep 2013 08:21:44 +0000 (+0200) Subject: Fix #1186 moving average filter X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=7e117d25585bb5c705d9a0cd0aab0dbe02a9b568;p=flightgear.git Fix #1186 moving average filter fix incorrect behaviour of the moving average filter as reported and patched by bmbroom. --- diff --git a/src/Autopilot/digitalfilter.cxx b/src/Autopilot/digitalfilter.cxx index d0e4b9423..2754a27e2 100644 --- a/src/Autopilot/digitalfilter.cxx +++ b/src/Autopilot/digitalfilter.cxx @@ -224,11 +224,23 @@ void MovingAverageFilterImplementation::initialize( double initvalue ) double MovingAverageFilterImplementation::compute( double dt, double input ) { std::deque::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; }