diff options
author | torset | 2008-12-19 15:26:36 +0000 |
---|---|---|
committer | torset | 2008-12-19 15:26:36 +0000 |
commit | 92a94f77a9d6a31d2423e85f74547eca45d89425 (patch) | |
tree | 1e27f8c0cc39af5958e0e2aa6d8f75306c7a6974 /src/signalProcessing/ifft/zifftma.c | |
parent | 7bcc74849a84b87464ca6cc48cdbde8206a3a602 (diff) | |
download | scilab2c-92a94f77a9d6a31d2423e85f74547eca45d89425.tar.gz scilab2c-92a94f77a9d6a31d2423e85f74547eca45d89425.tar.bz2 scilab2c-92a94f77a9d6a31d2423e85f74547eca45d89425.zip |
debug ifft and add new tests
Diffstat (limited to 'src/signalProcessing/ifft/zifftma.c')
-rw-r--r-- | src/signalProcessing/ifft/zifftma.c | 264 |
1 files changed, 126 insertions, 138 deletions
diff --git a/src/signalProcessing/ifft/zifftma.c b/src/signalProcessing/ifft/zifftma.c index 9d103fd1..8968b359 100644 --- a/src/signalProcessing/ifft/zifftma.c +++ b/src/signalProcessing/ifft/zifftma.c @@ -18,144 +18,132 @@ void zifftma ( doubleComplex* in , int rows, int cols, doubleComplex* out) { -int choosenAlgo = DFFT2 ; - -int size = rows*cols ; -int sizeTemp = 0; -/* -int sizeWorkSpace = size *2; -*/ -int rowsTemp = 0 ; -int colsTemp = 0 ; - -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) ; -zreala ( in , size , realIn) ; - -if ( rows == 1 || cols == 1 ) -{ - printf ( "it'a vector \n" ) ; - - sizeTemp = (int) pow ( 2 , (int ) (log( size + 0.5 ) /log ( 2 ))) ; - printf ("pow %e , temp %d \n" , pow ( 2 , (int )(log( size +0.5 ) /log ( 2 ))), sizeTemp); - - if ( size == sizeTemp ) - { - if ( size <= pow ( 2 , 15 )) - { - printf ( "we call ifft842 \n" ) ; - ifft842 ( in , size , 1 ); - choosenAlgo = IFFT842 ; - } - else - { - printf ( "we call dfft2 \n" ) ; - difft2 ( realIn , imagIn , 1 , size , 1 , isn , ierr /*, workSpace , sizeWorkSpace*/ ); - } - - - } - else - { - printf ( "we call dfft2 2\n" ) ; - difft2 ( 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 )) ; - - if ( cols == colsTemp) - { - if ( cols <= pow ( 2 , 15 )) - { - for ( i = 0 ; i < rows ; i++ ) - { - ifft842 ( &in[ cols*i] , cols , 1); - choosenAlgo = IFFT842 ; - } - } - else - { - difft2 ( realIn, imagIn ,rows , cols , 1 , isn , ierr/* ,workSpace , sizeWorkSpace */); - } - } - else - { - difft2 ( realIn, imagIn ,rows , cols , 1 , isn , ierr/* ,workSpace , sizeWorkSpace*/ ); - } - - /*second call*/ - - if ( 2*rows <= 0 /* sizeWorkSpace*/ ) - { - if ( rowsTemp == rows ) - { - if ( rows <= pow ( 2 ,15) ) - { - /*compute the fft on each line of the matrix */ - for (i = 0 ; i < cols ; i++ ) - { - C2F(zcopy) ( rows, in + i, cols, inTemp , 1 ); - - ifft842( inTemp , rows , 1); - choosenAlgo = IFFT842 ; - C2F(zcopy) ( rows, inTemp , cols, in + i, 1 ); - - } - } - else - { - difft2 ( realIn, imagIn, 1, rows, cols, isn, ierr/*, workSpace, sizeWorkSpace*/); - } - } - else - { - difft2 ( realIn, imagIn, 1, rows, cols, isn, ierr/*, workSpace, sizeWorkSpace*/); - } - } - else - { - difft2 ( realIn, imagIn, 1, rows, cols, isn, ierr/*, workSpace, sizeWorkSpace*/); - } -} - - - -if ( choosenAlgo == IFFT842 ) - { - 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] ); - } - - } + int choosenAlgo = DFFT2 ; + + int size = rows*cols ; + int sizeTemp = 0; + + int rowsTemp = 0 ; + int colsTemp = 0 ; + + 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 ); + + + + zimaga ( in , size , imagIn) ; + zreala ( in , size , realIn) ; + + if ( rows == 1 || cols == 1 ) + { + printf ( "it'a vector \n" ) ; + + sizeTemp = (int) pow ( 2 , (int ) (log( size + 0.5 ) /log ( 2 ))) ; + printf ("pow %e , temp %d \n" , pow ( 2 , (int )(log( size +0.5 ) /log ( 2 ))), sizeTemp); + + if ( size == sizeTemp ) + { + if ( size <= pow ( 2 , 15 )) + { + printf ( "we call ifft842 \n" ) ; + ifft842 ( in , size , 1 ); + choosenAlgo = IFFT842 ; + } + else + { + printf ( "we call dfft2 \n" ) ; + difft2 ( realIn , imagIn , 1 , size , 1 , isn , ierr); + } + + + } + else + { + printf ( "we call dfft2 2\n" ) ; + difft2 ( realIn , imagIn , 1 , size , 1 , isn , ierr); + } + + } + + else + { + printf ( "it'a matrix \n" ) ; + rowsTemp = (int) pow ( 2 ,(int) log( rows + 0.5) /log ( 2 )) ; + colsTemp = (int) pow ( 2 ,(int) log( cols + 0.5) /log ( 2 )) ; + + if ( rows == rowsTemp) + { + if ( rows <= pow ( 2 , 15 )) + { + for ( i = 0 ; i < cols ; i++ ) + { + ifft842 ( &in[ rows*i] , rows , 1); + choosenAlgo = IFFT842 ; + } + } + else + { + difft2 ( realIn, imagIn ,cols , rows , 1 , isn , ierr); + } + } + else + { + difft2 ( realIn, imagIn ,cols , rows , 1 , isn , ierr); + } + + /*second call*/ + if ( colsTemp == cols ) + { + if ( cols <= pow ( 2 ,15) ) + { + /*compute the fft on each line of the matrix */ + for (i = 0 ; i < rows ; i++ ) + { + C2F(zcopy) ( cols, in + i, rows, inTemp , 1 ); + + ifft842( inTemp , cols , 1); + choosenAlgo = IFFT842 ; + C2F(zcopy) ( cols, inTemp , 1, in + i, rows); + + } + } + else + { + difft2 ( realIn, imagIn, 1, cols, rows, isn, ierr); + } + } + else + { + difft2 ( realIn, imagIn, 1, cols, rows, isn, ierr); + } + + } + + + + if ( choosenAlgo == IFFT842 ) + { + 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] ); + } + + } } |