00001
00002
00004 #ifndef __Sample__
00005 #define __Sample__
00006
00007 #include "CUtils.h"
00008 #include "TMath.h"
00009
00010 #define NORDER 20
00011 #define NORDERHP 12
00012
00013 using namespace std;
00014
00021 class ZPGFilter {
00022
00023 public:
00024 friend class Sample;
00025 friend class IIRFilter;
00026
00027 private:
00028
00029 ZPGFilter(const unsigned int numZeros, const unsigned int numPoles);
00030 virtual ~ZPGFilter(void);
00031
00032 bool WToZ(void);
00033
00034 unsigned int nzeros;
00035 unsigned int npoles;
00036 double *zeros[2];
00037 double *poles[2];
00038 double gain[2];
00039 };
00040
00041
00048 class IIRFilter {
00049
00050 public:
00051 friend class Sample;
00052
00053 private:
00054
00055 IIRFilter(ZPGFilter *zpgFilter);
00056 virtual ~IIRFilter(void);
00057
00058 unsigned int nzeros;
00059 unsigned int npoles;
00060 double *zeros[2];
00061 double *poles[2];
00062 double gain[2];
00063 unsigned int numDirect;
00064 unsigned int numRecurs;
00065 double *directCoef;
00066 double *recursCoef;
00067 double *history;
00068 double *history_init;
00069
00070 };
00071
00072
00081 class Sample {
00082
00083 public:
00084
00093 Sample(const int aVerbosity=0);
00094
00098 virtual ~Sample(void);
00112 bool SetFrequencies(const int aNativeFrequency, const int aWorkingFrequency, const double aHighPassFrequency=0.0);
00113
00119 bool SetNativeFrequency(const int aNativeFrequency);
00120
00128 bool SetWorkingFrequency(const int aWorkingFrequency);
00129
00137 bool SetHighPassFrequency(const double aHighPassFrequency);
00138
00149 bool Transform(const int invectorsize, double *invector, const int outvectorsize, double *outvector);
00150
00154 inline int GetNativeFrequency(void){ return fNativeFrequency; };
00155
00159 inline int GetWorkingFrequency(void){ return fWorkingFrequency; };
00160
00164 inline int GetHighPassFrequency(void){ return fHighPassFrequency; };
00165
00166
00167 protected:
00168
00169 int fWorkingFrequency;
00170 int fNativeFrequency;
00171 int fVerbosity;
00172 double fHighPassFrequency;
00173
00174 private:
00175
00176
00177 bool MakeSamplingFilters(void);
00178 bool Resample(int invectorsize, double *invector, double *outvector);
00179 bool presample;
00180 int fResampleFactor;
00181 int fIntermediateFrequency;
00182 int I,J;
00183 IIRFilter *iirFilter[NORDER];
00184 bool PreSample(int &datavectorsize, double *datavector);
00185
00186
00187
00188 bool MakeHighPassFilters(void);
00189 bool HighPass(const int invectorsize, double *invector);
00190 int IHP,JHP;
00191 IIRFilter *iirFilterHP[NORDERHP];
00192
00193
00194 bool ApplyFilter(const int datavectorsize, double *datavector, IIRFilter *filter);
00195
00196 ClassDef(Sample,0)
00197
00198 };
00199
00200 #endif
00201
00202