From 69ff96a4994120f711035b8b29dc338dda14a854 Mon Sep 17 00:00:00 2001 From: simon Date: Mon, 22 Sep 2008 12:50:44 +0000 Subject: added zfftma and the tests related to , but one of them fails ( zffmaTest16) --- src/signalProcessing/fft/fft842.c | 266 ++++++++++++++++++++++---------------- 1 file changed, 154 insertions(+), 112 deletions(-) (limited to 'src/signalProcessing/fft/fft842.c') diff --git a/src/signalProcessing/fft/fft842.c b/src/signalProcessing/fft/fft842.c index ba287a54..0b9f1dbc 100644 --- a/src/signalProcessing/fft/fft842.c +++ b/src/signalProcessing/fft/fft842.c @@ -11,138 +11,180 @@ */ #include "fft_internal.h" +#include + -void fft842 ( int _iDirect , int _iDimen , double* _pdblReal , double* _pdblImag , int _err ) -{ - int i = 0 ; - int ipass = 1 ; +/* get binary log of integer argument; exact if n a power of 2 */ +static int fastlog2( int n) +{ + int log = -1; + while(n) { + log++; + n >>= 1; + } + return(log); +} - int ij ; - int ji ; - int j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12, j13, j14; - int iPow2ofDimen ; - int iTempDimen = 1 ; - int iTemp2Pow2ofDimen ; - int iPow8ofDimen ; - int iLengt ; - int CRES = 0 ; +/* + int in; FORWARD or INVERSE + int n; length of vector + DPCOMPLEX *b; input vector +*/ +void fft842 (doubleComplex* b, int size , int in) +{ + double fn; + doubleComplex temp ; - int l[15] ; + int L[16],L1,L2,L3,L4,L5,L6,L7,L8,L9,L10,L11,L12,L13,L14,L15; + int j1,j2,j3,j4,j5,j6,j7,j8,j9,j10,j11,j12,j13,j14; + int i, j, ij, ji, ij1, ji1; + int n2pow, n8pow, nthpo, ipass, nxtlt, lengt; + n2pow = fastlog2( size ); + nthpo = size ; + fn = 1.0 / (double)nthpo; - double dblTemp ; + if(in==FORWARD) + /* take conjugate */ + for(i=0;i< size ;i++) { + b[i] = DoubleComplex ( zreals( b[i]) , - zimags (b[i])); - do - { - iPow2ofDimen = i ; - if ( i != 0) - iTempDimen *= 2 ; - i++; - }while ( _iDimen != iTempDimen || i < 15 ); + /* b[i].im *= -1.0;*/ + } - if ( _iDimen != iTempDimen) + if(in==INVERSE) + /*scramble inputs*/ + for(i=0,j=size/2;j= 0) - { - if ( CRES == 0 ) - { - r2tx ( _iDimen , _pdblReal , _pdblImag) ; - - } - else - { - r4tx ( _iDimen , _pdblReal , _pdblImag) ; - } - } - for ( i = 14 ; i >= 0 ; i-- ) - { - l[i] = 1 ; - CRES = i - iPow2ofDimen ; - if ( CRES <= 0) - l[i] = 1 << ( iPow2ofDimen + 1 -i ) ; + for ( i = 0 ; i < size /2 ; i++) + { + temp = b[i] ; + b[i] = b[i+(size/2)]; + b[i+(size/2)]= temp ; - } - ij = 0 ; - - - for ( j1=0 ; j1 < l[1-1] ; j1++ ) - for ( j2=j1 ; j2 < l[2-1] ; j2 += l[1-1] ) - for ( j3=j2 ; j3 < l[3-1] ; j3 += l[2-1] ) - for ( j4=j3 ; j4 < l[4-1] ; j4 += l[3-1] ) - for ( j5=j4 ; j5 < l[5-1] ; j5 += l[4-1] ) - for ( j6=j5 ; j6 < l[6-1] ; j6 += l[5-1] ) - for ( j7=j6 ; j7 < l[7-1] ; j7 += l[6-1] ) - for ( j8=j7 ; j8 < l[8-1] ; j8 += l[7-1] ) - for ( j9=j8 ; j9 < l[9-1] ; j9 += l[8-1] ) - for ( j10=j9 ; j10 < l[10-1] ; j10 += l[9-1] ) - for ( j11=j10 ; j11 < l[11-1] ; j11 += l[10-1] ) - for ( j12=j11 ; j12 < l[12-1] ; j12 += l[11-1] ) - for ( j13=j12 ; j13 < l[13-1] ; j13 += l[12-1] ) - for ( j14=j13 ; j14 < l[14-1] ; j14 += l[13-1] ) - for ( ji=j14 ; ji < l[15-1] ; ji += l[14-1] ) - { - CRES = ij - ji ; - if ( CRES < 0 ) - { - dblTemp = _pdblReal[ij]; - _pdblReal[ij] = _pdblReal[ji]; - _pdblReal[ji] = dblTemp; - dblTemp = _pdblImag[ij]; - _pdblImag[ij] = _pdblImag[ji]; - _pdblImag[ji] = dblTemp; - - } - ij ++ ; - } - - - - /*130*/ - if ( _iDirect == 0 ) - { - for ( i = 0 ; i < _iDimen ; i++) - { - _pdblImag[i] *= -1 ; - } - } - else - { - for ( i = 0 ; i < _iDimen ; i++) - { - _pdblReal[i] /= _iDimen ; - _pdblImag[i] /= _iDimen ; - } - } + } + } -- cgit