robot

Dependencies:   FastPWM3 mbed

Filter/Filter.h

Committer:
bwang
Date:
2017-05-04
Revision:
155:7c6005933d4c
Parent:
150:08c13bfc7417
Child:
224:90172915d0fb

File content as of revision 155:7c6005933d4c:

#ifndef __FILTER_H
#define __FILTER_H

#include "mbed.h"
#include "math.h"

class CircularBuffer {
public:
    CircularBuffer(int length, bool use_median);
    float oldest() {if (oldest_index >= 0) return buf[oldest_index]; return 0.0f;}
    float newest() {if (newest_index >= 0) return buf[newest_index]; return 0.0f;}
    int length() {return _length;}
    void add(float x); /*recomputes mean, median - O(length) time*/
    float &at(int index);
public:
    float &operator[](int index) {return at(index);}
public:
    /*O(1) time*/
    float mean();
    float median();
private:
    int _length;
    bool _use_median;
    int oldest_index, newest_index, num;
    float sum;
private:
    float *buf;
    float *sorted;
};

class Filter {
public:
    virtual float update(float x) = 0;
};

class MedianFilter : public Filter {
public:
    MedianFilter(int length);
    virtual float update(float x);
private:
    CircularBuffer *buf;
};

class MovingAverageFilter : public Filter {
public:
    MovingAverageFilter(int length);
    virtual float update(float x);
private:
    CircularBuffer *buf;
};

#endif