From 37131e3ab391adfe7da68d9c457da677789ecb68 Mon Sep 17 00:00:00 2001 From: Jean-Marc Valin <jean-marc.valin@usherbrooke.ca> Date: Fri, 29 Feb 2008 20:03:41 +1100 Subject: [PATCH] Just realised half the twiddles in the real FFT weren't even used. Removing them saves another 1kB for fixed-point (2kB for float or full precision) --- libcelt/kiss_fftr.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/libcelt/kiss_fftr.c b/libcelt/kiss_fftr.c index 833699f4b..979aac95a 100644 --- a/libcelt/kiss_fftr.c +++ b/libcelt/kiss_fftr.c @@ -35,6 +35,7 @@ struct kiss_fftr_state{ kiss_fftr_cfg kiss_fftr_alloc(int nfft,void * mem,size_t * lenmem) { int i; + int twiddle_size; kiss_fftr_cfg st = NULL; size_t subsize, memneeded; @@ -43,9 +44,9 @@ kiss_fftr_cfg kiss_fftr_alloc(int nfft,void * mem,size_t * lenmem) return NULL; } nfft >>= 1; - + twiddle_size = nfft/2+1; kiss_fft_alloc (nfft, NULL, &subsize); - memneeded = sizeof(struct kiss_fftr_state) + subsize + sizeof(kiss_twiddle_cpx)*nfft; + memneeded = sizeof(struct kiss_fftr_state) + subsize + sizeof(kiss_twiddle_cpx)*twiddle_size; if (lenmem == NULL) { st = (kiss_fftr_cfg) KISS_FFT_MALLOC (memneeded); @@ -65,12 +66,12 @@ kiss_fftr_cfg kiss_fftr_alloc(int nfft,void * mem,size_t * lenmem) #endif #if defined (FIXED_POINT) && !defined(DOUBLE_PRECISION) - for (i=0;i<nfft;++i) { + for (i=0;i<twiddle_size;++i) { celt_word32_t phase = i+(nfft>>1); kf_cexp2(st->super_twiddles+i, DIV32(SHL32(phase,16),nfft)); } #else - for (i=0;i<nfft;++i) { + for (i=0;i<twiddle_size;++i) { const double pi=3.14159265358979323846264338327; double phase = pi*(((double)i) /nfft + .5); kf_cexp(st->super_twiddles+i, phase ); -- GitLab