summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/signalProcessing/fft/dfftmx.c26
-rw-r--r--src/signalProcessing/fft/testDoubleFft.c67
2 files changed, 81 insertions, 12 deletions
diff --git a/src/signalProcessing/fft/dfftmx.c b/src/signalProcessing/fft/dfftmx.c
index 533f6a6d..cbc724b7 100644
--- a/src/signalProcessing/fft/dfftmx.c
+++ b/src/signalProcessing/fft/dfftmx.c
@@ -680,7 +680,9 @@ do
void factorOf5Transform (void)
{
-
+ c2 = c72*c72 - s72 *s72 ;
+ s2 = 2 * c72*s72;
+ printf ( "plop\n" ) ;
do
{
k1 = kk + kspan ;
@@ -688,6 +690,8 @@ void factorOf5Transform (void)
k3 = k2 + kspan ;
k4 = k3 + kspan ;
+ printf ( "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] ;
@@ -695,10 +699,10 @@ void factorOf5Transform (void)
bkm = b[k1-1] - b[k4-1] ;
ajp = a[k2-1] + a[k3-1] ;
- ajm = a[k3-1] - a[k3-1] ;
+ ajm = a[k2-1] - a[k3-1] ;
- bjp = a[k2-1] + b[k3-1] ;
- ajm = a[k2-1] - b[k3-1] ;
+ bjp = b[k2-1] + b[k3-1] ;
+ bjm = b[k2-1] - b[k3-1] ;
aa = a[kk-1] ;
bb = b[kk-1] ;
@@ -715,12 +719,13 @@ void factorOf5Transform (void)
a[k1-1] = ak - bj ;
a[k4-1] = ak + bj ;
b[k1-1] = bk + aj ;
- b[k4-1] = bk - bj ;
+ b[k4-1] = bk - aj ;
ak = akp*c2 + ajp*c72 + aa ;
bk = bkp*c2 + bjp*c72 + bb ;
aj = akm*s2 - ajm*s72 ;
+ printf ("aj %f \takm %f \tajm %f\n" , aj , akm , ajm );
bj = bkm*s2 - bjm*s72 ;
a[k2-1] = ak - bj ;
@@ -728,13 +733,16 @@ void factorOf5Transform (void)
b[k2-1] = bk + aj ;
b[k3-1] = bk - aj ;
+ kk = k4 + kspan;
+ printf ( "ak %f \tbk %f\naj %f \tbj %f\n" , ak , bk , aj ,bj );
+ printf ( "kk %d \t nn %d \t kspan %d\n", kk , nn , kspan );
if ( kk >= nn )
- {
- kk -= nn ;
- }
- }while ( kk <= kspan ) ;
+ kk -= nn ;
+ printf ( "kk %d \t nn %d \t kspan %d\n", kk , nn , kspan );
+ }while ( kk <= kspan && kk < nn);
+printf ( "fin 5\n" );
}
diff --git a/src/signalProcessing/fft/testDoubleFft.c b/src/signalProcessing/fft/testDoubleFft.c
index 840ecdfe..764eebe0 100644
--- a/src/signalProcessing/fft/testDoubleFft.c
+++ b/src/signalProcessing/fft/testDoubleFft.c
@@ -19,6 +19,7 @@
#define COLS2 2
#define COLS3 3
#define COLS4 4
+#define COLS5 5
#define COLS8 8
#define COLS16 16
#define COLS32 32
@@ -38,6 +39,9 @@
#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,\
@@ -81,7 +85,10 @@
#define ZREAL_RESULT4 { 2.48206677380949259, 0.43537130765616894, 0.97385666053742170, -0.49231379851698875}
#define ZIMAG_RESULT4 { 2.14807060454040766,- 0.78285905346274376, 0.42632796149700880, 0.45185491256415844}
-
+#define ZREAL_RESULT5 { 3.13458026852458715, 0.8989689127154592 ,-0.38601946016350575, 0.50520993574533923,\
+ 0.09598652253573875}
+#define ZIMAG_RESULT5 { 2.71449548611417413,-0.31527367037930898, 0.60322341639929178,-0.89813890885693670,\
+ 0.69993670814631914}
#define ZREAL_RESULT8 { 4.00049206055700779,-0.43357241280891956, 0.79836636409163475,-0.91119240848798977,\
-0.06753427721560001,-0.18576209864995416, 0.97926024347543716, 0.17400105922003017}
#define ZIMAG_RESULT8 { 3.15585898794233799, 0.62132445165622818, 0.35205427557229996, 0.28289917172258683,\
@@ -219,6 +226,57 @@ static void zfftmaTest3 (void )
}
+static void zfftmaTest5 (void )
+{
+ int i = 0 ;
+
+ double tRealIn [] = ZREAL_IN5;
+ double tImagIn [] = ZIMAG_IN5 ;
+
+
+
+ double tRealResult [] = ZREAL_RESULT5;
+ double tImagResult [] = ZIMAG_RESULT5 ;
+
+
+
+ doubleComplex* out = (doubleComplex*) malloc ( sizeof(doubleComplex) * (unsigned int) (ROW*COLS5));
+ doubleComplex* in = DoubleComplexMatrix ( tRealIn , tImagIn , ROW*COLS5 );
+ doubleComplex* Result = DoubleComplexMatrix ( tRealResult , tImagResult ,ROW*COLS5) ;
+
+
+
+ zfftma ( in , ROW , COLS5 , 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*COLS5 ) ; 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 )
{
@@ -427,14 +485,17 @@ static int testFft(void) {
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 5 Double Complex Tests\n");
+ zfftmaTest5();
+/*
printf("\t>>>> Vector 8 Double Complex Tests\n");
zfftmaTest8();
printf("\t>>>> Vector 16 Double Complex Tests\n");