annotate include/IirFilter.h @ 149:134bff10e561 ClockSync

Added simple one-variable one-measurement Kalman filter, Pid controller(which output is not used). Virtual clock is now much more precise and reactive for period. Still it is lagging behind a bit on the overall offset.
author Giulio Moro <giuliomoro@yahoo.it>
date Mon, 21 Sep 2015 03:12:21 +0100
parents 6cd38e261027
children
rev   line source
giuliomoro@148 1 /*
giuliomoro@148 2 * IirFilter.h
giuliomoro@148 3 *
giuliomoro@148 4 * Created on: 17 Sep 2015
giuliomoro@148 5 * Author: giulio
giuliomoro@148 6 */
giuliomoro@148 7
giuliomoro@148 8 #ifndef IIRFILTER_H_
giuliomoro@148 9 #define IIRFILTER_H_
giuliomoro@148 10
giuliomoro@148 11 #define IIR_FILTER_STAGE_COEFFICIENTS (5)
giuliomoro@148 12 #define IIR_FILTER_STAGE_STATES (IIR_FILTER_STAGE_COEFFICIENTS - 1)
giuliomoro@148 13
giuliomoro@148 14 class IirFilterStage{ //TODO : to save (some) memory we should only store the coefficients pointers here,
giuliomoro@148 15 //so that IirFilter can share them among multiple stages if needbe)
giuliomoro@148 16 private:
giuliomoro@148 17 double coefficients[IIR_FILTER_STAGE_COEFFICIENTS]; // these are b0,b1,b2,a1,a2
giuliomoro@148 18 double states[IIR_FILTER_STAGE_STATES]; // these are xprev, xprevprev, yprev, yprevprev
giuliomoro@148 19 public:
giuliomoro@148 20 IirFilterStage();
giuliomoro@148 21 void setCoefficients(double* newCoefficients);
giuliomoro@148 22 void setStates(double* newStates);
giuliomoro@148 23 double process(double in);
giuliomoro@148 24 void process(double* inout, int length);
giuliomoro@148 25 void process(double* in, double* out, int length);
giuliomoro@148 26 };
giuliomoro@148 27
giuliomoro@148 28 class IirFilter{
giuliomoro@148 29 private:
giuliomoro@148 30 struct IirFilterStage** stages;
giuliomoro@148 31 int numberOfStages;
giuliomoro@148 32 void dealloc();
giuliomoro@148 33 public:
giuliomoro@148 34 IirFilter();
giuliomoro@148 35 IirFilter(int newNumberOfStages);
giuliomoro@148 36 IirFilter(int newNumberOfStages, double *newCoefficients);
giuliomoro@148 37 void setCoefficients(double* newCoefficients);
giuliomoro@148 38 void setStates(double* newStates);
giuliomoro@148 39 void setNumberOfStages(int newNumberOfStages);
giuliomoro@148 40 double process(double in);
giuliomoro@148 41 void process(double* inout, int length);
giuliomoro@148 42 void process(double* in, double* out, int length);
giuliomoro@148 43 };
giuliomoro@148 44
giuliomoro@148 45 #endif /* IIRFILTER_H_ */