ver.beta0
Diff: DigitalFilter.h
- Revision:
- 0:b7a168dd2734
- Child:
- 1:2d33daf35ed1
diff -r 000000000000 -r b7a168dd2734 DigitalFilter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DigitalFilter.h Wed Sep 10 04:28:53 2014 +0000 @@ -0,0 +1,89 @@ +#ifndef DIGITALFILTER_H +#define DIGITALFILTER_H +#include "mbed.h" +#include "math.h" +#include<vector> + +//enumrator to choose filter type +typedef enum FilterType{ + LPF1, + LPF2, + HPF1, + HPF2, + RESONANCE, + NOTCH, + HILBERT, +}FilterType; + +class DigitalFilter +{ + public: + /** + * Create a DigitalFilter instance + *@param filter_type desired filter type + *@param fs sampling frequency + */ + DigitalFilter(FilterType filter_type,float fs); //constructor, choose filter type and set sampling frequency + /** + /** + * initialize DigitalFilter.Need to set several parameters before calling this method. + */ + int init(); //calcurate and set filter coefficients.Return value is the delay step of designed filter. + /** + *Update filter outputs. + *@param input latest input of filter + */ + float update(float input); //update filter outputs. + /** + /*Reset buffer of filter + */ + void reset(); //reset filter inputs and past inputs(all past inputs set to 0) + /** + *accesor of fc(center frequency) + *@param fc center frequency + */ + void set_fc(float fc); //accesor of fc(center frequency) + /** + *accesor of zeta(decrement) + *@param zeta decrement of filter + */ + void set_zeta(float zeta); //accesor of zeta(decrement) + /** + *accesor of q(quality factor) + *@param q quality factor + */ + void set_Q(float q); //accesor of quality factor + /** + *accesor of tap(hilbert filter's tap number) + *@param tap hilbert filter's tap number + */ + void set_tap(int tap); //accesor of hilbert filter's tap number + /** + *accesor of filter time constant + */ + float get_tau(); //accesor of filter time constant + /** + *accesor of delay_step + */ + int get_delay_step(); //get delay step of designed filter + + private: + void vectorRightShift(vector<float> &array); //right shift elements of vector + void vectorSetAllToZero(vector<float> &array); //set all elements of vector to 0 + vector<float> a_; //filter coefficients of denominator a + vector<float> b_; //filter coefficients of numerator b + vector<float> u_; //intermediate outputs of filter + vector<float> y_; //intermediate outputs of filter + int delay_step_; //delay step + float gain_; //filter gain + float fs_; //sampling frequency + float ts_; //sampling time + float fc_; //center frequency + float zeta_; //decrement + float Q_; //quality factor + float tau_; + int tap_; //tap number of hilbert filter + static const float pi_ = 3.141592; //circular constant + FilterType filter_type_ ; +}; +#endif \ No newline at end of file