00001 #ifndef BASERECFILTER_H
00002 #define BASERECFILTER_H
00003
00004 #include "cimg/misc_tools.h"
00005 #include "cimg/cimg_tools.h"
00006
00007
00008
00009
00010
00011
00012 class BaseRecFilter
00013 {
00014
00015 protected:
00016
00017 int M;
00018 int N;
00019 double* a;
00020 double* b;
00021 double step;
00022 bool done;
00023
00024 virtual void myEmpty(void);
00025 virtual void reInit(void);
00026 virtual void checkStatus(void);
00027
00028 public:
00029
00030 bool warningVerbose;
00031
00032
00033 BaseRecFilter(double stepp=1);
00034 BaseRecFilter(const BaseRecFilter& yo);
00035 virtual ~BaseRecFilter(void);
00036 BaseRecFilter& operator=(const BaseRecFilter& yo);
00037
00038
00039 BaseRecFilter & set_step(double stepp);
00040 BaseRecFilter & noWarning(void) ;
00041
00042
00043
00044
00045
00046 BaseRecFilter& Exp(double tau);
00047
00048 BaseRecFilter& ExpCascade(double tau,int n);
00049
00050 BaseRecFilter& ExpCascade_nonRec(double tau,int n, int caracWindow=10);
00051
00052
00053
00054 friend BaseRecFilter operator+(const BaseRecFilter &first, const BaseRecFilter &second);
00055 BaseRecFilter& operator+=(const BaseRecFilter &secondFilt);
00056
00057 friend BaseRecFilter operator-(const BaseRecFilter &first, const BaseRecFilter &second);
00058 BaseRecFilter& operator-=(const BaseRecFilter &secondFilt);
00059
00060 friend BaseRecFilter operator*(double lambda, const BaseRecFilter &filt);
00061 friend BaseRecFilter operator*(const BaseRecFilter &filt, double lambda);
00062 BaseRecFilter& operator*=(double lambda);
00063
00064 friend BaseRecFilter operator/(const BaseRecFilter &filt, double lambda);
00065 BaseRecFilter& operator/=(double lambda);
00066
00067 BaseRecFilter& Cascade(const BaseRecFilter &second);
00068
00069
00070
00071
00072 virtual void feedInput(void){}
00073 virtual void tempStep(void){}
00074
00075
00076
00077 double get_gain(void) const;
00078 void print(void) const;
00079
00080 void testImpulseResponse( double tLength, const double* color=blue , std::string name=" " ) const;
00081 void testIntegratedResponse( double tLength, const double* color=blue , std::string name=" " ) const;
00082
00083 private:
00084 CImg<double> test_base ( bool is_impulse , double tLength, const double* color) const ;
00085 };
00086
00087 #endif
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104