From 0bf7e586bc481552a1915a2ff62483cdc5cbc9cd Mon Sep 17 00:00:00 2001 From: Mark Borgerding Date: Tue, 2 Jan 2007 16:20:17 +0000 Subject: [PATCH] Memory footprint fix thanks to Galen Seitz --- CHANGELOG | 3 +++ Makefile | 2 +- tools/kiss_fftr.c | 10 +++++----- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 48debab..517de23 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +1.2.7 + Shrank the real-fft memory footprint. Thanks to Galen Seitz. + 1.2.6 (Nov 14, 2006) The "thanks to GenArts" release. Added multi-dimensional real-optimized FFT, see tools/kiss_fftndr Thanks go to GenArts, Inc. for sponsoring the development. diff --git a/Makefile b/Makefile index 2f82a57..ae63f8d 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -KFVER=1_2_6 +KFVER=1_2_7 DISTDIR=kiss_fft_v$(KFVER) TARBALL=kiss_fft_v$(KFVER).tar.gz diff --git a/tools/kiss_fftr.c b/tools/kiss_fftr.c index 5bc669d..bfd989f 100644 --- a/tools/kiss_fftr.c +++ b/tools/kiss_fftr.c @@ -37,7 +37,7 @@ kiss_fftr_cfg kiss_fftr_alloc(int nfft,int inverse_fft,void * mem,size_t * lenme nfft >>= 1; kiss_fft_alloc (nfft, inverse_fft, NULL, &subsize); - memneeded = sizeof(struct kiss_fftr_state) + subsize + sizeof(kiss_fft_cpx) * ( nfft * 2); + memneeded = sizeof(struct kiss_fftr_state) + subsize + sizeof(kiss_fft_cpx) * ( nfft * 3 / 2); if (lenmem == NULL) { st = (kiss_fftr_cfg) KISS_FFT_MALLOC (memneeded); @@ -54,9 +54,9 @@ kiss_fftr_cfg kiss_fftr_alloc(int nfft,int inverse_fft,void * mem,size_t * lenme st->super_twiddles = st->tmpbuf + nfft; kiss_fft_alloc(nfft, inverse_fft, st->substate, &subsize); - for (i = 0; i < nfft; ++i) { + for (i = 0; i < nfft/2; ++i) { double phase = - -3.14159265358979323846264338327 * ((double) i / nfft + .5); + -3.14159265358979323846264338327 * ((double) (i+1) / nfft + .5); if (inverse_fft) phase *= -1; kf_cexp (st->super_twiddles+i,phase); @@ -111,7 +111,7 @@ void kiss_fftr(kiss_fftr_cfg st,const kiss_fft_scalar *timedata,kiss_fft_cpx *fr C_ADD( f1k, fpk , fpnk ); C_SUB( f2k, fpk , fpnk ); - C_MUL( tw , f2k , st->super_twiddles[k]); + C_MUL( tw , f2k , st->super_twiddles[k-1]); freqdata[k].r = HALF_OF(f1k.r + tw.r); freqdata[k].i = HALF_OF(f1k.i + tw.i); @@ -146,7 +146,7 @@ void kiss_fftri(kiss_fftr_cfg st,const kiss_fft_cpx *freqdata,kiss_fft_scalar *t C_ADD (fek, fk, fnkc); C_SUB (tmp, fk, fnkc); - C_MUL (fok, tmp, st->super_twiddles[k]); + C_MUL (fok, tmp, st->super_twiddles[k-1]); C_ADD (st->tmpbuf[k], fek, fok); C_SUB (st->tmpbuf[ncfft - k], fek, fok); #ifdef USE_SIMD