Mercurial > hg > libxtract
changeset 171:661c1c732269
Copy out input values for Ooura so the in-place transform doesn't overwrite *data
author | Jamie Bullock <jamie@jamiebullock.com> |
---|---|
date | Tue, 18 Jun 2013 13:21:02 -0700 |
parents | 251df503d0fe |
children | 772c03f47063 |
files | src/vector.c |
diffstat | 1 files changed, 22 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/src/vector.c Tue Jun 18 08:51:28 2013 -0700 +++ b/src/vector.c Tue Jun 18 13:21:02 2013 -0700 @@ -26,6 +26,7 @@ #include <math.h> #include <string.h> #include <stdlib.h> +#include <assert.h> #include "fft.h" @@ -53,7 +54,9 @@ unsigned int n = 0; unsigned int m = 0; unsigned int M = N >> 1; -#ifndef USE_OOURA +#ifdef USE_OOURA + double *fft = NULL; +#else DSPDoubleSplitComplex *fft = NULL; #endif @@ -80,7 +83,11 @@ * the output format is * a[0] - DC, a[1] - nyquist, a[2...N-1] - remaining bins */ - rdft(N, 1, data, ooura_data_spectrum.ooura_ip, + fft = malloc(N * sizeof(double)); + assert(fft != NULL); + memcpy(fft, data, N * sizeof(double)); + + rdft(N, 1, fft, ooura_data_spectrum.ooura_ip, ooura_data_spectrum.ooura_w); #else fft = &vdsp_data_spectrum.fft; @@ -110,8 +117,8 @@ ++n; } - real = data[n*2]; - imag = data[n*2+1]; + real = fft[n*2]; + imag = fft[n*2+1]; #else real = fft->realp[n]; imag = fft->realp[n]; @@ -155,8 +162,8 @@ ++n; } - real = data[n*2]; - imag = data[n*2+1]; + real = fft[n*2]; + imag = fft[n*2+1]; #else real = fft->realp[n]; imag = fft->realp[n]; @@ -186,8 +193,8 @@ ++n; } - real = data[n*2]; - imag = data[n*2+1]; + real = fft[n*2]; + imag = fft[n*2+1]; #else real = fft->realp[n]; imag = fft->realp[n]; @@ -224,8 +231,8 @@ { ++n; } - real = data[n*2]; - imag = data[n*2+1]; + real = fft[n*2]; + imag = fft[n*2+1]; #else real = fft->realp[n]; imag = fft->realp[n]; @@ -244,6 +251,10 @@ result[n] /= max; } +#ifdef USE_OOURA + free(fft); +#endif + return XTRACT_SUCCESS; } @@ -506,7 +517,7 @@ } } - free(input); + // free(input); return (rv ? rv : XTRACT_SUCCESS); }