QFFTFir.hh

00001 #ifndef _Q_FFT_FIR_HH_
00002 #define _Q_FFT_FIR_HH_
00003 
00004 #include "QVector.hh"
00005 #include "QVectorC.hh"
00006 #include "QError.hh"
00007 #include "QVectorView.hh"
00008 #include "QRealComplexFFT.hh"
00009 
00010 using namespace Cuore;
00011 
00012 class QFFTFir {
00013 
00014     public:
00015 
00016         enum AlgoType {
00017             AT_BV,
00018             AT_BV_Causal,
00019             AT_SF,
00020             AT_SF_Infinite,
00021         };
00022 
00023         QFFTFir(size_t size, double samplFreq, double cutFreq, QFFT::WindowType wt = QFFT::WT_Rect, AlgoType at = AT_BV);
00024 
00025         QError FilterData(const QVector& input, QVector& output, size_t subratio = 1) const; 
00026         QError FilterDataMinimal(const QVector& input, QVector& output) const; 
00027 
00028         const QVectorC& GetInputFilterFD() const { return fInputFilterFD; }
00029         const QVector& GetInputFilterTD() const { return fInputFilterTD; }
00030         double GetInputFilterTD_VPR() const { return fInputFilterTD.GetMin()/fInputFilterTD.GetMax(); }
00031 
00032         const QVectorC& GetFilterFD() const { return fFilterFD; }
00033         const QVector& GetFilterTD() const { return fFilterTD; }
00034         
00035         const QVector&  GetWindow() const { return fWindow; }
00036 
00037         inline const size_t GetFilterSize() const {return fFilterSize;}
00038         inline const double GetCutFrequency() const {return fCutFreq;}
00039         inline const double GetSamplingFrequency() const {return fSamplingFreq;}
00040 
00041     private:
00042 
00043         size_t FilterSingleBlock(const QVector& input,QVector& output,size_t subratio, size_t offset) const;
00044         QVectorC GetInputFilter(size_t size, size_t bin_stop);
00045 
00046         double fCutFreq;
00047         double fSamplingFreq;
00048         double fFreqResolution;
00049 
00050         QVectorC fInputFilterFD;
00051         QVector fInputFilterTD;
00052 
00053         QVector fWindow;
00054 
00055         QVectorC fFilterFD;
00056         QVector fFilterTD;
00057         size_t fFilterSize;
00058         bool fCausal;
00059         size_t fConvolutionIndex;
00060         size_t fConvolutionSize;
00061 
00062         mutable QVectorC fFilteredDataFD;
00063         mutable QVector fFilteredData;
00064         QRealComplexFFT* fFilterTransformer;
00065 
00066 };
00067 
00068 #endif

Generated on Tue Nov 16 10:49:58 2010 for CUORE Software by  doxygen 1.5.6