diff options
author | eb | 2008-04-16 05:32:54 +0000 |
---|---|---|
committer | eb | 2008-04-16 05:32:54 +0000 |
commit | 9f20c33e7742d44db4689efcc8d20d452baf51c1 (patch) | |
tree | 90d8b55ea7e96bccf6965b8d32684c372dc18531 /gcell/src/lib/wrapper/spu | |
parent | 8f2a5f3837da61a4d49251ee65f91f0d2e8e48de (diff) | |
download | gnuradio-9f20c33e7742d44db4689efcc8d20d452baf51c1.tar.gz gnuradio-9f20c33e7742d44db4689efcc8d20d452baf51c1.tar.bz2 gnuradio-9f20c33e7742d44db4689efcc8d20d452baf51c1.zip |
FFT inverse tranform is now correct.
git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@8211 221aa14e-8319-0410-a670-987f0aec2ac5
Diffstat (limited to 'gcell/src/lib/wrapper/spu')
-rw-r--r-- | gcell/src/lib/wrapper/spu/gcs_fft_1d_r2.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/gcell/src/lib/wrapper/spu/gcs_fft_1d_r2.c b/gcell/src/lib/wrapper/spu/gcs_fft_1d_r2.c index 36bd878ed..bf4bdfd20 100644 --- a/gcell/src/lib/wrapper/spu/gcs_fft_1d_r2.c +++ b/gcell/src/lib/wrapper/spu/gcs_fft_1d_r2.c @@ -22,6 +22,18 @@ #include <gc_declare_proc.h> #include <libfft.h> +/* + * v is really vector complex<float> + */ +static void +conjugate_vector(vector float *v, int nelements) +{ + vector float k = {1, -1, 1, -1}; + int i; + for (i = 0; i < nelements; i++) + v[i] *= k; +} + static void gcs_fft_1d_r2(const gc_job_direct_args_t *input, gc_job_direct_args_t *output __attribute__((unused)), @@ -31,9 +43,16 @@ gcs_fft_1d_r2(const gc_job_direct_args_t *input, vector float *in = (vector float *) eaa->arg[1].ls_addr; vector float *W = (vector float *) eaa->arg[2].ls_addr; int log2_fft_length = input->arg[0].u32; - int forward = input->arg[1].u32; // non-zero if forward xform (FIXME use) + int forward = input->arg[1].u32; // non-zero if forward xform - fft_1d_r2(out, in, W, log2_fft_length); + if (forward){ + fft_1d_r2(out, in, W, log2_fft_length); + } + else { + conjugate_vector(in, 1 << (log2_fft_length - 1)); + fft_1d_r2(out, in, W, log2_fft_length); + conjugate_vector(out, 1 << (log2_fft_length - 1)); + } } GC_DECLARE_PROC(gcs_fft_1d_r2, "fft_1d_r2"); |