Added movingaverage class for averaging accelerometer data.
authorKai Rasilainen <kai.rasilainen@gmail.com>
Tue, 23 Mar 2010 07:57:15 +0000 (09:57 +0200)
committerKai Rasilainen <kai.rasilainen@gmail.com>
Tue, 23 Mar 2010 07:57:15 +0000 (09:57 +0200)
Client/movingaverage.cpp [new file with mode: 0644]
Client/movingaverage.h [new file with mode: 0644]

diff --git a/Client/movingaverage.cpp b/Client/movingaverage.cpp
new file mode 100644 (file)
index 0000000..645f34a
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ *  Class for moving average of acceleration data.
+ *
+ * @author      Kai Rasilainen
+ * @copyright   (c) 2010 Speed Freak team
+ * @license     http://opensource.org/licenses/gpl-license.php GNU Public License
+ */
+
+#include "movingaverage.h"
+#include <QList>
+
+MovingAverage::MovingAverage(int sizeLimit)
+{
+    SizeLimit = sizeLimit;
+}
+
+double MovingAverage::Average()
+{
+    double sum = 0;
+
+    if (queue.count() == 0)
+        return 0;
+
+    QList<double> temp = queue;
+    foreach (double value, temp)
+    {
+        sum += value;
+    }
+
+    return sum / queue.count();
+}
+
+void MovingAverage::Resize(int sizeLimit)
+{
+    SizeLimit = sizeLimit;
+    while (queue.count() > SizeLimit)
+    {
+        queue.dequeue();
+    }
+}
+
+void MovingAverage::Enqueue(double item)
+{
+    queue.enqueue(item);
+    if (queue.count() > SizeLimit)
+        queue.dequeue();
+}
+
+
diff --git a/Client/movingaverage.h b/Client/movingaverage.h
new file mode 100644 (file)
index 0000000..53962fb
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ *  Class for moving average of acceleration data.
+ *
+ * @author      Kai Rasilainen
+ * @copyright   (c) 2010 Speed Freak team
+ * @license     http://opensource.org/licenses/gpl-license.php GNU Public License
+ */
+
+#ifndef MOVINGAVERAGE_H
+#define MOVINGAVERAGE_H
+
+#include <QQueue>
+
+class MovingAverage
+{
+
+public:
+    MovingAverage(int sizeLimit);
+
+    double Average();
+    void Resize(int sizeLimit);
+    void Enqueue(double item);
+
+private:
+    int SizeLimit;
+    QQueue<double> queue;
+};
+
+#endif // MOVINGAVERAGE_H