aboutsummaryrefslogtreecommitdiff
path: root/src/vector.c
diff options
context:
space:
mode:
authorJamie Bullock <jamie@jamiebullock.com>2013-01-09 12:54:28 +0000
committerJamie Bullock <jamie@jamiebullock.com>2013-01-09 12:54:28 +0000
commit0adbb0bfcd92347fdcbd235cf1e2ef858de974ef (patch)
tree40947db1a33cdd0e62de8197b25c15f9c309870c /src/vector.c
parentc277634b13117e721e43f34a09cafb93c725fa3f (diff)
downloadLibXtract-0adbb0bfcd92347fdcbd235cf1e2ef858de974ef.tar.gz
LibXtract-0adbb0bfcd92347fdcbd235cf1e2ef858de974ef.tar.bz2
LibXtract-0adbb0bfcd92347fdcbd235cf1e2ef858de974ef.zip
run FFT in place on the data vector
Diffstat (limited to 'src/vector.c')
-rw-r--r--src/vector.c24
1 files changed, 7 insertions, 17 deletions
diff --git a/src/vector.c b/src/vector.c
index 5639374..7db8695 100644
--- a/src/vector.c
+++ b/src/vector.c
@@ -45,19 +45,11 @@ int xtract_spectrum(const double *data, const int N, const void *argv, double *r
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 @@ int xtract_spectrum(const double *data, const int N, const void *argv, double *r
}
/* 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 @@ int xtract_spectrum(const double *data, const int N, const void *argv, double *r
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 @@ int xtract_spectrum(const double *data, const int N, const void *argv, double *r
{
++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 @@ int xtract_spectrum(const double *data, const int N, const void *argv, double *r
{
++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 @@ int xtract_spectrum(const double *data, const int N, const void *argv, double *r
++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 @@ int xtract_spectrum(const double *data, const int N, const void *argv, double *r
result[n] /= max;
}
- free(rfft);
-
return XTRACT_SUCCESS;
}