Bayley Wang
/
foc-ed_in_the_bot_compact
robot
Filter/Filter.h@155:7c6005933d4c, 2017-05-04 (annotated)
- Committer:
- bwang
- Date:
- Thu May 04 17:35:10 2017 +0000
- Revision:
- 155:7c6005933d4c
- Parent:
- 150:08c13bfc7417
- Child:
- 224:90172915d0fb
05/04/2017 13:34 - changed logic in PwmIn::handle_fall, which no longer resets timer on invalid edges
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bwang | 150:08c13bfc7417 | 1 | #ifndef __FILTER_H |
bwang | 150:08c13bfc7417 | 2 | #define __FILTER_H |
bwang | 150:08c13bfc7417 | 3 | |
bwang | 144:a9e7fa1c98d7 | 4 | #include "mbed.h" |
bwang | 144:a9e7fa1c98d7 | 5 | #include "math.h" |
bwang | 144:a9e7fa1c98d7 | 6 | |
bwang | 144:a9e7fa1c98d7 | 7 | class CircularBuffer { |
bwang | 144:a9e7fa1c98d7 | 8 | public: |
bwang | 147:c1b2379b8874 | 9 | CircularBuffer(int length, bool use_median); |
bwang | 144:a9e7fa1c98d7 | 10 | float oldest() {if (oldest_index >= 0) return buf[oldest_index]; return 0.0f;} |
bwang | 144:a9e7fa1c98d7 | 11 | float newest() {if (newest_index >= 0) return buf[newest_index]; return 0.0f;} |
bwang | 144:a9e7fa1c98d7 | 12 | int length() {return _length;} |
bwang | 144:a9e7fa1c98d7 | 13 | void add(float x); /*recomputes mean, median - O(length) time*/ |
bwang | 144:a9e7fa1c98d7 | 14 | float &at(int index); |
bwang | 144:a9e7fa1c98d7 | 15 | public: |
bwang | 144:a9e7fa1c98d7 | 16 | float &operator[](int index) {return at(index);} |
bwang | 144:a9e7fa1c98d7 | 17 | public: |
bwang | 144:a9e7fa1c98d7 | 18 | /*O(1) time*/ |
bwang | 144:a9e7fa1c98d7 | 19 | float mean(); |
bwang | 144:a9e7fa1c98d7 | 20 | float median(); |
bwang | 144:a9e7fa1c98d7 | 21 | private: |
bwang | 144:a9e7fa1c98d7 | 22 | int _length; |
bwang | 147:c1b2379b8874 | 23 | bool _use_median; |
bwang | 144:a9e7fa1c98d7 | 24 | int oldest_index, newest_index, num; |
bwang | 144:a9e7fa1c98d7 | 25 | float sum; |
bwang | 144:a9e7fa1c98d7 | 26 | private: |
bwang | 144:a9e7fa1c98d7 | 27 | float *buf; |
bwang | 144:a9e7fa1c98d7 | 28 | float *sorted; |
bwang | 146:296bcc30e65d | 29 | }; |
bwang | 146:296bcc30e65d | 30 | |
bwang | 146:296bcc30e65d | 31 | class Filter { |
bwang | 146:296bcc30e65d | 32 | public: |
bwang | 146:296bcc30e65d | 33 | virtual float update(float x) = 0; |
bwang | 146:296bcc30e65d | 34 | }; |
bwang | 146:296bcc30e65d | 35 | |
bwang | 146:296bcc30e65d | 36 | class MedianFilter : public Filter { |
bwang | 146:296bcc30e65d | 37 | public: |
bwang | 146:296bcc30e65d | 38 | MedianFilter(int length); |
bwang | 146:296bcc30e65d | 39 | virtual float update(float x); |
bwang | 146:296bcc30e65d | 40 | private: |
bwang | 146:296bcc30e65d | 41 | CircularBuffer *buf; |
bwang | 146:296bcc30e65d | 42 | }; |
bwang | 146:296bcc30e65d | 43 | |
bwang | 146:296bcc30e65d | 44 | class MovingAverageFilter : public Filter { |
bwang | 146:296bcc30e65d | 45 | public: |
bwang | 146:296bcc30e65d | 46 | MovingAverageFilter(int length); |
bwang | 146:296bcc30e65d | 47 | virtual float update(float x); |
bwang | 146:296bcc30e65d | 48 | private: |
bwang | 146:296bcc30e65d | 49 | CircularBuffer *buf; |
bwang | 146:296bcc30e65d | 50 | }; |
bwang | 150:08c13bfc7417 | 51 | |
bwang | 150:08c13bfc7417 | 52 | #endif |