changeset 26:13568f1ccff0

Update to use Vamp SDK 2.4 FFT implementation
author Chris Cannam
date Thu, 12 Jul 2012 12:03:58 +0100
parents 9aee1a0e6223
children e358f133e670
files CepstrumPitchTracker.cpp CepstrumPitchTracker.h
diffstat 2 files changed, 3 insertions(+), 99 deletions(-) [+]
line wrap: on
line diff
--- a/CepstrumPitchTracker.cpp	Tue Jul 10 22:16:00 2012 +0100
+++ b/CepstrumPitchTracker.cpp	Thu Jul 12 12:03:58 2012 +0100
@@ -22,6 +22,8 @@
 
 #include "CepstrumPitchTracker.h"
 
+#include "vamp-sdk/FFT.h"
+
 #include <vector>
 #include <algorithm>
 
@@ -530,7 +532,7 @@
     magmean /= hs;
     double threshold = 0.1; // for magmean
     
-    fft(bs, true, logmag, 0, rawcep, io);
+    Vamp::FFT::inverse(bs, logmag, 0, rawcep, io);
     
     delete[] logmag;
     delete[] io;
@@ -649,99 +651,3 @@
     }
     return fs;
 }
-
-void
-CepstrumPitchTracker::fft(unsigned int n, bool inverse,
-                          double *ri, double *ii, double *ro, double *io)
-{
-    if (!ri || !ro || !io) return;
-
-    unsigned int bits;
-    unsigned int i, j, k, m;
-    unsigned int blockSize, blockEnd;
-
-    double tr, ti;
-
-    if (n < 2) return;
-    if (n & (n-1)) return;
-
-    double angle = 2.0 * M_PI;
-    if (inverse) angle = -angle;
-
-    for (i = 0; ; ++i) {
-	if (n & (1 << i)) {
-	    bits = i;
-	    break;
-	}
-    }
-
-    int table[n];
-
-    for (i = 0; i < n; ++i) {
-        m = i;
-        for (j = k = 0; j < bits; ++j) {
-            k = (k << 1) | (m & 1);
-            m >>= 1;
-        }
-        table[i] = k;
-    }
-
-    if (ii) {
-	for (i = 0; i < n; ++i) {
-	    ro[table[i]] = ri[i];
-	    io[table[i]] = ii[i];
-	}
-    } else {
-	for (i = 0; i < n; ++i) {
-	    ro[table[i]] = ri[i];
-	    io[table[i]] = 0.0;
-	}
-    }
-
-    blockEnd = 1;
-
-    for (blockSize = 2; blockSize <= n; blockSize <<= 1) {
-
-	double delta = angle / (double)blockSize;
-	double sm2 = -sin(-2 * delta);
-	double sm1 = -sin(-delta);
-	double cm2 = cos(-2 * delta);
-	double cm1 = cos(-delta);
-	double w = 2 * cm1;
-	double ar[3], ai[3];
-
-	for (i = 0; i < n; i += blockSize) {
-
-	    ar[2] = cm2;
-	    ar[1] = cm1;
-
-	    ai[2] = sm2;
-	    ai[1] = sm1;
-
-	    for (j = i, m = 0; m < blockEnd; j++, m++) {
-
-		ar[0] = w * ar[1] - ar[2];
-		ar[2] = ar[1];
-		ar[1] = ar[0];
-
-		ai[0] = w * ai[1] - ai[2];
-		ai[2] = ai[1];
-		ai[1] = ai[0];
-
-		k = j + blockEnd;
-		tr = ar[0] * ro[k] - ai[0] * io[k];
-		ti = ar[0] * io[k] + ai[0] * ro[k];
-
-		ro[k] = ro[j] - tr;
-		io[k] = io[j] - ti;
-
-		ro[j] += tr;
-		io[j] += ti;
-	    }
-	}
-
-	blockEnd = blockSize;
-    }
-}
-
-
--- a/CepstrumPitchTracker.h	Tue Jul 10 22:16:00 2012 +0100
+++ b/CepstrumPitchTracker.h	Thu Jul 12 12:03:58 2012 +0100
@@ -130,8 +130,6 @@
     void filter(const double *in, double *out);
     double cubicInterpolate(const double[4], double);
     double findInterpolatedPeak(const double *in, int maxbin);
-    void fft(unsigned int n, bool inverse,
-             double *ri, double *ii, double *ro, double *io);
 };
 
 #endif