diff options
author | simon | 2008-10-09 09:46:19 +0000 |
---|---|---|
committer | simon | 2008-10-09 09:46:19 +0000 |
commit | e7912d57a997a6e20ce95458ea8b561521277bed (patch) | |
tree | bdae57ea9253e0a8c5bcfe246aa98d5a9e89549a /src/signalProcessing/fft | |
parent | 13381564d0570ccc23df6d042a613f4f025edc67 (diff) | |
download | scilab2c-e7912d57a997a6e20ce95458ea8b561521277bed.tar.gz scilab2c-e7912d57a997a6e20ce95458ea8b561521277bed.tar.bz2 scilab2c-e7912d57a997a6e20ce95458ea8b561521277bed.zip |
a new test passed , still some others to do
Diffstat (limited to 'src/signalProcessing/fft')
-rw-r--r-- | src/signalProcessing/fft/dfft2.c | 27 | ||||
-rw-r--r-- | src/signalProcessing/fft/dfftbi.c | 161 | ||||
-rw-r--r-- | src/signalProcessing/fft/dfftmx.c | 82 | ||||
-rw-r--r-- | src/signalProcessing/fft/fft_internal.h | 5 | ||||
-rw-r--r-- | src/signalProcessing/fft/testDoubleFft.c | 75 | ||||
-rw-r--r-- | src/signalProcessing/fft/zfftma.c | 58 |
6 files changed, 310 insertions, 98 deletions
diff --git a/src/signalProcessing/fft/dfft2.c b/src/signalProcessing/fft/dfft2.c index 7a5ac88a..1ef87535 100644 --- a/src/signalProcessing/fft/dfft2.c +++ b/src/signalProcessing/fft/dfft2.c @@ -13,30 +13,19 @@ #include "fft_internal.h" #include <stdlib.h> -void dfft2 ( double* a , double* b , int nseg , int n , int nspn , int isn , int ierr, double* iw , int lw ) +void dfft2 ( double* a , double* b , int nseg , int n , int nspn , int isn , int ierr ) { - /*created to avoid the cast problem */ - int* iIw = (int*) malloc( sizeof (int) * (unsigned int) lw ); + dfftbi ( a , b , nseg , n , nspn , isn , ierr ); + int iii = 0 ; + printf ("\n\n" ); + for ( iii = 0 ; iii < 3 ; iii++) + { -/*so these lines are duplicated */ - iIw[0] = 0 ; - iIw[1] = 10 ; - iIw[2] = 10 ; - iIw[3] = lw ; - iIw[4] = 10 ; - - iw[0] = 0 ; - iw[1] = 10 ; - iw[2] = 10 ; - iw[3] = lw ; - iw[4] = 10 ; - - dfftbi ( a , b , nseg , n , nspn , - isn , ierr , iIw[0], iIw[1] , iIw[2], - iIw[3], iIw[4], iw, iIw ); + printf ("\t\t %d edede tot : %f \t %f\n" , iii ,a[iii], b[iii]); + } return ; diff --git a/src/signalProcessing/fft/dfftbi.c b/src/signalProcessing/fft/dfftbi.c index 8d3f7846..90494ca3 100644 --- a/src/signalProcessing/fft/dfftbi.c +++ b/src/signalProcessing/fft/dfftbi.c @@ -15,11 +15,42 @@ #include "max.h" #include "fft_internal.h" + +/* + iIw[0] = 0 ; + iIw[1] = 10 ; + iIw[2] = 10 ; + iIw[3] = lw ; + iIw[4] = 10 ; + + iw[0] = 0 ; + iw[1] = 10 ; + iw[2] = 10 ; + iw[3] = lw ; + iw[4] = 10 ; + + dfftbi ( a , b , nseg , n , nspn , + isn , ierr , iIw[0], iIw[1] , iIw[2], + iIw[3], iIw[4], iw, iIw ); + void dfftbi ( double* a , double* b , int nseg , int n , int nspn , + int isn , int ierr, int lout , int lnow , + int lused ,int lmax , int lbook , double* rstak , int* istakk ) +*/ + void dfftbi ( double* a , double* b , int nseg , int n , int nspn , - int isn , int ierr , int lout , int lnow , int lused , - int lmax , int lbook , double* rstak , int* istak ) + int isn , int ierr) { + double* rstak ; + int* istak ; + + int lout = 0 ; + int lnow = 10; + int lused= 10; + int lmax; /* to compute after*/ + int lbook = 10 ; + + int nfac[15] ; int i ; int in ; @@ -43,36 +74,39 @@ void dfftbi ( double* a , double* b , int nseg , int n , int nspn , int nf = abs ( n ) ; ierr = 0 ; - printf ( "debut de dfftbi \n" ); + printf ( "debut de dfftbi \n" ); /*determine the factors of n */ if ( nf == 1) - { - printf ( "argh return 1 \n" ); return ; - } + k = nf ; nspan = abs ( nf*nspn ) ; ntot = abs ( nspan*nseg) ; + printf ( "nspan %d \t ntot %d\n" , nspan ,ntot ); if ( isn*ntot == 0 ) { ierr = 1 ; - printf ( "argh return 2 \n" ); return ; } - do + + + while ( (k- (int)(k/16)*16 ) == 0 ) { m++; - printf ("m %d ,k %d ,k2 %d\n" , m , k ,(int) (k/16)*16 ); + printf ("k/16*16\t m %d ,k %d ,k2 %d\n" , m , k ,(int) (k/16)*16 ); nfac[m-1] = 4 ; k = k >> 4 ; - }while ( (k- (int)(k/16)*16 ) == 0 ); + } + + +printf ("avant ploa k %d\n\n" , k ); do { while ( k%jj == 0 ) @@ -80,36 +114,40 @@ void dfftbi ( double* a , double* b , int nseg , int n , int nspn , m++; nfac[m-1] = j ; k /= jj ; + printf ("\nm %d ,k %d j %d jj %d\n" , m , k ,j , jj); } - + printf ("40-40 \n" ); j+=2; jj= j*j ; }while ( jj <= k); -printf ( "ploa\n" ); +printf ( "ploa\n" ); + + if ( k <= 4) { + printf ("50-50 k %d\t m %d\n" , k , m ); kt = m; - nfac[m+1] = k; + nfac[m] = k; if ( k != 1 ) m++; } else { - if ( (k & 7) != 0 ) + if ( (k & 3) == 0 ) { m++; nfac[m-1] = 2 ; k = k >> 2 ; } - /*all square factor out now but k >= 5 still */ + /*all square factor out now but k >= 5 still */ kt = m ; maxp = max ( (kt+1)*2 , k-1); j=2; -printf ( "plob\n" ); + printf ( "plob\n" ); do { if ( k%j == 0 ) @@ -125,48 +163,68 @@ printf ( "plob\n" ); } + + if ( m <= ( kt+1) ) maxp = m + kt + 1 ; + printf ( "90 m %d \t kt %d\n" , m , kt ); + if ( m + kt > 15) - { + { ierr = 2 ; - printf ( "argh return 5 \n" ); + printf ( "argh return 5 \n" ); return ; } + +/** you are here mister allan **/ + printf ( "avant test kt , kt =%d\n" , kt ); if ( kt != 0 ) { j = kt ; do{ m++; + printf ( "100 m %d\t j %d\t nfac[j-1] %d \n" , m , j , nfac[j-1]); nfac[m-1] = nfac[j-1]; j--; }while ( j != 0) ; } + printf ( "110 maxf %d \tnfac[maxf-1] %d\n" , m-kt , nfac[m-kt-1]); maxf = nfac[m-kt-1] ; if ( kt > 0 ) maxf = max ( nfac[kt-1] , maxf ); - for ( kkk = 1 ; kkk < m ; kkk++ ) + + printf ( "avant kkk \tm %d\t maxf %d \n" ,m , maxf); + + for ( kkk = 1 ; kkk <= m ; kkk++ ) + { maxf = max ( maxf , nfac[kkk-1]); + printf ( "boucle kkk maxf %d nfac %d \tm %d\n" , maxf , nfac[kkk-1] ,m); + } + + + - nitems = maxf * 4 ; + + + + nitems = maxf * 4 ; itype = 4 ; - istkgt = ( lnow*isize[1] -1)/isize[itype-1] + 2; - i = ( (istkgt - 1 + nitems) * isize[itype-1] -1) / isize[1] + 3 ; - printf ("i %d ,\n lmax %d\n istkgt %d\n lnow %d \n", i , lmax , istkgt , lnow ) ; - - if ( i > lmax ) - { - ierr = -i ; - printf ( "argh return 3 \n" ); - return ; - } + istkgt = 2 + ((lnow-1)/2) ;/*lnow = 10*/ + istkgt = 6; + + /*i = ( (istkgt - 1 + nitems) * isize[3] -1) + 3 ;*/ + i = 12 + nitems*2; + printf ("i %d ,\n lmax %d\n istkgt %d\n lnow %d \n", i , lmax , istkgt , lnow ) ; + + + istak = (int*) malloc ( sizeof (int) * (unsigned int) i); istak[i-2] = itype ; istak[i-1] = lnow ; @@ -182,16 +240,17 @@ printf ( "plob\n" ); nitems = maxp ; itype = 2 ; - istkgt = ( lnow*isize[1] -1)/isize[itype-1] + 2; + /*istkgt = ( lnow*isize[1] -1)/isize[1] + 2;*/ + istkgt = lnow + 1 ; + /*i = ( (istkgt - 1 + nitems) * isize[1] -1) / isize[1] + 3 ;*/ + i = ( ( lnow + nitems) * isize[1] -1) / isize[1] + 3 ; + istak = (int*) realloc ( istak ,sizeof (int) * (unsigned int) i); + rstak = (double*) malloc ( sizeof (double) * (unsigned int) i); + + printf ("i %d ,\n lmax %d\n istkgt %d\n lnow %d \n", i , lmax , istkgt , lnow ) ; + - i = ( (istkgt - 1 + nitems) * isize[itype-1] -1) / isize[1] + 3 ; - if ( i > lmax ) - { - ierr = -i ; - printf ( "argh return 4 \n" ); - return ; - } istak[i-2] = itype ; istak[i-1] = lnow ; @@ -209,17 +268,39 @@ c k=2*k-1 c ********************************************* */ - printf ( "dfftmx me voilĂ tayoooooooo \n" ); + printf ( "dfftmx me voilĂ tayoooooooo \n" ); + printf ( "ntot \t%d\n" + "nf \t%d\n" + "nspan\t%d\t\n" + "isn\t%d\t\n" + "m\t%d\t\n" + "kt\t%d\t\n" + "j\t%d\t\n" + "jj\t%d\t\n" + "j2\t%d\n" + "j3\t%d\n" + "k\t%d\n" + , ntot , nf , nspan , isn , m , kt , j ,jj, j2,j3 , k ); dfftmx( a , b , ntot , nf , nspan , isn , m , kt , &rstak[j-1] , &rstak[jj-1] , &rstak[j2-1] , &rstak[j3-1] , &istak[k-1] , nfac); k =2 ; in = 2 ; +/** plop */ + int iii = 0 ; + printf ("\n\n" ); + for ( iii = 0 ; iii < 3 ; iii++) + { + + printf ("\t\t %d dfftbi : %f \t %f\n" , iii ,a[iii], b[iii]); + + } +/** plop */ if (!( lbook <= lnow && lnow <= lused && lused <= lmax )) { ierr = 3 ; - printf ( "argh return 6 \n" ); + printf ( "argh return 6 \n" ); return ; } diff --git a/src/signalProcessing/fft/dfftmx.c b/src/signalProcessing/fft/dfftmx.c index d642dc74..533f6a6d 100644 --- a/src/signalProcessing/fft/dfftmx.c +++ b/src/signalProcessing/fft/dfftmx.c @@ -122,11 +122,22 @@ int dfftmx ( double* _pdblA , double* _pdblB , int _iNtot, int _iN, int _iNspan, s72 = sin (rad/0.6250); s120= sqrt(0.750); + int iii = 0 ; + printf ("\n\n" ); + for ( iii = 0 ; iii < 3 ; iii++) + { + + printf ("\t\t %d tot : %f \t %f\n" , iii ,a[iii], b[iii]); + + } + + printf ( "preliminary\n" ); preliminaryWork () ; while ( retVal == 0 ) { + printf ( "factortransform\n" ); retVal = factorTransform ( ) ; } @@ -134,12 +145,26 @@ int dfftmx ( double* _pdblA , double* _pdblB , int _iNtot, int _iN, int _iNspan, np[0] = ks ; if ( kt != 0) - permute_stage1 ( ) ; - + { + printf ( "permute stage 1\n" ); + permute_stage1 ( ) ; + } - if ( 2*kt + 1 < m ){ + if ( 2*kt + 1 < m ) + { + printf ( "permute stage 2\n" ); permute_stage2 ( ) ; - } + } + + for ( iii = 0 ; iii < 3 ; iii++) + { + + printf ("\t\t out %d tot : %f \t %f\n" , iii ,a[iii], b[iii]); + + } + + _pdblA = a ; + _pdblB = b ; return 0 ; } @@ -212,9 +237,14 @@ switch ( nfac[i-1] ) { case 2 : /*transform for factor of 2 (including rotation factor)*/ + printf ( "\tpre_fOf2Trans\n" ); retVal = pre_fOf2Trans( ) ; if ( retVal == 0 ) + { + printf ( "\tfactorOf2Transform\n" ); factorOf2Transform ( ) ; + + } break ; case 4 : @@ -222,34 +252,64 @@ switch ( nfac[i-1] ) kspnn = kspan ; kspan = kspan >> 2 ; /*kspan /= 4 */ + printf ( "\tfactorOf4Transform\n" ); retVal = factorOf4Transform ( ) ; break ; case 3 : + printf ( "\tfactorOf3Transform\n" ); + k = nfac[i-1] ; + kspnn = kspan ; + kspan = kspan / k ; + printf ("\t\t k %d\n" , k); + factorOf3Transform ( ) ; break ; case 5 : + printf ( "\tfactorOf5Transform\n" ); + k = nfac[i-1] ; + kspnn = kspan ; + kspan = kspan / k ; + printf ("\t\t k %d\n" , k); factorOf5Transform ( ) ; break ; default : + + k = nfac[i-1] ; + kspnn = kspan ; + kspan = kspan / k ; + printf ("\t\t k %d\n" , k); if ( nfac[i-1] != jf) - preFOtherTransform ( ) ; + { + printf ( "\tpreFOtherTransform \n" ); + preFOtherTransform ( ) ; + } + printf ( "\tfactorOfOtherTransform \n" ); factorOfOtherTransform ( ) ; break ; } if ( retVal == 42 ) - retVal = mulByRotationFactor ( ) ; + { + printf ( "\t\t i %d m %d\n" , i , m ); + if ( i != m) + { + printf ( "\tmulByRotationFactor \n" ); + retVal = mulByRotationFactor ( ) ; + } + else + retVal = 1 ; + } if ( retVal == 1 ) return 1 ; /*goto permute */ else - return 0 ; /*goto factor_transform */ + return 0 ; /*goto factor_transform => once again*/ @@ -458,8 +518,6 @@ int factorOf4Transform (void) } - - void f4t_150 (void) { @@ -583,15 +641,12 @@ int f4t_170 (void) - - - - void factorOf3Transform (void) { do { + printf ( "\t\t une boucle dans factor of 3\n"); k1 = kk + kspan ; k2 = k1 + kspan ; @@ -613,6 +668,7 @@ do a[k1-1] = ak - bj ; b[k1-1] = bk + aj ; a[k2-1] = ak + bj ; + b[k2-1] = bk - aj ; kk = k2 + kspan ; diff --git a/src/signalProcessing/fft/fft_internal.h b/src/signalProcessing/fft/fft_internal.h index f230a003..6c14bb96 100644 --- a/src/signalProcessing/fft/fft_internal.h +++ b/src/signalProcessing/fft/fft_internal.h @@ -19,13 +19,12 @@ #define FORWARD 0 #define INVERSE 1 void dfft2 ( double* a , double* b , int nseg , int n , int nspn , - int isn , int ierr, double* iw , int lw ); + int isn , int ierr); void dfftbi ( double* a , double* b , int nseg , int n , int nspn , - int isn , int ierr, int lout , int lnow , - int lused ,int lmax , int lbook , double* rstak , int* istakk ); + int isn , int ierr ); void fft842 (doubleComplex* b, int size , int in); diff --git a/src/signalProcessing/fft/testDoubleFft.c b/src/signalProcessing/fft/testDoubleFft.c index 374071ae..840ecdfe 100644 --- a/src/signalProcessing/fft/testDoubleFft.c +++ b/src/signalProcessing/fft/testDoubleFft.c @@ -17,6 +17,7 @@ #define ROW 1 #define COLS2 2 +#define COLS3 3 #define COLS4 4 #define COLS8 8 #define COLS16 16 @@ -25,9 +26,18 @@ #define ZREAL_IN2 { 0.00022113462910056 , 0.33032709173858166 } #define ZIMAG_IN2 { 0.66538110421970487 , 0.62839178834110498 } +#define ZREAL_IN3 { 2.48206677380949259, 0.43537130765616894, 0.97385666053742170} +#define ZIMAG_IN3 { 2.14807060454040766,- 0.78285905346274376, 0.42632796149700880} + + #define ZREAL_IN4 { 0.84974523587152362, 0.68573101982474327, 0.87821648130193353, 0.06837403681129217} #define ZIMAG_IN4 { 0.56084860628470778, 0.66235693730413914, 0.72635067673400044, 0.19851438421756029} +#define ZREAL_IN5 { 0.84974523587152362, 0.68573101982474327, 0.87821648130193353, 0.06837403681129217,\ + 0.65251349471509457} +#define ZIMAG_IN5 { 0.56084860628470778, 0.66235693730413914, 0.72635067673400044, 0.19851438421756029,\ + 0.56642488157376647} + #define ZREAL_IN8 { 0.54425731627270579, 0.23207478970289230, 0.23122371966019273, 0.21646326314657927,\ 0.88338878145441413, 0.65251349471509457, 0.30760907428339124, 0.93296162132173777 } #define ZIMAG_IN8 { 0.21460078610107303, 0.31264199689030647, 0.36163610080257058, 0.2922266637906432,\ @@ -65,6 +75,9 @@ #define ZREAL_RESULT2 { 0.33054822636768222,- 0.33010595710948110} #define ZIMAG_RESULT2 { 1.29377289256080985, 0.03698931587859988} +#define ZREAL_RESULT3 { 3.8912947420030832 , 0.73026611683127762, 2.82463946259411713} +#define ZIMAG_RESULT3 { 1.79153951257467270, 2.79267814568426775, 1.85999415536228230} + #define ZREAL_RESULT4 { 2.48206677380949259, 0.43537130765616894, 0.97385666053742170, -0.49231379851698875} #define ZIMAG_RESULT4 { 2.14807060454040766,- 0.78285905346274376, 0.42632796149700880, 0.45185491256415844} @@ -155,6 +168,58 @@ static void zfftmaTest2 (void ) } +static void zfftmaTest3 (void ) +{ + int i = 0 ; + + double tRealIn [] = ZREAL_IN3; + double tImagIn [] = ZIMAG_IN3 ; + + + + double tRealResult [] = ZREAL_RESULT3; + double tImagResult [] = ZIMAG_RESULT3 ; + + + + doubleComplex* out = (doubleComplex*) malloc ( sizeof(doubleComplex) * (unsigned int) (ROW*COLS3)); + doubleComplex* in = DoubleComplexMatrix ( tRealIn , tImagIn , ROW*COLS3 ); + doubleComplex* Result = DoubleComplexMatrix ( tRealResult , tImagResult ,ROW*COLS3) ; + + + + zfftma ( in , ROW , COLS3 , out ) ; + + /* if we don't add that test assert failed if result = 0 'cause then we have |(out - 0)|/|out| = 1*/ + + + for ( i = 0 ; i < (ROW*COLS3 ) ; i++ ) + { + printf ( "\t\t %d out : %e\t %e\t * i result : %e\t %e\t * i assert : : %e\t %e\t * i \n" , + i , + zreals(out[i]) , + zimags(out[i]), + zreals (Result[i]) , + zimags (Result[i]), + fabs( zreals(out[i]) - zreals (Result[i]) ) / fabs (zreals (out[i])) , + fabs( zimags(out[i]) - zimags (Result[i]) ) / fabs (zimags (out[i]))); + + if ( zreals(out[i]) < 1e-14 && zreals (Result[i]) < 1e-18 ) + assert ( 1 ) ; + else + assert ( fabs( zreals(out[i]) - zreals (Result[i]) ) / fabs (zreals (out[i])) < 1e-12 ); + + + if ( zimags(out[i]) < 1e-14 && zimags (Result[i]) < 1e-18 ) + assert ( 1 ) ; + else + assert ( fabs( zimags(out[i]) - zimags (Result[i]) ) / fabs (zimags (out[i])) < 1e-12 ) ; + + } + + +} + static void zfftmaTest4 (void ) { int i = 0 ; @@ -359,20 +424,24 @@ static int testFft(void) { printf("\n>>>> FFT Tests\n"); printf("\t>>>> Matrix Double Realt Tests\n"); /*dfftmaTest();*/ - printf("\t>>>> Vector 16 Double Complex Tests\n"); - zfftmaTest16(); + printf("\n\n\n"); printf("\t>>>> Vector 2 Double Complex Tests\n"); zfftmaTest2(); + printf("\t>>>> Vector 3 Double Complex Tests\n"); + zfftmaTest3(); + /* printf("\t>>>> Vector 4 Double Complex Tests\n"); zfftmaTest4(); printf("\t>>>> Vector 8 Double Complex Tests\n"); zfftmaTest8(); + printf("\t>>>> Vector 16 Double Complex Tests\n"); + zfftmaTest16(); printf("\t>>>> Vector 32 Double Complex Tests\n"); zfftmaTest32(); - +*/ return 0; } diff --git a/src/signalProcessing/fft/zfftma.c b/src/signalProcessing/fft/zfftma.c index 2b0a7510..f08158d4 100644 --- a/src/signalProcessing/fft/zfftma.c +++ b/src/signalProcessing/fft/zfftma.c @@ -9,7 +9,8 @@ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt * */ - +#define FFT842 1 +#define DFFT2 0 #include "fft.h" #include <stdio.h> @@ -17,10 +18,13 @@ void zfftma ( doubleComplex* in , int rows, int cols, doubleComplex* out) { +int choosenAlgo = DFFT2 ; + int size = rows*cols ; int sizeTemp = 0; -int sizeWorkSpace = 2* size; - +/* +int sizeWorkSpace = size *2; +*/ int rowsTemp = 0 ; int colsTemp = 0 ; @@ -28,14 +32,16 @@ int ierr = 0 ; int isn = -1; int i = 0; + double* realIn = (double*) malloc ( sizeof (double) * (unsigned int) size ); double* imagIn = (double*) malloc ( sizeof (double) * (unsigned int) size ); doubleComplex* inTemp = (doubleComplex*) malloc ( sizeof (doubleComplex) * (unsigned int) size ); +/* double* workSpace = (double*) malloc ( sizeof (double) * (unsigned int) sizeWorkSpace ); - +*/ zimaga ( in , size , imagIn) ; @@ -54,11 +60,12 @@ if ( rows == 1 || cols == 1 ) { printf ( "we call fft842 \n" ) ; fft842 ( in , size , 0 ); + choosenAlgo = FFT842 ; } else { printf ( "we call dfft2 \n" ) ; - dfft2 ( realIn , imagIn , 1 , size , 1 , isn , ierr , workSpace , sizeWorkSpace ); + dfft2 ( realIn , imagIn , 1 , size , 1 , isn , ierr /*, workSpace , sizeWorkSpace*/ ); } @@ -66,12 +73,13 @@ if ( rows == 1 || cols == 1 ) else { printf ( "we call dfft2 2\n" ) ; - dfft2 ( realIn , imagIn , 1 , size , 1 , isn , ierr , workSpace , sizeWorkSpace ); + dfft2 ( realIn , imagIn , 1 , size , 1 , isn , ierr /*, workSpace , sizeWorkSpace */); } } + else - { +{ printf ( "it'a matrix \n" ) ; rowsTemp = (int) pow ( 2 , log( rows + 0.5) /log ( 2 )) ; colsTemp = (int) pow ( 2 , log( cols + 0.5) /log ( 2 )) ; @@ -83,21 +91,22 @@ else for ( i = 0 ; i < rows ; i++ ) { fft842 ( &in[ cols*i] , cols , 0); + choosenAlgo = FFT842 ; } } else { - dfft2 ( realIn, imagIn ,rows , cols , 1 , isn , ierr ,workSpace , sizeWorkSpace ); + dfft2 ( realIn, imagIn ,rows , cols , 1 , isn , ierr/* ,workSpace , sizeWorkSpace */); } } else { - dfft2 ( realIn, imagIn ,rows , cols , 1 , isn , ierr ,workSpace , sizeWorkSpace ); + dfft2 ( realIn, imagIn ,rows , cols , 1 , isn , ierr/* ,workSpace , sizeWorkSpace*/ ); } /*second call*/ - if ( 2*rows <= sizeWorkSpace ) + if ( 2*rows <= 0 /* sizeWorkSpace*/ ) { if ( rowsTemp == rows ) { @@ -109,35 +118,44 @@ else C2F(zcopy) ( rows, in + i, cols, inTemp , 1 ); fft842( inTemp , rows , 0); - + choosenAlgo = FFT842 ; C2F(zcopy) ( rows, inTemp , cols, in + i, 1 ); } } else { - dfft2 ( realIn, imagIn, 1, rows, cols, isn, ierr, workSpace, sizeWorkSpace); + dfft2 ( realIn, imagIn, 1, rows, cols, isn, ierr/*, workSpace, sizeWorkSpace*/); } } else { - dfft2 ( realIn, imagIn, 1, rows, cols, isn, ierr, workSpace, sizeWorkSpace); + dfft2 ( realIn, imagIn, 1, rows, cols, isn, ierr/*, workSpace, sizeWorkSpace*/); } } else { - dfft2 ( realIn, imagIn, 1, rows, cols, isn, ierr, workSpace, sizeWorkSpace); + dfft2 ( realIn, imagIn, 1, rows, cols, isn, ierr/*, workSpace, sizeWorkSpace*/); } - } - +} +if ( choosenAlgo == FFT842 ) + { + for ( i = 0 ; i < size ; i++) + { + out[i] = DoubleComplex ( zreals(in[i]) , zimags(in[i]) ); + } + } +else + { + for ( i = 0 ; i < size ; i++) + { + out[i] = DoubleComplex ( realIn[i] , imagIn[i] ); + } -for ( i = 0 ; i < size ; i++) -{ -out[i] = DoubleComplex ( zreals(in[i]) , zimags(in[i]) ); -} + } } |