changeset 147:805ee2abcd5f

run FFT in place on the data vector
author Jamie Bullock <jamie@jamiebullock.com>
date Wed, 09 Jan 2013 12:54:28 +0000
parents baaa9d8b4d10
children e899c3a708ad
files configure.ac src/vector.c
diffstat 2 files changed, 8 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/configure.ac	Wed Jan 09 12:45:29 2013 +0000
+++ b/configure.ac	Wed Jan 09 12:54:28 2013 +0000
@@ -287,7 +287,7 @@
     echo "doxygen documentation:            yes"
 fi
 if test "$simpletest" = "true"; then
-    echo "simpletest example:	            yes"
+    echo "simpletest example:               yes"
 else
     echo "simpletest example:               no"
 fi
--- a/src/vector.c	Wed Jan 09 12:45:29 2013 +0000
+++ b/src/vector.c	Wed Jan 09 12:54:28 2013 +0000
@@ -45,19 +45,11 @@
     double NxN      = XTRACT_SQ(N);
     double *marker  = NULL;
     size_t bytes   = N * sizeof(double);
-    double *rfft    = NULL;
     unsigned int n = 0;
     unsigned int m = 0;
     unsigned int nx2 = 0;
     unsigned int M = N >> 1;
 
-    rfft = (double *)malloc(bytes);
-    //memcpy(rfft, data, bytes);
-
-	for(n = 0; n < N; ++n){
-		rfft[n] = (double)data[n];
-	}
-
     q = *(double *)argv;
     vector = (int)*((double *)argv+1);
     withDC = (int)*((double *)argv+2);
@@ -74,10 +66,10 @@
     }
 
     /* ooura is in-place
-     * the output format seems to be
+     * the output format is
      * a[0] - DC, a[1] - nyquist, a[2...N-1] - remaining bins
      */
-    rdft(N, 1, rfft, ooura_data_spectrum.ooura_ip, 
+    rdft(N, 1, data, ooura_data_spectrum.ooura_ip, 
             ooura_data_spectrum.ooura_w);
 
     switch(vector)
@@ -91,7 +83,7 @@
                 continue;
             }
             nx2  = n * 2;
-            temp = XTRACT_SQ(rfft[nx2]) + XTRACT_SQ(rfft[nx2+1]);
+            temp = XTRACT_SQ(data[nx2]) + XTRACT_SQ(data[nx2+1]);
             if (temp > XTRACT_LOG_LIMIT)
             {
                 temp = log(sqrt(temp) / (double)N);
@@ -117,7 +109,7 @@
             {
                 ++n;
             }
-            result[m] = (XTRACT_SQ(rfft[n]) + XTRACT_SQ(rfft[N - n])) / NxN;
+            result[m] = (XTRACT_SQ(data[n]) + XTRACT_SQ(data[N - n])) / NxN;
             XTRACT_SET_FREQUENCY;
             XTRACT_GET_MAX;
         }
@@ -130,7 +122,7 @@
             {
                 ++n;
             }
-            if ((temp = XTRACT_SQ(rfft[n]) + XTRACT_SQ(rfft[N - n])) >
+            if ((temp = XTRACT_SQ(data[n]) + XTRACT_SQ(data[N - n])) >
                     XTRACT_LOG_LIMIT)
                 temp = log(temp / NxN);
             else
@@ -159,8 +151,8 @@
                 ++n;
             }
 
-            *marker = (double)(sqrt(XTRACT_SQ(rfft[n*2]) +
-                        XTRACT_SQ(rfft[n*2+1])) / (double)N);
+            *marker = (double)(sqrt(XTRACT_SQ(data[n*2]) +
+                        XTRACT_SQ(data[n*2+1])) / (double)N);
 
             XTRACT_SET_FREQUENCY;
             XTRACT_GET_MAX;
@@ -175,8 +167,6 @@
             result[n] /= max;
     }
 
-    free(rfft);
-
     return XTRACT_SUCCESS;
 }