diff options
Diffstat (limited to 'src/signalProcessing/fft/dfftbi.c')
-rw-r--r-- | src/signalProcessing/fft/dfftbi.c | 161 |
1 files changed, 121 insertions, 40 deletions
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 ; } |