00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "dsp/DSPConfig.hh"
00024 #include "dsp/DSPOp.hh"
00025 #include "dsp/FFTDecimator.hh"
00026 #include "dsp/FIRDecimator.hh"
00027 #include "dsp/IIRDecimator.hh"
00028
00029
00030 #ifndef RECDECIMATOR_HH
00031 #define RECDECIMATOR_HH
00032
00033 #define RECDEC_MAX_SUB_ROUNDS 32
00034
00035
00042 class clRecDecimator
00043 {
00044 bool bInitialized;
00045 int iType;
00046 long lFactor;
00047 long lFilterSize;
00048 long lSubRounds;
00049 long lDecSize;
00050 bool bpHalves[RECDEC_MAX_SUB_ROUNDS];
00051 clDSPAlloc DecBuf;
00052 clFFTDecimator FFTDecBank[RECDEC_MAX_SUB_ROUNDS];
00053 clFIRDecimator FIRDecBank[RECDEC_MAX_SUB_ROUNDS];
00054 clIIRDecimator IIRDecBank[RECDEC_MAX_SUB_ROUNDS];
00055 void InitHalves (double);
00056 public:
00057 enum eFilterType
00058 {
00059 FILTER_TYPE_FFT = 0,
00060 FILTER_TYPE_FIR = 1,
00061 FILTER_TYPE_IIR = 2
00062 };
00063 clRecDecimator ();
00064 ~clRecDecimator ();
00078 bool Initialize (long, long, const float *, float = 0.0f,
00079 int = 0);
00081 bool Initialize (long, long, const double *, double = 0.0,
00082 int = 0);
00084 bool Initialize (long, long, const float *, float = 0.0f,
00085 bool = false);
00087 bool Initialize (long, long, const double *, double = 0.0,
00088 bool = false);
00092 void Uninitialize ();
00099 void Put (const float *, long);
00101 void Put (const double *, long);
00112 bool Get (float *, long);
00114 bool Get (double *, long);
00115 };
00116
00117 #endif