Mercurial > hg > libxtract
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; }