summaryrefslogtreecommitdiff
path: root/src/signalProcessing/fft
diff options
context:
space:
mode:
authorsimon2008-10-24 15:16:42 +0000
committersimon2008-10-24 15:16:42 +0000
commit4e2567ecd3643cd80af11f1e939f21bf6898b4f4 (patch)
tree1a80fea6e4029814d6d2ca9d8ac45a3f424811f5 /src/signalProcessing/fft
parente8373dbc1f6aa6a6b9d19484896ec3ef84674a08 (diff)
downloadscilab2c-4e2567ecd3643cd80af11f1e939f21bf6898b4f4.tar.gz
scilab2c-4e2567ecd3643cd80af11f1e939f21bf6898b4f4.tar.bz2
scilab2c-4e2567ecd3643cd80af11f1e939f21bf6898b4f4.zip
added some comment and clean some code
Diffstat (limited to 'src/signalProcessing/fft')
-rw-r--r--src/signalProcessing/fft/dfftmx.c215
-rw-r--r--src/signalProcessing/fft/fft842.c48
2 files changed, 98 insertions, 165 deletions
diff --git a/src/signalProcessing/fft/dfftmx.c b/src/signalProcessing/fft/dfftmx.c
index cffc383e..e9ab1504 100644
--- a/src/signalProcessing/fft/dfftmx.c
+++ b/src/signalProcessing/fft/dfftmx.c
@@ -90,7 +90,8 @@ static int jj;
-
+/*note on this code all numbers alone in comment is
+ a reference to the corresponding goto in the original fotran code */
int dfftmx ( double* _pdblA , double* _pdblB , int _iNtot, int _iN, int _iNspan,
int _iIsn, int _iM, int _iKt, double* _pdblWt, double* _pdblCk,
@@ -98,7 +99,6 @@ int dfftmx ( double* _pdblA , double* _pdblB , int _iNtot, int _iN, int _iNspan,
{
int retVal = 0 ;
- int iii = 0 ;
a = _pdblA ;
b = _pdblB ;
@@ -119,7 +119,7 @@ int dfftmx ( double* _pdblA , double* _pdblB , int _iNtot, int _iN, int _iNspan,
nt = inc*ntot ;
ks = inc*nspan;
rad = atan ( 1 );
- printf ( "rad %f\n" , rad ) ;
+
c72 = cos (rad/0.6250);
s72 = sin (rad/0.6250);
s120= sqrt(0.750);
@@ -127,15 +127,15 @@ int dfftmx ( double* _pdblA , double* _pdblB , int _iNtot, int _iN, int _iNspan,
- fprintf (stderr , "\n\n" );
- fprintf (stderr , "preliminary\n" );
+
+
preliminaryWork () ;
while ( retVal == 0 )
{
- fprintf (stderr , "factortransform\n" );
+
retVal = factorTransform ( ) ;
}
@@ -144,24 +144,16 @@ int dfftmx ( double* _pdblA , double* _pdblB , int _iNtot, int _iN, int _iNspan,
if ( kt != 0)
{
- fprintf (stderr , "permute stage 1\n" );
permute_stage1 ( ) ;
}
if ( 2*kt + 1 < m )
{
- fprintf (stderr , "permute stage 2\n" );
+
permute_stage2 ( ) ;
}
-/* lines under are just for my own conveniance */
- for ( iii = 0 ; iii < 3 ; iii++)
- {
-
- fprintf (stderr , "\t\t out %d tot : %f \t %f\n" , iii ,a[iii], b[iii]);
-
- }
_pdblA = a ;
_pdblB = b ;
@@ -175,31 +167,18 @@ Sous-Fonctions
-
+/* this function only set the value of variable */
void preliminaryWork (void)
{
int lim ;
- if ( isn <= 0 )
- {
+
s72 = -s72 ;
s120= -s120;
rad = -rad ;
- }
- else
- {
- ak = 1/n ;
-
- /*scale by 1/n for isn > 0 */
- for ( j = 1 ; j <= nt ; j += inc )
- {
- a[j-1] *= ak ;
- b[j-1] *= ak ;
- printf ("boucle isn\n");
- }
- }
+
kspan = ks ;
nn = nt -inc ;
jc = ks/n ;
@@ -214,7 +193,7 @@ void preliminaryWork (void)
maxf = m -kt ;
maxf = nfac[maxf-1] ;
- fprintf (stderr , "\tm - kt %d , nfac %d kt %d\n" , m - kt , maxf , kt);
+
if ( kt > 0 )
maxf = max ( nfac[kt-1] , maxf );
@@ -223,38 +202,35 @@ void preliminaryWork (void)
}
+
/*40*/
+/* this function is call as many time as the size of the input vector has odd factors */
+
int factorTransform (void)
{
int retVal = 42;
- int jjjj = 0 ;
+
dr = 8 * (double)jc/(double)kspan ;
- printf ( "dr %f = jc %d kspan %d \n" ,dr, jc , kspan );
cd = 2 * sin(0.5*dr*rad)*sin(0.5*dr*rad);
sd = sin(dr*rad) ;
- printf ("debut cd %f sd %f dr %f\n\n" , cd , sd, dr) ;
kk = 1 ;
i++ ;
- for ( jjjj = 0 ; jjjj < 10 ; jjjj ++ )
- {
- printf ( " \t%d a %f b %f \n" ,jjjj, a[jjjj] , b[jjjj] );
- }
- fprintf (stderr , "avant switch i %d ,nfac[i-1] %d\n" , i , nfac[i-1]);
+
switch ( nfac[i-1] )
{
case 2 :
/*transform for factor of 2 (including rotation factor)*/
- fprintf (stderr , "\tpre_fOf2Trans\n" );
+
retVal = pre_fOf2Trans( ) ;
if ( retVal == 0 )
{
- fprintf (stderr , "\tfactorOf2Transform\n" );
+
factorOf2Transform ( ) ;
}
@@ -265,30 +241,26 @@ switch ( nfac[i-1] )
kspnn = kspan ;
kspan = kspan >> 2 ; /*kspan /= 4 */
- fprintf (stderr , "\tfactorOf4Transform\n" );
+
retVal = factorOf4Transform ( ) ;
break ;
case 3 :
- fprintf (stderr , "\tfactorOf3Transform\n" );
+
k = nfac[i-1] ;
kspnn = kspan ;
kspan = kspan / k ;
- fprintf (stderr , "\t\t k %d i %d\n" , k ,i);
+
factorOf3Transform ( ) ;
- for ( jjjj = 0 ; jjjj < 9 ; jjjj ++ )
- {
- printf ( " \t apres transf%d a %f b %f \n" ,jjjj, a[jjjj] , b[jjjj] );
- }
break ;
case 5 :
- fprintf (stderr , "\tfactorOf5Transform\n" );
+
k = nfac[i-1] ;
kspnn = kspan ;
kspan = kspan / k ;
- fprintf (stderr , "\t\t k %d\n" , k);
+
factorOf5Transform ( ) ;
break ;
@@ -297,31 +269,27 @@ switch ( nfac[i-1] )
k = nfac[i-1] ;
kspnn = kspan ;
kspan = kspan / k ;
- fprintf (stderr , "\t\t k %d kspan %d \n" , k , kspan);
- fprintf (stderr , "\t\t nfac[i-1] %d jf %d\n" , nfac[i-1] , jf ) ;
+
+
if ( nfac[i-1] != jf)
{
- fprintf (stderr , "\tpreFOtherTransform \n" );
+
preFOtherTransform ( ) ;
}
- fprintf (stderr , "\tfactorOfOtherTransform \n" );
+
factorOfOtherTransform ( ) ;
break ;
}
- printf ("\n\n");
- for ( jjjj = 0 ; jjjj < 15; jjjj ++ )
- {
- printf ( " \t%d a %f b %f \n" ,jjjj, a[jjjj] , b[jjjj] );
- }
+
if ( retVal == 42 )
{
- fprintf (stderr , "\t\t i %d m %d\n" , i , m );
+
if ( i != m)
{
- fprintf (stderr , "\tmulByRotationFactor \n" );
+
retVal = mulByRotationFactor ( ) ;
}
else
@@ -344,14 +312,12 @@ void permute_stage1 (void)
int retVal = 1 ;
- printf ("\t pre_sqFactor2NormlOrder\n");
pre_sqFactor2NormlOrder ( ) ;
if ( n == ntot )
/*permutation for single-variate transform (optional code)*/
while ( retVal == 1)
{
- printf ("\tsingle_sqFactor2NormlOrder\n");
single_sqFactor2NormlOrder ( ) ;
retVal = post_sqFactor2NormlOrder () ;
}
@@ -359,7 +325,6 @@ void permute_stage1 (void)
/*permutation for multivariate transform*/
while ( retVal == 1)
{
- printf ("\tmulti_sqFactor2NormlOrder\n");
retVal = multi_sqFactor2NormlOrder ( );
}
@@ -371,14 +336,14 @@ void permute_stage2 (void)
kspnn = np[kt] ;
- fprintf (stderr , "\t kspnn %d , kt %d\n" , kspnn , kt);
+
/*permutation for square-free facotrs of n */
- fprintf (stderr , "\tnonSqFactor2NormOrder 2\n" );
+
nonSqFactor2NormOrder ( ) ;
/*determine the permutation cycles of length greater than 1*/
- fprintf (stderr , "\tdetPermutCycles 2\n" );
+
detPermutCycles ( );
@@ -388,14 +353,12 @@ void permute_stage2 (void)
i = nt - inc + 1 ;
while ( nt >= 0 )
{
- printf ( "\t\t j %d , k3 %d\n" , j , k3 ) ;
- fprintf (stderr , "\treordermatrix \n" );
reorderMatrix ( ) ;
+
j = k3 + 1 ;
nt -= kspnn ;
i = nt - inc + 1 ;
- printf ( "\t\t570 nt %d k3 %d j %d\n" , nt, k3 , j) ;
}
@@ -418,7 +381,7 @@ int pre_fOf2Trans (void)
/*50*/
do
{
- fprintf (stderr , "\t 50 \n");
+
k2 = kk + kspan ;
ak = a[k2-1] ;
bk = b[k2-1] ;
@@ -439,9 +402,6 @@ int pre_fOf2Trans (void)
}while (ktemp <= nn ||( kk <= jc && ktemp <= nn));
- printf ("\t kk %d > kspan %d ?\n" , kk, kspan );
-
-
if ( kk > kspan )
return 1 ; /*goto350*/
@@ -459,7 +419,6 @@ int pre_fOf2Trans (void)
int factorOf2Transform (void)
{
int ktemp = 0 ;
-printf ( "\t\t fact\n" ) ;
@@ -475,7 +434,7 @@ do /*60*/
do
{
k2 = kk + kspan;
- printf ("\t\t 80 k2 %d kk %d\n" , k2 , kk);
+
ak = a[kk-1] - a[k2-1];
bk = b[kk-1] - b[k2-1];
@@ -484,7 +443,7 @@ do /*60*/
a[k2-1] = c1*ak - s1*bk;
b[k2-1] = s1*ak + c1*bk;
- printf ("\t\t k2 %d c1 %f s1 %f ak %f bk %f\n" , k2 , c1,s1,ak,bk);
+
kk = k2 + kspan;
ktemp = kk ;
@@ -493,7 +452,7 @@ do /*60*/
k2 = kk - nt;
c1 = -c1;
kk = k1 - k2;
- printf ("\t\t k2 %d kk %d nt %d\n" , k2 , kk , nt);
+
}
}while ( ktemp < nt || (kk > k2 && ( ktemp >= nt)) );
@@ -502,7 +461,6 @@ do /*60*/
if ( kk <= mm ) /* 70 */
{
- printf ( "\t 70 \n") ;
ak = c1 - ( cd*c1+sd*s1) ;
s1 += (sd*c1-cd*s1) ;
/*c the following three statements compensate for truncation
@@ -516,14 +474,14 @@ do /*60*/
{
if ( kk < k2 ) /*90*/
{
- printf ( "\t 90 \n") ;
+
s1 = dr*rad*((double)(kk-1)/(double)jc);
c1 = cos(s1) ;
s1 = sin(s1) ;
mm = min(k1/2,mm+klim);
}
}
- printf ( "\tplop\n") ;
+
}while ( kk <= mm || ( kk > mm && kk < k2 ));
k1 += (inc+inc) ;
@@ -531,7 +489,7 @@ do /*60*/
} while ( kk <= jc*2 );
- printf ("goto40 1\n" ) ;
+
return 0 ; /*goto40*/
}
@@ -697,7 +655,7 @@ void factorOf3Transform (void)
int ktemp = 0 ;
do
{
- fprintf (stderr , "\t\t une boucle dans factor of 3\n");
+
k1 = kk + kspan ;
k2 = k1 + kspan ;
@@ -724,11 +682,11 @@ do
kk = k2 + kspan ;
ktemp = kk ;
- fprintf (stderr , "\t\t kk %d , nn %d , kspan %d\n" , kk , nn , kspan );
+
if ( kk >= nn )
kk -= nn ;
- fprintf (stderr , "\t\t 2kk %d , nn %d , kspan %d\n" , kk , nn , kspan );
+
}while ( ktemp < nn || (kk <= kspan && ( ktemp >= nn)) );
}
@@ -739,7 +697,7 @@ void factorOf5Transform (void)
c2 = c72*c72 - s72 *s72 ;
s2 = 2 * c72*s72;
- fprintf (stderr , "plop\n" ) ;
+
do
{
k1 = kk + kspan ;
@@ -747,7 +705,7 @@ void factorOf5Transform (void)
k3 = k2 + kspan ;
k4 = k3 + kspan ;
- fprintf (stderr , "kk %d \t k1 %d \t k2 %d \t k3 %d \t k4 %d\n", kk , k1 , k2 ,k3,k4 );
+
akp = a[k1-1] + a[k4-1] ;
akm = a[k1-1] - a[k4-1] ;
@@ -782,7 +740,7 @@ void factorOf5Transform (void)
bk = bkp*c2 + bjp*c72 + bb ;
aj = akm*s2 - ajm*s72 ;
- fprintf (stderr , "aj %f \takm %f \tajm %f\n" , aj , akm , ajm );
+
bj = bkm*s2 - bjm*s72 ;
a[k2-1] = ak - bj ;
@@ -792,15 +750,15 @@ void factorOf5Transform (void)
kk = k4 + kspan;
ktemp = kk ;
- fprintf (stderr , "ak %f \tbk %f\naj %f \tbj %f\n" , ak , bk , aj ,bj );
- fprintf (stderr , "kk %d \t nn %d \t kspan %d\n", kk , nn , kspan );
+
+
if ( kk >= nn )
kk -= nn ;
- fprintf (stderr , "kk %d \t nn %d \t kspan %d\n", kk , nn , kspan );
+
}while (ktemp < nn || ( kk <= kspan && ktemp >= nn));
-fprintf (stderr , "fin 5\n" );
+
}
@@ -828,7 +786,7 @@ void preFOtherTransform (void)
sk[k-1] = - sk[j-1] ;
j++ ;
- fprintf (stderr , "je boucle\n" );
+
}while ( j < k );
}
@@ -860,7 +818,6 @@ do
bt[j-1] = b[k1-1] + b[k2-1] ;
bk = bt[j-1] + bk ;
- printf ("\t 260 ak %f bk %f\n" , ak , bk ) ;
j++ ;
wt[j-1] = a[k1-1] - a[k2-1] ;
@@ -892,12 +849,10 @@ do
k++ ;
ak += ( wt[k-1] * ck[jj-1] ) ;
bk += ( bt[k-1] * ck[jj-1] ) ;
- printf ("\t 280 ak %f bk %f\n" , ak , bk ) ;
k++ ;
aj += (wt[k-1] * sk[jj-1]) ;
bj += (bt[k-1] * sk[jj-1]) ;
- printf ("\t aj %f bj %f\n" , aj , bj ) ;
jj += j ;
if ( jj > jf )
@@ -911,7 +866,7 @@ do
b[k2-1] = bk - aj ;
j++ ;
- fprintf (stderr , "je boucle3\n" );
+
}while ( j < k ) ;
@@ -920,12 +875,12 @@ do
kk += kspnn ;
ktemp = kk ;
- fprintf (stderr , "kk %d \t nn %d \t kspan %d\n", kk , nn , kspan );
+
if ( kk > nn )
{
kk -= nn;
}
- fprintf (stderr , "kk %d \t nn %d \t kspan %d\n", kk , nn , kspan );
+
}while ( ktemp <= nn || (kk <= kspan && ( ktemp > nn)) );
}
@@ -945,20 +900,20 @@ int mulByRotationFactor (void )
{
c2 = 1 - cd ;
s1 = sd ;
- printf ( "\t 300 c2 %f s1 %f \n" , c2 , s1 );
+
mm = min ( kspan , klim ) ;
/*320 */
do
{
- printf ( "\t 320 \n" ) ;
+
c1 = c2 ;
s2 = s1 ;
kk += kspan ;
- printf ( "\t 320 c2 %f s1 %f \n" , c2 , s1 );
+
do
{
- printf ( "\t 330 kk %d s2 %f c2 %f\n" , kk , s2 , c2 ) ;
+
ak = a[kk-1] ;
a[kk-1] = c2*ak - s2*b[kk-1] ;
b[kk-1] = s2*ak + c2*b[kk-1] ;
@@ -966,26 +921,26 @@ int mulByRotationFactor (void )
kk += kspnn ;
ktemp = kk ;
- printf ("\t\t kk %d nt %d \n" , kk , nt );
+
if ( kk > nt )
{
ak = s1*s2 ;
s2 = s1*c2 + s2*c1 ;
c2 = c1*c2 - ak ;
kk += (kspan - nt ) ;
- printf ( "\t\t plop c2 %f s2 %f \n" , c2 , s2 );
- printf ("\t\t kk %d kspnn %d \n" , kk , kspnn );
+
+
}
}while (ktemp <= nt || ( kk <= kspnn && ktemp > nt )) ;
kk += ( jc - kspnn );
- printf ( "\t avant goto310/340 , kk %d , mm %d , kspan %d \n" , kk , mm , kspan ) ;
+
if ( kk <= mm )
{
- printf ( "\t 310 \n" ) ;
+
/* 310*/
c2 = c1 - ( cd*c1 + sd*s1 ) ;
s1 += (sd*c1 - cd*s1 ) ;
@@ -1004,7 +959,7 @@ int mulByRotationFactor (void )
{
if ( kk <= kspan )
{
- printf ( "\t 340 \n" ) ;
+
s1 = dr*rad * (kk-1)/jc ;
c2 = cos (s1) ;
s1 = sin (s1) ;
@@ -1016,10 +971,10 @@ int mulByRotationFactor (void )
kk += (jc + inc -kspan );
- printf ( "je boucle 2 \n" ) ;
+
}while ( kk <= jc+jc);
- printf ("\tje prends le goto40\n" ) ;
+
return 0 ; /* goto40 */
}
@@ -1060,7 +1015,7 @@ void pre_sqFactor2NormlOrder (void)
int post_sqFactor2NormlOrder (void)
{
- printf ("\tpost_sqFactor2NormlOrder\n");
+
do
{
do
@@ -1068,7 +1023,7 @@ int post_sqFactor2NormlOrder (void)
k2 -= np[j-1] ;
j++ ;
k2 += np[j] ;
- printf ("\t\t380-k2 %d np[%d] = %d\n" , k2 , j-1 , np[j-1]);
+
} while ( k2 > np[j-1]);
j = 1 ;
@@ -1079,7 +1034,7 @@ int post_sqFactor2NormlOrder (void)
if ( kk < k2 )
{
- printf ( "\t\t return 1\n");
+
return 1 ;
}
else
@@ -1092,7 +1047,7 @@ int post_sqFactor2NormlOrder (void)
}while ( kk < ks ) ;
jc = k3 ;
- printf ( "\t\t return 0\n");
+
return 0;
}
@@ -1104,7 +1059,7 @@ void single_sqFactor2NormlOrder (void)
do
{
- printf ("\t\t 370 - kk %d ks %d k2 %d\n", kk , ks , k2 ) ;
+
ak = a[kk-1] ;
a[kk-1] = a[k2-1] ;
a[k2-1] = ak ;
@@ -1178,7 +1133,7 @@ void nonSqFactor2NormOrder (void)
do
{
nfac[j-1] *= nfac[j] ;
- fprintf (stderr , "\t\t m %d j %d , nfac[j-1] %d\n", m , j , nfac[j-1] );
+
j-- ;
@@ -1186,7 +1141,7 @@ void nonSqFactor2NormOrder (void)
kt ++ ;
nn = nfac[kt-1] - 1;
- fprintf (stderr , "\t\t nn %d \n" , nn ) ;
+
jj = 0 ;
j = 0;
@@ -1196,11 +1151,11 @@ void nonSqFactor2NormOrder (void)
k = kt + 1 ;
kk = nfac[k-1] ;
j ++ ;
- fprintf (stderr , "\t\tj %d\n" , j ) ;
+
while ( j <= nn )
{
jj += kk ;
- fprintf (stderr , "\t\t 1jj %d , kk %d\n" , jj , kk ) ;
+
while ( jj >= k2 )
{
@@ -1210,7 +1165,7 @@ void nonSqFactor2NormOrder (void)
kk = nfac[k-1] ;
jj += kk ;
- fprintf (stderr , "\t\t jj %d , kk %d\n" , jj , kk ) ;
+
}
@@ -1219,7 +1174,7 @@ void nonSqFactor2NormOrder (void)
k = kt + 1 ;
kk = nfac[k-1] ;
j ++ ;
- fprintf (stderr , "\t\t1j %d\n" , j ) ;
+
}
j = 0 ;
@@ -1236,16 +1191,16 @@ void detPermutCycles (void)
do
{
j++ ;
- fprintf (stderr , "\t\t500 j %d \tnp[j-1] %d\n" , j , np[j-1]);
+
kk = np[j-1] ;
}while ( kk < 0 ) ;
- fprintf (stderr , "\t\t kk %d\t j %d\t\n" , kk , j );
+
if ( kk != j )
{
do
{
- fprintf (stderr , "\t\t 490 kk %d\n" , kk );
+
k = kk ;
kk = np[k-1] ;
np[k-1] = -kk ;
@@ -1268,7 +1223,7 @@ do
do
{
j-- ;
- printf ( "\t\t\t j %d , %d \n" , j , np[j-1]);
+
}while (np[j-1] < 0 ) ;
jj = jc ;
@@ -1302,7 +1257,7 @@ do
k2 = k1 - jc * (k + np[k-1]);
k = -np[k-1];
- fprintf (stderr , "\t\ttend ploplpop 3\n" );
+
do
{
a[k1-1] = a[k2-1] ;
@@ -1314,7 +1269,7 @@ do
}while ( k1 != kk ) ;
kk = k2 ;
- printf ( "\t\t k %d j %d\n" , k , j ) ;
+
}while ( k != j );
k1 = kk +kspan ;
@@ -1327,7 +1282,7 @@ do
a[k1-1] = wt[k2-1] ;
b[k1-1] = bt[k2-1] ;
k1 -= inc ;
- fprintf (stderr , "\t\t560 k1 %d kk %d\n" , k1 , kk );
+
}while ( k1 != kk ) ;
diff --git a/src/signalProcessing/fft/fft842.c b/src/signalProcessing/fft/fft842.c
index 12aa8002..cb5d97bb 100644
--- a/src/signalProcessing/fft/fft842.c
+++ b/src/signalProcessing/fft/fft842.c
@@ -26,11 +26,8 @@ static int fastlog2( int n)
return(log);
}
-/*
- int in; FORWARD or INVERSE
- int n; length of vector
- DPCOMPLEX *b; input vector
-*/
+
+
void fft842 (doubleComplex* b, int size , int in)
{
double fn;
@@ -48,31 +45,18 @@ void fft842 (doubleComplex* b, int size , int in)
if(in==FORWARD)
/* take conjugate */
- for(i=0;i< size ;i++) {
- b[i] = DoubleComplex ( zreals( b[i]) , - zimags (b[i]));
-
- /* b[i].im *= -1.0;*/
- }
+ for(i=0;i< size ;i++)
+ {
+ b[i] = DoubleComplex ( zreals( b[i]) , - zimags (b[i]));
+ }
- if(in==INVERSE)
- /*scramble inputs*/
- for(i=0,j=size/2;j<size;i++,j++)
- {
- temp = DoubleComplex ( zreals ( b[j] ) , zimags( b[j] ));
- b[j] = DoubleComplex ( zreals ( b[i] ) , zimags( b[i] ));
- b[i] = DoubleComplex ( zreals ( temp ) , zimags( temp ));
- /*
- r = b[j].re; fi = b[j].im;
- b[j].re = b[i].re; b[j].im = b[i].im;
- b[i].re = r; b[i].im = fi;
- */
- }
n8pow = n2pow/3;
if(n8pow)
{
+ /* if the size if a factor of a power of 8 we call r8tx */
/* radix 8 iterations */
for(ipass=1;ipass<=n8pow;ipass++)
{
@@ -90,15 +74,15 @@ void fft842 (doubleComplex* b, int size , int in)
}
}
+/* if the size can be written this way 2^(3*n + 1) , then we call the radix 2 function
+ if can be written this way 2^(3*n + 1) the we call the radix 4 function */
+
if(n2pow%3 == 1)
{
/* radix 2 iteration needed */
r2tx(nthpo,b,b+1);
-
-
}
-
if(n2pow%3 == 2)
{
/* radix 4 iteration needed */
@@ -113,12 +97,14 @@ void fft842 (doubleComplex* b, int size , int in)
L[j] = 1;
if(j-n2pow <= 0) L[j] = 0x1 << (n2pow + 1 - j);
}
+ /* this part can maybe be improved */
+
L15=L[1];L14=L[2];L13=L[3];L12=L[4];L11=L[5];L10=L[6];L9=L[7];
L8=L[8];L7=L[9];L6=L[10];L5=L[11];L4=L[12];L3=L[13];L2=L[14];L1=L[15];
ij = 1;
-
+/* all the following instruction is to unscramble the output */
for(j1=1;j1<=L1;j1++)
for(j2=j1;j2<=L2;j2+=L1)
for(j3=j2;j3<=L3;j3+=L2)
@@ -172,14 +158,6 @@ void fft842 (doubleComplex* b, int size , int in)
}
- if(in==INVERSE) /* scale outputs */
- for(i=0;i<nthpo;i++)
- {
-
- b[i] = DoubleComplex ( zreals ( b[i] )*fn , zimags( b[i] )*fn);
-
- }
-
for ( i = 0 ; i < size /2 ; i++)