lib/qtsFFT.h

Go to the documentation of this file.
00001 #ifndef qtsFFT_H
00002 #define qtsFFT_H
00003 
00004 #include "PlotLine.h"
00005 
00006 
00007 class FFTReal;
00008 
00009 class qtsFFT
00010 {
00011     
00012 public:
00013 
00014     qtsFFT(long n);
00015         ~qtsFFT();
00016 
00017     PlotLine * do_FFTqts(PlotLine *r);
00018     PlotLine * do_iFFTqts(PlotLine *f);
00019     
00020 private:
00021 
00022     int length;
00023 
00024     double * fftReal;       // qtsFFT arrays
00025     double * fftFreq;
00026     
00027 //
00028 // FFTReal by Laurent de Soras
00029 // Modified to nested class for inclusion in this module
00030 //      -- jim nolen jnolen1@mindspring.com, 29 Nov 2004
00031 //
00032     
00033 // --- nested Class FFTReal ----
00034     class FFTReal
00035     {
00036                 public:
00037 
00038                         /* Change this typedef to use a different floating point type in your FFTs
00039                         (i.e. float, double or long double). */
00040                         typedef double  flt_t;
00041                         
00042                         explicit        FFTReal (const long length);
00043                                                 ~FFTReal ();
00044                         void            do_fft (flt_t f [], const flt_t x []) const;
00045                         void            do_ifft (const flt_t f [], flt_t x []) const;
00046                         void            rescale (flt_t x []) const;
00047 
00048                 private:
00049 
00050                         /* Bit-reversed look-up table nested class */
00051                         class BitReversedLUT
00052                         {
00053                                 public:
00054                                 
00055                                         explicit                BitReversedLUT (const int nbr_bits);
00056                                                                         ~BitReversedLUT ();
00057                                         const long *    get_ptr () const
00058                                         {
00059                                         return (_ptr);
00060                                         }
00061                                 private:
00062                                         long *                  _ptr;
00063                         };
00064 
00065                         /* Trigonometric look-up table nested class */
00066                         class   TrigoLUT
00067                         {
00068                                 public:
00069 
00070                                         explicit                TrigoLUT (const int nbr_bits);
00071                                                                         ~TrigoLUT ();
00072                                         const flt_t     *       get_ptr (const int level) const
00073                                         {
00074                                                 return (_ptr + (1L << (level - 1)) - 4);
00075                                         };
00076                         private:
00077                                 flt_t   *                       _ptr;
00078                         };
00079 
00080                 const long              _length;
00081                 const int               _nbr_bits;
00082                 const BitReversedLUT    _bit_rev_lut;
00083                 const TrigoLUT  _trigo_lut;
00084                 const flt_t             _sqrt2_2;
00085                 flt_t *                 _buffer_ptr;
00086             
00087                 };
00088                 
00089         const FFTReal _ftt_Real;
00090     
00091 };
00092 
00093 #endif
00094 
00095