summaryrefslogtreecommitdiff
path: root/src/signalProcessing/fft
diff options
context:
space:
mode:
authorsimon2008-10-09 09:46:19 +0000
committersimon2008-10-09 09:46:19 +0000
commite7912d57a997a6e20ce95458ea8b561521277bed (patch)
treebdae57ea9253e0a8c5bcfe246aa98d5a9e89549a /src/signalProcessing/fft
parent13381564d0570ccc23df6d042a613f4f025edc67 (diff)
downloadscilab2c-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.c27
-rw-r--r--src/signalProcessing/fft/dfftbi.c161
-rw-r--r--src/signalProcessing/fft/dfftmx.c82
-rw-r--r--src/signalProcessing/fft/fft_internal.h5
-rw-r--r--src/signalProcessing/fft/testDoubleFft.c75
-rw-r--r--src/signalProcessing/fft/zfftma.c58
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]) );
-}
+ }
}