diff dsp/transforms/FFT.cpp @ 309:d5014ab8b0e5

* Add GPL and README; some tidying
author Chris Cannam <c.cannam@qmul.ac.uk>
date Mon, 13 Dec 2010 14:55:28 +0000
parents 5f2c9119a94a
children f6ccde089491
line wrap: on
line diff
--- a/dsp/transforms/FFT.cpp	Wed Dec 01 14:05:25 2010 +0000
+++ b/dsp/transforms/FFT.cpp	Mon Dec 13 14:55:28 2010 +0000
@@ -15,10 +15,6 @@
 
 #include <iostream>
 
-//#define USE_BUILTIN_FFT 1
-
-#ifdef USE_BUILTIN_FFT
-
 FFT::FFT(unsigned int n) :
     m_n(n),
     m_private(0)
@@ -183,135 +179,3 @@
     }
 }
 
-#else
-
-#include "kissfft/kiss_fft.h"
-#include "kissfft/kiss_fftr.h"
-
-struct KissFFTRec {
-    kiss_fft_cfg forward;
-    kiss_fft_cfg inverse;
-    kiss_fft_cpx *in;
-    kiss_fft_cpx *out;
-};
-
-FFT::FFT(unsigned int n) :
-    m_n(n),
-    m_private(0)
-{
-    if (m_n & 1) {
-        std::cerr << "Error: Odd FFT size " << m_n
-                  << " not supported in this implementation"
-                  << std::endl;
-        return;
-    }
-    KissFFTRec *rec = new KissFFTRec;
-    rec->forward = kiss_fft_alloc(m_n, 0, 0, 0);
-    rec->inverse = kiss_fft_alloc(m_n, 1, 0, 0);
-    rec->in = new kiss_fft_cpx[m_n];
-    rec->out = new kiss_fft_cpx[m_n];
-    m_private = rec;
-}
-
-FFT::~FFT()
-{
-    if (!m_private) return;
-    KissFFTRec *rec = (KissFFTRec *)m_private;
-    kiss_fft_free(rec->forward);
-    kiss_fft_free(rec->inverse);
-    delete[] rec->in;
-    delete[] rec->out;
-}
-
-void
-FFT::process(bool inverse,
-             const double *rin, const double *iin,
-             double *rout, double *iout)
-{
-    if (!m_private) return;
-    KissFFTRec *rec = (KissFFTRec *)m_private;
-    for (int i = 0; i < m_n; ++i) {
-        rec->in[i].r = rin[i];
-    }
-    if (iin) {
-        for (int i = 0; i < m_n; ++i) {
-            rec->in[i].i = iin[i];
-        }
-    } else {
-        for (int i = 0; i < m_n; ++i) {
-            rec->in[i].i = 0.0;
-        }
-    }
-    if (inverse) {
-        kiss_fft(rec->inverse, rec->in, rec->out);
-    } else {
-        kiss_fft(rec->forward, rec->in, rec->out);
-    }
-    for (int i = 0; i < m_n; ++i) {
-        rout[i] = rec->out[i].r;
-        iout[i] = rec->out[i].i;
-    }
-}
-
-struct KissFFTRealRec {
-    kiss_fftr_cfg forward;
-    kiss_fftr_cfg inverse;
-    kiss_fft_cpx *out;
-};
-
-FFTReal::FFTReal(unsigned int n) :
-    m_n(n),
-    m_private(0)
-{
-    if (m_n & 1) {
-        std::cerr << "Error: Odd FFT size " << m_n
-                  << " not supported in this implementation"
-                  << std::endl;
-        return;
-    }
-    KissFFTRealRec *rec = new KissFFTRealRec;
-    rec->forward = kiss_fftr_alloc(m_n, 0, 0, 0);
-    rec->inverse = kiss_fftr_alloc(m_n, 1, 0, 0);
-    rec->out = new kiss_fft_cpx[m_n];
-    m_private = rec;
-}
-
-FFTReal::~FFTReal()
-{
-    if (!m_private) return;
-    KissFFTRealRec *rec = (KissFFTRealRec *)m_private;
-    kiss_fftr_free(rec->forward);
-    kiss_fftr_free(rec->inverse);
-    delete[] rec->out;
-}
-
-void
-FFTReal::process(bool inverse,
-                 const double *rin,
-                 double *rout, double *iout)
-{
-    if (!m_private) return;
-    KissFFTRealRec *rec = (KissFFTRealRec *)m_private;
-    if (inverse) {
-        kiss_fftr(rec->inverse, rin, rec->out);
-        for (int i = 0; i < m_n; ++i) {
-            rout[i] = rec->out[i].r;
-            iout[i] = rec->out[i].i;
-        }
-    } else {
-        kiss_fftr(rec->forward, rin, rec->out);
-        rout[0] = rec->out[0].r;
-        iout[0] = rec->out[0].i;
-        for (int i = 1; i < m_n/2; ++i) {
-            rout[m_n-i] = rout[i] = rec->out[i].r;
-        }
-        for (int i = 1; i < m_n/2; ++i) {
-            iout[i] = rec->out[i].i;
-            iout[m_n-i] = -iout[i];
-        }
-        rout[m_n/2] = rec->out[m_n/2].r;
-        iout[m_n/2] = rec->out[m_n/2].i;
-    }
-}
-
-#endif