robot

Dependencies:   FastPWM3 mbed

Committer:
bwang
Date:
Wed May 03 12:36:51 2017 +0000
Revision:
146:296bcc30e65d
Parent:
144:a9e7fa1c98d7
Child:
147:c1b2379b8874
05/03/2017 08:36 - added median and moving average filters

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bwang 144:a9e7fa1c98d7 1 #include "mbed.h"
bwang 144:a9e7fa1c98d7 2 #include "math.h"
bwang 144:a9e7fa1c98d7 3
bwang 144:a9e7fa1c98d7 4 class CircularBuffer {
bwang 144:a9e7fa1c98d7 5 public:
bwang 144:a9e7fa1c98d7 6 CircularBuffer(int length);
bwang 144:a9e7fa1c98d7 7 float oldest() {if (oldest_index >= 0) return buf[oldest_index]; return 0.0f;}
bwang 144:a9e7fa1c98d7 8 float newest() {if (newest_index >= 0) return buf[newest_index]; return 0.0f;}
bwang 144:a9e7fa1c98d7 9 int length() {return _length;}
bwang 144:a9e7fa1c98d7 10 void add(float x); /*recomputes mean, median - O(length) time*/
bwang 144:a9e7fa1c98d7 11 float &at(int index);
bwang 144:a9e7fa1c98d7 12 public:
bwang 144:a9e7fa1c98d7 13 float &operator[](int index) {return at(index);}
bwang 144:a9e7fa1c98d7 14 public:
bwang 144:a9e7fa1c98d7 15 /*O(1) time*/
bwang 144:a9e7fa1c98d7 16 float mean();
bwang 144:a9e7fa1c98d7 17 float median();
bwang 144:a9e7fa1c98d7 18 private:
bwang 144:a9e7fa1c98d7 19 int _length;
bwang 144:a9e7fa1c98d7 20 int oldest_index, newest_index, num;
bwang 144:a9e7fa1c98d7 21 float sum;
bwang 144:a9e7fa1c98d7 22 private:
bwang 144:a9e7fa1c98d7 23 float *buf;
bwang 144:a9e7fa1c98d7 24 float *sorted;
bwang 146:296bcc30e65d 25 };
bwang 146:296bcc30e65d 26
bwang 146:296bcc30e65d 27 class Filter {
bwang 146:296bcc30e65d 28 public:
bwang 146:296bcc30e65d 29 virtual float update(float x) = 0;
bwang 146:296bcc30e65d 30 };
bwang 146:296bcc30e65d 31
bwang 146:296bcc30e65d 32 class MedianFilter : public Filter {
bwang 146:296bcc30e65d 33 public:
bwang 146:296bcc30e65d 34 MedianFilter(int length);
bwang 146:296bcc30e65d 35 virtual float update(float x);
bwang 146:296bcc30e65d 36 private:
bwang 146:296bcc30e65d 37 CircularBuffer *buf;
bwang 146:296bcc30e65d 38 };
bwang 146:296bcc30e65d 39
bwang 146:296bcc30e65d 40 class MovingAverageFilter : public Filter {
bwang 146:296bcc30e65d 41 public:
bwang 146:296bcc30e65d 42 MovingAverageFilter(int length);
bwang 146:296bcc30e65d 43 virtual float update(float x);
bwang 146:296bcc30e65d 44 private:
bwang 146:296bcc30e65d 45 CircularBuffer *buf;
bwang 146:296bcc30e65d 46 };