From 317f11e66eabcb36f0e255da3829b58d65b39fb4 Mon Sep 17 00:00:00 2001 From: Mark Borgerding Date: Fri, 17 Oct 2003 00:11:19 +0000 Subject: [PATCH] starting point for radix 3 'make test' output ### testing SNR for 2187 point FFTs #### DOUBLE snr_t2f = 292.51 snr_f2t = 304.97 #### FLOAT snr_t2f = 143.46 snr_f2t = 138.03 #### SHORT snr_t2f = 49.257 snr_f2t = 16.294 #### timing 10000 x 2187 point FFTs #### DOUBLE Elapsed:0:05.05 user:3.60 sys:0.54 #### FLOAT Elapsed:0:02.41 user:1.85 sys:0.23 #### SHORT Elapsed:0:04.02 user:3.13 sys:0.08 --- kiss_fft.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++- test/Makefile | 2 +- tools/Makefile | 2 +- 3 files changed, 48 insertions(+), 3 deletions(-) diff --git a/kiss_fft.c b/kiss_fft.c index 633c078..ad22aaa 100644 --- a/kiss_fft.c +++ b/kiss_fft.c @@ -160,6 +160,50 @@ void bfly2( }while (--m); } +static +inline +void bfly3( + kiss_fft_cpx * Fout, + int fstride, + const kiss_fft_state * st, + int m + ) +{ + const int p=3; + int u,k,q1,q; + kiss_fft_cpx * scratch = st->scratch; + kiss_fft_cpx * twiddles = st->twiddles; + kiss_fft_cpx t; + + for ( u=0; unfft; + twidx += fstride * k; + if (twidx>=Norig) twidx-=Norig; + C_MUL(t,scratch[q] , twiddles[twidx] ); + Fout[ k ].r += t.r; + Fout[ k ].i += t.i; + } + k += m; + } + } +} + + static inline void bflyp( @@ -225,8 +269,9 @@ void fft_work( } switch (p) { - case 4: bfly4(Fout,fstride,st,m); break; case 2: bfly2(Fout,fstride,st,m); break; + case 3: bfly3(Fout,fstride,st,m); break; + case 4: bfly4(Fout,fstride,st,m); break; default: bflyp(Fout,fstride,st,m,p); break; } } diff --git a/test/Makefile b/test/Makefile index 17b7d75..bbdcc1c 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,4 +1,4 @@ -NFFT=1024 +NFFT=2187 ALLUTILS=kfft kffts kfftd NUMFFTS=10000 UTILSRC=../kiss_fft.c fftutil.c diff --git a/tools/Makefile b/tools/Makefile index 17b7d75..bbdcc1c 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -1,4 +1,4 @@ -NFFT=1024 +NFFT=2187 ALLUTILS=kfft kffts kfftd NUMFFTS=10000 UTILSRC=../kiss_fft.c fftutil.c