00001 00010 #ifndef __QREALCOMPLFFT_ 00011 #define __QREALCOMPLFFT_ 00012 00013 #include "QFFT.hh" 00014 #include <gsl/gsl_fft_real.h> 00015 #include <gsl/gsl_fft_halfcomplex.h> 00016 00017 Q_BEGIN_NAMESPACE 00018 00019 class QVectorC; 00020 00021 class QRealComplexFFT: public QFFT{ 00022 00023 public: 00028 QRealComplexFFT(const int size); 00032 QRealComplexFFT(); 00036 virtual ~QRealComplexFFT(); 00043 virtual int TransformToFreq(const QVector& data, QVectorC& FFT); 00050 virtual int TransformFromFreq(const QVectorC& FT, QVector& spectrum); 00051 00052 00057 virtual void SetWindowType(WindowType wt, bool coherent = false); 00058 protected: 00059 00060 virtual int Transform(const QVector& data, QVector& result); 00061 00062 private: 00063 // RF should not be called from outside, but done automatically at Transform time 00064 virtual void Resize(int s); 00075 gsl_fft_real_wavetable* fWaveTable; 00076 gsl_fft_halfcomplex_wavetable* fHCWaveTable; 00077 gsl_fft_real_workspace* fWork; 00078 00079 00080 }; 00081 00082 Q_END_NAMESPACE 00083 00084 #endif