]> git.mxchange.org Git - flightgear.git/commitdiff
Fix #1186 moving average filter
authorTorsten Dreyer <Torsten@t3r.de>
Thu, 5 Sep 2013 08:21:44 +0000 (10:21 +0200)
committerTorsten Dreyer <Torsten@t3r.de>
Thu, 5 Sep 2013 08:21:44 +0000 (10:21 +0200)
fix incorrect behaviour of the moving average filter as reported
and patched by bmbroom.

src/Autopilot/digitalfilter.cxx

index d0e4b9423ef3197c4004fdd65fb341063d426ec1..2754a27e2fdfbd42094c96c44da8ed0381b53fdb 100644 (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;
 }