a floating median filter to filter floating point data such as analog inputs

Dependents:   Quadcopter_mk2

Fork of filter by Ad van der Weiden

Files at this revision

API Documentation at this revision

Comitter:
joe4465
Date:
Wed Apr 01 11:18:55 2015 +0000
Parent:
0:46a72e790df8
Commit message:
...

Changed in this revision

filter.cpp Show annotated file Show diff for this revision Revisions of this file
filter.h Show annotated file Show diff for this revision Revisions of this file
diff -r 46a72e790df8 -r 9ce370b360ba filter.cpp
--- a/filter.cpp	Wed Feb 16 20:05:42 2011 +0000
+++ b/filter.cpp	Wed Apr 01 11:18:55 2015 +0000
@@ -1,9 +1,9 @@
 #include <float.h>
 #include "filter.h"
 
-medianFilter::medianFilter(int window): N(window) {
+filter::filter(int window): N(window) {
     big = new bool[N];
-    val = new float[N];
+    val = new double[N];
     big = new bool[N];
     i = 0;
     for (int j = 0; j < N; j++) {
@@ -14,8 +14,8 @@
     median=0;
 }
 
-int medianFilter::findmax() {
-    float m = -FLT_MAX;
+int filter::findmax() {
+    double m = -FLT_MAX;
     int n = -1;
     for (int j = 0; j < N; j++) {
         if (j == med) continue;
@@ -29,8 +29,8 @@
     return n;
 }
 
-int medianFilter::findmin() {
-    float m = FLT_MAX;
+int filter::findmin() {
+    double m = FLT_MAX;
     int n = -1;
     for (int j = 0; j < N; j++) {
         if (big[j]) { //find min
@@ -43,7 +43,7 @@
     return n;
 }
 
-float medianFilter::process(float in) {
+double filter::process(double in) {
     //the value at position 'i' is to be replaced by 'in' and the new median is computed
     //var 'median' refers to the old median
     //  val[j] <= median <= val[k]
@@ -79,3 +79,8 @@
     median = val[med];
     return median;
 }
+
+double filter::getMedian()
+{
+    return median;
+}
diff -r 46a72e790df8 -r 9ce370b360ba filter.h
--- a/filter.h	Wed Feb 16 20:05:42 2011 +0000
+++ b/filter.h	Wed Apr 01 11:18:55 2015 +0000
@@ -1,24 +1,21 @@
 #ifndef FILTER_H
 #define FILTER_H
 
-class filter {
-public:
-    virtual float process(float in) {
-        return in;
-    }
-};
-
-class medianFilter: public filter {
+class filter 
+{
+  private:
     int N;
-    float *val;
+    double *val;
     bool *big;
     int med, i;
-    float median;
+    double median;
     int findmax();
     int findmin();
-public:
-    medianFilter(int window = 3); //every window >= 1 is allowed but the behaviour for even window sizes is not well defined
-    virtual float process(float);
+
+  public:
+    filter(int window = 3); //every window >= 1 is allowed but the behaviour for even window sizes is not well defined
+    double process(double);
+    double getMedian();
 };
 
 #endif
\ No newline at end of file