diff options
-rw-r--r-- | src/signalProcessing/fft/Makefile.am | 8 | ||||
-rw-r--r-- | src/signalProcessing/fft/Makefile.in | 28 | ||||
-rw-r--r-- | src/signalProcessing/fft/dfftma.c | 31 | ||||
-rw-r--r-- | src/signalProcessing/fft/sfftma.c | 31 | ||||
-rw-r--r-- | src/signalProcessing/fft/testMatFft.c | 103 | ||||
-rw-r--r-- | src/signalProcessing/ifft/Makefile.am | 11 | ||||
-rw-r--r-- | src/signalProcessing/ifft/Makefile.in | 31 | ||||
-rw-r--r-- | src/signalProcessing/ifft/difftma.c | 31 | ||||
-rw-r--r-- | src/signalProcessing/ifft/sifftma.c | 31 | ||||
-rw-r--r-- | src/signalProcessing/ifft/testMatIfft.c | 152 | ||||
-rw-r--r-- | src/signalProcessing/includes/fft.h | 5 | ||||
-rw-r--r-- | src/signalProcessing/includes/hilbert.h | 7 | ||||
-rw-r--r-- | src/signalProcessing/includes/ifft.h | 14 |
13 files changed, 390 insertions, 93 deletions
diff --git a/src/signalProcessing/fft/Makefile.am b/src/signalProcessing/fft/Makefile.am index 46d75349..2c6c184c 100644 --- a/src/signalProcessing/fft/Makefile.am +++ b/src/signalProcessing/fft/Makefile.am @@ -16,6 +16,7 @@ libFft_la_CFLAGS = -I . \ -I $(top_builddir)/type \ -I $(top_builddir)/signalProcessing/includes \ -I $(top_builddir)/operations/includes \ + -I $(top_builddir)/matrixOperations/includes \ -I $(top_builddir)/auxiliaryFunctions/includes instdir = $(top_builddir)/lib @@ -35,8 +36,9 @@ SRC = zfftma.c \ fft842.c \ r2tx.c \ r4tx.c \ - r8tx.c - + r8tx.c \ + dfftma.c \ + sfftma.c #### # Checking Part @@ -45,6 +47,7 @@ SRC = zfftma.c \ check_INCLUDES = -I . \ -I $(top_builddir)/type \ -I $(top_builddir)/signalProcessing/includes \ + -I $(top_builddir)/matrixOperations/includes \ -I $(top_builddir)/operations/includes \ -I $(top_builddir)/auxiliaryFunctions/includes @@ -56,6 +59,7 @@ check_LDADD = $(top_builddir)/type/libDoubleComplex.la \ $(top_builddir)/signalProcessing/fft/libFft.la \ $(top_builddir)/operations/addition/libAddition.la \ $(top_builddir)/operations/subtraction/libSubtraction.la \ + $(top_builddir)/matrixOperations/zeros/libMatrixZeros.la \ @LIBMATH@ check_PROGRAMS = testFloatFft testDoubleFft testMatFft diff --git a/src/signalProcessing/fft/Makefile.in b/src/signalProcessing/fft/Makefile.in index 4be18b9d..4deb6077 100644 --- a/src/signalProcessing/fft/Makefile.in +++ b/src/signalProcessing/fft/Makefile.in @@ -59,7 +59,7 @@ am__objects_1 = am__objects_2 = libFft_la-zfftma.lo libFft_la-cfftma.lo \ libFft_la-dfft2.lo libFft_la-dfftbi.lo libFft_la-dfftmx.lo \ libFft_la-fft842.lo libFft_la-r2tx.lo libFft_la-r4tx.lo \ - libFft_la-r8tx.lo + libFft_la-r8tx.lo libFft_la-dfftma.lo libFft_la-sfftma.lo am_libFft_la_OBJECTS = $(am__objects_1) $(am__objects_2) libFft_la_OBJECTS = $(am_libFft_la_OBJECTS) libFft_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ @@ -73,7 +73,8 @@ am__DEPENDENCIES_1 = $(top_builddir)/type/libDoubleComplex.la \ $(top_builddir)/lib/blas/libsciblas.la \ $(top_builddir)/signalProcessing/fft/libFft.la \ $(top_builddir)/operations/addition/libAddition.la \ - $(top_builddir)/operations/subtraction/libSubtraction.la + $(top_builddir)/operations/subtraction/libSubtraction.la \ + $(top_builddir)/matrixOperations/zeros/libMatrixZeros.la testDoubleFft_DEPENDENCIES = $(am__DEPENDENCIES_1) testDoubleFft_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(testDoubleFft_CFLAGS) \ @@ -223,6 +224,7 @@ libFft_la_CFLAGS = -I . \ -I $(top_builddir)/type \ -I $(top_builddir)/signalProcessing/includes \ -I $(top_builddir)/operations/includes \ + -I $(top_builddir)/matrixOperations/includes \ -I $(top_builddir)/auxiliaryFunctions/includes instdir = $(top_builddir)/lib @@ -239,7 +241,9 @@ SRC = zfftma.c \ fft842.c \ r2tx.c \ r4tx.c \ - r8tx.c + r8tx.c \ + dfftma.c \ + sfftma.c #### @@ -248,6 +252,7 @@ SRC = zfftma.c \ check_INCLUDES = -I . \ -I $(top_builddir)/type \ -I $(top_builddir)/signalProcessing/includes \ + -I $(top_builddir)/matrixOperations/includes \ -I $(top_builddir)/operations/includes \ -I $(top_builddir)/auxiliaryFunctions/includes @@ -258,6 +263,7 @@ check_LDADD = $(top_builddir)/type/libDoubleComplex.la \ $(top_builddir)/signalProcessing/fft/libFft.la \ $(top_builddir)/operations/addition/libAddition.la \ $(top_builddir)/operations/subtraction/libSubtraction.la \ + $(top_builddir)/matrixOperations/zeros/libMatrixZeros.la \ @LIBMATH@ @@ -361,11 +367,13 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libFft_la-cfftma.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libFft_la-dfft2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libFft_la-dfftbi.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libFft_la-dfftma.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libFft_la-dfftmx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libFft_la-fft842.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libFft_la-r2tx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libFft_la-r4tx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libFft_la-r8tx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libFft_la-sfftma.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libFft_la-zfftma.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testDoubleFft-testDoubleFft.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testFloatFft-testFloatFft.Po@am__quote@ @@ -455,6 +463,20 @@ libFft_la-r8tx.lo: r8tx.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libFft_la_CFLAGS) $(CFLAGS) -c -o libFft_la-r8tx.lo `test -f 'r8tx.c' || echo '$(srcdir)/'`r8tx.c +libFft_la-dfftma.lo: dfftma.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libFft_la_CFLAGS) $(CFLAGS) -MT libFft_la-dfftma.lo -MD -MP -MF $(DEPDIR)/libFft_la-dfftma.Tpo -c -o libFft_la-dfftma.lo `test -f 'dfftma.c' || echo '$(srcdir)/'`dfftma.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libFft_la-dfftma.Tpo $(DEPDIR)/libFft_la-dfftma.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dfftma.c' object='libFft_la-dfftma.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libFft_la_CFLAGS) $(CFLAGS) -c -o libFft_la-dfftma.lo `test -f 'dfftma.c' || echo '$(srcdir)/'`dfftma.c + +libFft_la-sfftma.lo: sfftma.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libFft_la_CFLAGS) $(CFLAGS) -MT libFft_la-sfftma.lo -MD -MP -MF $(DEPDIR)/libFft_la-sfftma.Tpo -c -o libFft_la-sfftma.lo `test -f 'sfftma.c' || echo '$(srcdir)/'`sfftma.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libFft_la-sfftma.Tpo $(DEPDIR)/libFft_la-sfftma.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sfftma.c' object='libFft_la-sfftma.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libFft_la_CFLAGS) $(CFLAGS) -c -o libFft_la-sfftma.lo `test -f 'sfftma.c' || echo '$(srcdir)/'`sfftma.c + testDoubleFft-testDoubleFft.o: testDoubleFft.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testDoubleFft_CFLAGS) $(CFLAGS) -MT testDoubleFft-testDoubleFft.o -MD -MP -MF $(DEPDIR)/testDoubleFft-testDoubleFft.Tpo -c -o testDoubleFft-testDoubleFft.o `test -f 'testDoubleFft.c' || echo '$(srcdir)/'`testDoubleFft.c @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/testDoubleFft-testDoubleFft.Tpo $(DEPDIR)/testDoubleFft-testDoubleFft.Po diff --git a/src/signalProcessing/fft/dfftma.c b/src/signalProcessing/fft/dfftma.c new file mode 100644 index 00000000..f855c1b7 --- /dev/null +++ b/src/signalProcessing/fft/dfftma.c @@ -0,0 +1,31 @@ +/* + * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab + * Copyright (C) 2008 - INRIA - Arnaud Torset + * + * This file must be used under the terms of the CeCILL. + * This source file is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at + * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt + * + */ + +#include "fft.h" +#include "zeros.h" + + +void dfftma ( double* in , int rows, int cols, double* out){ + double* ZEROS; + doubleComplex* inCpx; + doubleComplex* outCpx; + + ZEROS = malloc((uint)(rows*cols)*sizeof(double)); + outCpx = malloc((uint)(rows*cols)*sizeof(doubleComplex)); + + dzerosa(ZEROS,rows,cols); + inCpx=DoubleComplexMatrix(in,ZEROS,rows*cols); + + zfftma(inCpx,rows,cols,outCpx); + + zreala(outCpx, rows*cols, out); +} diff --git a/src/signalProcessing/fft/sfftma.c b/src/signalProcessing/fft/sfftma.c new file mode 100644 index 00000000..c60c9427 --- /dev/null +++ b/src/signalProcessing/fft/sfftma.c @@ -0,0 +1,31 @@ +/* + * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab + * Copyright (C) 2008 - INRIA - Arnaud Torset + * + * This file must be used under the terms of the CeCILL. + * This source file is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at + * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt + * + */ + +#include "fft.h" +#include "zeros.h" + + +void sfftma ( float* in , int rows, int cols, float* out){ + float* ZEROS; + floatComplex* inCpx; + floatComplex* outCpx; + + ZEROS = malloc((uint)(rows*cols)*sizeof(float)); + outCpx = malloc((uint)(rows*cols)*sizeof(floatComplex)); + + szerosa(ZEROS,rows,cols); + inCpx=FloatComplexMatrix(in,ZEROS,rows*cols); + + cfftma(inCpx,rows,cols,outCpx); + + creala(outCpx, rows*cols, out); +} diff --git a/src/signalProcessing/fft/testMatFft.c b/src/signalProcessing/fft/testMatFft.c index ee29cf72..de626d81 100644 --- a/src/signalProcessing/fft/testMatFft.c +++ b/src/signalProcessing/fft/testMatFft.c @@ -101,8 +101,74 @@ #define RRESULT9 {45,-4.5,-4.5,-13.5,0,0,-13.5,0,0} #define IRESULT9 {0,2.598076211353316011810,- 2.598076211353316011810,7.7942286340599471472501,0,0,- 7.7942286340599471472501,0,0} - -static int testFft(void){ + +static void dfftmaTest(void){ + int i; + + double in1[]=test1; + double in2[]=test2; + double in3[]=test3; + double in4[]=test4; + double in6[]=test6; + double in9[]=test9; + + double resR1[]=RRESULT1; + double resR2[]=RRESULT2; + double resR3[]=RRESULT3; + double resR4[]=RRESULT4; + double resR6[]=RRESULT6; + double resR9[]=RRESULT9; + + double out1[12], out2[12], out3[12], out4[12], out6[12], out9[9]; + + + printf(" >>> Matrice 1*12 <<< \n"); + dfftma(in1, 1, 12, out1); + for (i=0;i<12;i++){ + if (out1[i]>1e-14) assert( (fabs(out1[i]-resR1[i]) / fabs(out1[i])) < 1e-14 ); + else assert(1); + } + + printf(" >>> Matrice 2*6 <<< \n"); + dfftma(in2, 2, 6, out2); + for (i=0;i<12;i++){ + if (out2[i]>1e-14) assert( (fabs(out2[i]-resR2[i]) / fabs(out2[i])) < 1e-14 ); + else assert(1); + } + + + printf(" >>> Matrice 3*4 <<< \n"); + dfftma(in3, 3, 4, out3); + for (i=0;i<12;i++){ + if (out3[i]>1e-14) assert( (fabs(out3[i]-resR3[i]) / fabs(out3[i])) < 1e-14 ); + else assert(1); + } + + printf(" >>> Matrice 4*3 <<< \n"); + dfftma(in4, 4, 3, out4); + for (i=0;i<12;i++){ + if (out4[i]>1e-14) assert( (fabs(out4[i]-resR4[i]) / fabs(out4[i])) < 1e-14 ); + else assert(1); + } + + printf(" >>> Matrice 6*2 <<< \n"); + dfftma(in6, 6, 2, out6); + for (i=0;i<12;i++){ + if (out6[i]>1e-16) assert( (fabs(out6[i]-resR6[i]) / fabs(out6[i])) < 1e-14 ); + else assert(1); + } + + printf(" >>> Matrice 3*3 <<< \n"); + dfftma(in9, 3, 3, out9); + for (i=0;i<9;i++){ + if (out9[i]>1e-16) assert( (fabs(out9[i]-resR9[i]) / fabs(out9[i])) < 1e-16 ); + else assert(1); + } + + +} + +static void zfftmaTest(void){ int i; double inR1[]=test1; @@ -125,7 +191,7 @@ static int testFft(void){ double resR9[]=RRESULT9; double resI9[]=IRESULT9; - doubleComplex *in1, *in2, *in3, *in4, *in6, *in9, *out1, *out2, *out3, *out4, *out6, *out9; + doubleComplex *in1, *in2, *in3, *in4, *in6, *in9, out1[12], out2[12], out3[12], out4[12], out6[12], out9[12]; in1=malloc((uint)12*sizeof(doubleComplex)); in2=malloc((uint)12*sizeof(doubleComplex)); @@ -133,13 +199,9 @@ static int testFft(void){ in4=malloc((uint)12*sizeof(doubleComplex)); in6=malloc((uint)12*sizeof(doubleComplex)); in9=malloc((uint)9*sizeof(doubleComplex)); - out1=malloc((uint)12*sizeof(doubleComplex)); - out2=malloc((uint)12*sizeof(doubleComplex)); - out3=malloc((uint)12*sizeof(doubleComplex)); - out4=malloc((uint)12*sizeof(doubleComplex)); - out6=malloc((uint)12*sizeof(doubleComplex)); - out9=malloc((uint)9*sizeof(doubleComplex)); - + + + for (i=0;i<12;i++){ in1[i]=DoubleComplex(inR1[i],0); in2[i]=DoubleComplex(inR2[i],0); @@ -212,20 +274,13 @@ static int testFft(void){ if (zimags(out9[i])>1e-15) assert( (fabs(zimags(out9[i])-resI9[i]) / fabs(zimags(out9[i]))) < 1e-15 ); else assert(1); } - - - free(in1); - free(in2); - free(in3); - free(in4); - free(in6); - free(in9); - free(out1); - free(out2); - free(out3); - free(out4); - free(out6); - free(out9); +} + + + +static int testFft(void){ + dfftmaTest(); + zfftmaTest(); return 0; } diff --git a/src/signalProcessing/ifft/Makefile.am b/src/signalProcessing/ifft/Makefile.am index 1ffce071..c68980c1 100644 --- a/src/signalProcessing/ifft/Makefile.am +++ b/src/signalProcessing/ifft/Makefile.am @@ -15,6 +15,7 @@ libIfft_la_CFLAGS = -I . \ -I $(top_builddir)/type \ -I $(top_builddir)/signalProcessing/includes \ + -I $(top_builddir)/matrixOperations/includes \ -I $(top_builddir)/operations/includes \ -I $(top_builddir)/auxiliaryFunctions/includes @@ -28,14 +29,16 @@ HEAD = ../includes/ifft.h \ fft_internal.h SRC = zifftma.c \ - cifftma.c \ - difft2.c \ + cifftma.c \ + difft2.c \ difftbi.c \ difftmx.c \ ifft842.c \ ir2tx.c \ ir4tx.c \ - ir8tx.c + ir8tx.c\ + difftma.c \ + sifftma.c #### @@ -45,6 +48,7 @@ SRC = zifftma.c \ check_INCLUDES = -I . \ -I $(top_builddir)/type \ -I $(top_builddir)/signalProcessing/includes \ + -I $(top_builddir)/matrixOperations/includes \ -I $(top_builddir)/operations/includes \ -I $(top_builddir)/auxiliaryFunctions/includes @@ -54,6 +58,7 @@ check_LDADD = $(top_builddir)/type/libDoubleComplex.la \ $(top_builddir)/lib/lapack/libscilapack.la \ $(top_builddir)/lib/blas/libsciblas.la \ $(top_builddir)/signalProcessing/ifft/libIfft.la \ + $(top_builddir)/matrixOperations/zeros/libMatrixZeros.la \ $(top_builddir)/operations/addition/libAddition.la \ $(top_builddir)/operations/subtraction/libSubtraction.la \ @LIBMATH@ diff --git a/src/signalProcessing/ifft/Makefile.in b/src/signalProcessing/ifft/Makefile.in index 09124b34..2674cbec 100644 --- a/src/signalProcessing/ifft/Makefile.in +++ b/src/signalProcessing/ifft/Makefile.in @@ -59,7 +59,8 @@ am__objects_1 = am__objects_2 = libIfft_la-zifftma.lo libIfft_la-cifftma.lo \ libIfft_la-difft2.lo libIfft_la-difftbi.lo \ libIfft_la-difftmx.lo libIfft_la-ifft842.lo \ - libIfft_la-ir2tx.lo libIfft_la-ir4tx.lo libIfft_la-ir8tx.lo + libIfft_la-ir2tx.lo libIfft_la-ir4tx.lo libIfft_la-ir8tx.lo \ + libIfft_la-difftma.lo libIfft_la-sifftma.lo am_libIfft_la_OBJECTS = $(am__objects_1) $(am__objects_2) libIfft_la_OBJECTS = $(am_libIfft_la_OBJECTS) libIfft_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ @@ -72,6 +73,7 @@ am__DEPENDENCIES_1 = $(top_builddir)/type/libDoubleComplex.la \ $(top_builddir)/lib/lapack/libscilapack.la \ $(top_builddir)/lib/blas/libsciblas.la \ $(top_builddir)/signalProcessing/ifft/libIfft.la \ + $(top_builddir)/matrixOperations/zeros/libMatrixZeros.la \ $(top_builddir)/operations/addition/libAddition.la \ $(top_builddir)/operations/subtraction/libSubtraction.la testDoubleIfft_DEPENDENCIES = $(am__DEPENDENCIES_1) @@ -222,6 +224,7 @@ top_srcdir = @top_srcdir@ libIfft_la_CFLAGS = -I . \ -I $(top_builddir)/type \ -I $(top_builddir)/signalProcessing/includes \ + -I $(top_builddir)/matrixOperations/includes \ -I $(top_builddir)/operations/includes \ -I $(top_builddir)/auxiliaryFunctions/includes @@ -232,14 +235,16 @@ HEAD = ../includes/ifft.h \ fft_internal.h SRC = zifftma.c \ - cifftma.c \ - difft2.c \ + cifftma.c \ + difft2.c \ difftbi.c \ difftmx.c \ ifft842.c \ ir2tx.c \ ir4tx.c \ - ir8tx.c + ir8tx.c\ + difftma.c \ + sifftma.c #### @@ -248,6 +253,7 @@ SRC = zifftma.c \ check_INCLUDES = -I . \ -I $(top_builddir)/type \ -I $(top_builddir)/signalProcessing/includes \ + -I $(top_builddir)/matrixOperations/includes \ -I $(top_builddir)/operations/includes \ -I $(top_builddir)/auxiliaryFunctions/includes @@ -256,6 +262,7 @@ check_LDADD = $(top_builddir)/type/libDoubleComplex.la \ $(top_builddir)/lib/lapack/libscilapack.la \ $(top_builddir)/lib/blas/libsciblas.la \ $(top_builddir)/signalProcessing/ifft/libIfft.la \ + $(top_builddir)/matrixOperations/zeros/libMatrixZeros.la \ $(top_builddir)/operations/addition/libAddition.la \ $(top_builddir)/operations/subtraction/libSubtraction.la \ @LIBMATH@ @@ -361,11 +368,13 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libIfft_la-cifftma.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libIfft_la-difft2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libIfft_la-difftbi.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libIfft_la-difftma.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libIfft_la-difftmx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libIfft_la-ifft842.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libIfft_la-ir2tx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libIfft_la-ir4tx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libIfft_la-ir8tx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libIfft_la-sifftma.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libIfft_la-zifftma.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testDoubleIfft-testDoubleIfft.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testFloatIfft-testFloatIfft.Po@am__quote@ @@ -455,6 +464,20 @@ libIfft_la-ir8tx.lo: ir8tx.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libIfft_la_CFLAGS) $(CFLAGS) -c -o libIfft_la-ir8tx.lo `test -f 'ir8tx.c' || echo '$(srcdir)/'`ir8tx.c +libIfft_la-difftma.lo: difftma.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libIfft_la_CFLAGS) $(CFLAGS) -MT libIfft_la-difftma.lo -MD -MP -MF $(DEPDIR)/libIfft_la-difftma.Tpo -c -o libIfft_la-difftma.lo `test -f 'difftma.c' || echo '$(srcdir)/'`difftma.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libIfft_la-difftma.Tpo $(DEPDIR)/libIfft_la-difftma.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='difftma.c' object='libIfft_la-difftma.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libIfft_la_CFLAGS) $(CFLAGS) -c -o libIfft_la-difftma.lo `test -f 'difftma.c' || echo '$(srcdir)/'`difftma.c + +libIfft_la-sifftma.lo: sifftma.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libIfft_la_CFLAGS) $(CFLAGS) -MT libIfft_la-sifftma.lo -MD -MP -MF $(DEPDIR)/libIfft_la-sifftma.Tpo -c -o libIfft_la-sifftma.lo `test -f 'sifftma.c' || echo '$(srcdir)/'`sifftma.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libIfft_la-sifftma.Tpo $(DEPDIR)/libIfft_la-sifftma.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sifftma.c' object='libIfft_la-sifftma.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libIfft_la_CFLAGS) $(CFLAGS) -c -o libIfft_la-sifftma.lo `test -f 'sifftma.c' || echo '$(srcdir)/'`sifftma.c + testDoubleIfft-testDoubleIfft.o: testDoubleIfft.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testDoubleIfft_CFLAGS) $(CFLAGS) -MT testDoubleIfft-testDoubleIfft.o -MD -MP -MF $(DEPDIR)/testDoubleIfft-testDoubleIfft.Tpo -c -o testDoubleIfft-testDoubleIfft.o `test -f 'testDoubleIfft.c' || echo '$(srcdir)/'`testDoubleIfft.c @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/testDoubleIfft-testDoubleIfft.Tpo $(DEPDIR)/testDoubleIfft-testDoubleIfft.Po diff --git a/src/signalProcessing/ifft/difftma.c b/src/signalProcessing/ifft/difftma.c new file mode 100644 index 00000000..d878b33a --- /dev/null +++ b/src/signalProcessing/ifft/difftma.c @@ -0,0 +1,31 @@ +/* + * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab + * Copyright (C) 2008 - INRIA - Arnaud Torset + * + * This file must be used under the terms of the CeCILL. + * This source file is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at + * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt + * + */ + +#include "ifft.h" +#include "zeros.h" + + +void difftma ( double* in , int rows, int cols, double* out){ + double* ZEROS; + doubleComplex* inCpx; + doubleComplex* outCpx; + + ZEROS = malloc((uint)(rows*cols)*sizeof(double)); + outCpx = malloc((uint)(rows*cols)*sizeof(doubleComplex)); + + dzerosa(ZEROS,rows,cols); + inCpx=DoubleComplexMatrix(in,ZEROS,rows*cols); + + zifftma(inCpx,rows,cols,outCpx); + + zreala(outCpx, rows*cols, out); +} diff --git a/src/signalProcessing/ifft/sifftma.c b/src/signalProcessing/ifft/sifftma.c new file mode 100644 index 00000000..8e1e118c --- /dev/null +++ b/src/signalProcessing/ifft/sifftma.c @@ -0,0 +1,31 @@ +/* + * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab + * Copyright (C) 2008 - INRIA - Arnaud Torset + * + * This file must be used under the terms of the CeCILL. + * This source file is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at + * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt + * + */ + +#include "ifft.h" +#include "zeros.h" + + +void sifftma ( float* in , int rows, int cols, float* out){ + float* ZEROS; + floatComplex* inCpx; + floatComplex* outCpx; + + ZEROS = malloc((uint)(rows*cols)*sizeof(float)); + outCpx = malloc((uint)(rows*cols)*sizeof(floatComplex)); + + szerosa(ZEROS,rows,cols); + inCpx=FloatComplexMatrix(in,ZEROS,rows*cols); + + cifftma(inCpx,rows,cols,outCpx); + + creala(outCpx, rows*cols, out); +} diff --git a/src/signalProcessing/ifft/testMatIfft.c b/src/signalProcessing/ifft/testMatIfft.c index 60e74607..88de15e5 100644 --- a/src/signalProcessing/ifft/testMatIfft.c +++ b/src/signalProcessing/ifft/testMatIfft.c @@ -107,7 +107,73 @@ + 0.8660254037844383745437,- 0.0000000000000000138778,+ 0.0000000000000000138778} -static int testIfft(void){ +static void difftmaTest(void){ + int i; + + double in1[]=test1; + double in2[]=test2; + double in3[]=test3; + double in4[]=test4; + double in6[]=test6; + double in9[]=test9; + + double resR1[]=RRESULT1; + double resR2[]=RRESULT2; + double resR3[]=RRESULT3; + double resR4[]=RRESULT4; + double resR6[]=RRESULT6; + double resR9[]=RRESULT9; + + double out1[12], out2[12], out3[12], out4[12], out6[12], out9[9]; + + + printf(" >>> Matrice 1*12 <<< \n"); + difftma(in1, 1, 12, out1); + for (i=0;i<12;i++){ + if (out1[i]>1e-14) assert( (fabs(out1[i]-resR1[i]) / fabs(out1[i])) < 1e-14 ); + else assert(1); + } + + printf(" >>> Matrice 2*6 <<< \n"); + difftma(in2, 2, 6, out2); + for (i=0;i<12;i++){ + if (out2[i]>1e-14) assert( (fabs(out2[i]-resR2[i]) / fabs(out2[i])) < 1e-14 ); + else assert(1); + } + + + printf(" >>> Matrice 3*4 <<< \n"); + difftma(in3, 3, 4, out3); + for (i=0;i<12;i++){ + if (out3[i]>1e-14) assert( (fabs(out3[i]-resR3[i]) / fabs(out3[i])) < 1e-14 ); + else assert(1); + } + + printf(" >>> Matrice 4*3 <<< \n"); + difftma(in4, 4, 3, out4); + for (i=0;i<12;i++){ + if (out4[i]>1e-14) assert( (fabs(out4[i]-resR4[i]) / fabs(out4[i])) < 1e-14 ); + else assert(1); + } + + printf(" >>> Matrice 6*2 <<< \n"); + difftma(in6, 6, 2, out6); + for (i=0;i<12;i++){ + if (out6[i]>1e-16) assert( (fabs(out6[i]-resR6[i]) / fabs(out6[i])) < 1e-14 ); + else assert(1); + } + + printf(" >>> Matrice 3*3 <<< \n"); + difftma(in9, 3, 3, out9); + for (i=0;i<9;i++){ + if (out9[i]>1e-16) assert( (fabs(out9[i]-resR9[i]) / fabs(out9[i])) < 1e-16 ); + else assert(1); + } + + +} + +static void zifftmaTest(void){ int i; double inR1[]=test1; @@ -130,7 +196,7 @@ static int testIfft(void){ double resR9[]=RRESULT9; double resI9[]=IRESULT9; - doubleComplex *in1, *in2, *in3, *in4, *in6, *in9, *out1, *out2, *out3, *out4, *out6, *out9; + doubleComplex *in1, *in2, *in3, *in4, *in6, *in9, out1[12], out2[12], out3[12], out4[12], out6[12], out9[12]; in1=malloc((uint)12*sizeof(doubleComplex)); in2=malloc((uint)12*sizeof(doubleComplex)); @@ -138,13 +204,9 @@ static int testIfft(void){ in4=malloc((uint)12*sizeof(doubleComplex)); in6=malloc((uint)12*sizeof(doubleComplex)); in9=malloc((uint)9*sizeof(doubleComplex)); - out1=malloc((uint)12*sizeof(doubleComplex)); - out2=malloc((uint)12*sizeof(doubleComplex)); - out3=malloc((uint)12*sizeof(doubleComplex)); - out4=malloc((uint)12*sizeof(doubleComplex)); - out6=malloc((uint)12*sizeof(doubleComplex)); - out9=malloc((uint)9*sizeof(doubleComplex)); - + + + for (i=0;i<12;i++){ in1[i]=DoubleComplex(inR1[i],0); in2[i]=DoubleComplex(inR2[i],0); @@ -156,81 +218,81 @@ static int testIfft(void){ in9[i]=DoubleComplex(inR9[i],0); } - - zifftma(in1, 1, 12, out1); - zifftma(in2, 2, 6, out2); - zifftma(in3, 3, 4, out3); - zifftma(in4, 4, 3, out4); - zifftma(in6, 6, 2, out6); - zifftma(in9, 3, 3, out9); - /* !!!!!!!!!!!!!!!!!!!!!!! for the imaginary part, the assert is out + res instead of out - res cause I export the transposate of the result matrix and the transposate change the sign of the imaginary part. And instead of change all the define, I only change the sign of the assert.*/ + printf(" >>> Matrice 1*12 <<< \n"); + zifftma(in1, 1, 12, out1); for (i=0;i<12;i++){ - if (zreals(out1[i])>1e-16) assert( (fabs(zreals(out1[i])-resR1[i]) / fabs(zreals(out1[i]))) < 1e-14 ); + if (zreals(out1[i])>1e-14) assert( (fabs(zreals(out1[i])-resR1[i]) / fabs(zreals(out1[i]))) < 1e-14 ); else assert(1); - if (zimags(out1[i])>1e-16) assert( (fabs(zimags(out1[i])+resI1[i]) / fabs(zimags(out1[i]))) < 1e-14 ); + if (zimags(out1[i])>1e-14) assert( (fabs(zimags(out1[i])+resI1[i]) / fabs(zimags(out1[i]))) < 1e-14 ); else assert(1); } - + + printf(" >>> Matrice 2*6 <<< \n"); + zifftma(in2, 2, 6, out2); for (i=0;i<12;i++){ - if (zreals(out2[i])>1e-16) assert( (fabs(zreals(out2[i])-resR2[i]) / fabs(zreals(out2[i]))) < 1e-14 ); + if (zreals(out2[i])>1e-14) assert( (fabs(zreals(out2[i])-resR2[i]) / fabs(zreals(out2[i]))) < 1e-14 ); else assert(1); - if (zimags(out2[i])>1e-16) assert( (fabs(zimags(out2[i])+resI2[i]) / fabs(zimags(out2[i]))) < 1e-14 ); + if (zimags(out2[i])>1e-14) assert( (fabs(zimags(out2[i])+resI2[i]) / fabs(zimags(out2[i]))) < 1e-13 ); else assert(1); } + + printf(" >>> Matrice 3*4 <<< \n"); + zifftma(in3, 3, 4, out3); for (i=0;i<12;i++){ - if (zreals(out3[i])>1e-16) assert( (fabs(zreals(out3[i])-resR3[i]) / fabs(zreals(out3[i]))) < 1e-14 ); + if (zreals(out3[i])>1e-14) assert( (fabs(zreals(out3[i])-resR3[i]) / fabs(zreals(out3[i]))) < 1e-14 ); else assert(1); - if (zimags(out3[i])>1e-16) assert( (fabs(zimags(out3[i])+resI3[i]) / fabs(zimags(out3[i]))) < 1e-14 ); + if (zimags(out3[i])>1e-14) assert( (fabs(zimags(out3[i])+resI3[i]) / fabs(zimags(out3[i]))) < 1e-14 ); else assert(1); } - + + printf(" >>> Matrice 4*3 <<< \n"); + zifftma(in4, 4, 3, out4); for (i=0;i<12;i++){ - if (zreals(out4[i])>1e-16) assert( (fabs(zreals(out4[i])-resR4[i]) / fabs(zreals(out4[i]))) < 1e-14 ); + if (zreals(out4[i])>1e-14) assert( (fabs(zreals(out4[i])-resR4[i]) / fabs(zreals(out4[i]))) < 1e-14 ); else assert(1); - if (zimags(out4[i])>1e-16) assert( (fabs(zimags(out4[i])+resI4[i]) / fabs(zimags(out4[i]))) < 1e-14 ); + if (zimags(out4[i])>1e-14) assert( (fabs(zimags(out4[i])+resI4[i]) / fabs(zimags(out4[i]))) < 1e-14 ); else assert(1); } - + + printf(" >>> Matrice 6*2 <<< \n"); + zifftma(in6, 6, 2, out6); for (i=0;i<12;i++){ if (zreals(out6[i])>1e-16) assert( (fabs(zreals(out6[i])-resR6[i]) / fabs(zreals(out6[i]))) < 1e-14 ); else assert(1); if (zimags(out6[i])>1e-16) assert( (fabs(zimags(out6[i])+resI6[i]) / fabs(zimags(out6[i]))) < 1e-14 ); else assert(1); } - + + printf(" >>> Matrice 3*3 <<< \n"); + zifftma(in9, 3, 3, out9); for (i=0;i<9;i++){ - printf("i : %d out : %f - res : %f - reste : %f\n",i,zimags(out9[i]),resI9[i],fabs(zimags(out9[i])-resI9[i]) / fabs(zimags(out9[i]))); if (zreals(out9[i])>1e-16) assert( (fabs(zreals(out9[i])-resR9[i]) / fabs(zreals(out9[i]))) < 1e-16 ); else assert(1); if (zimags(out9[i])>1e-15) assert( (fabs(zimags(out9[i])-resI9[i]) / fabs(zimags(out9[i]))) < 1e-15 ); else assert(1); - } - free(in1); - free(in2); - free(in3); - free(in4); - free(in6); - free(in9); - free(out1); - free(out2); - free(out3); - free(out4); - free(out6); - free(out9); + } +} + + + +static int testiFft(void){ + difftmaTest(); + zifftmaTest(); return 0; } int main(void) { - printf(">>> Ifft Matrices Double Tests <<<"); - assert(testIfft() == 0); + printf(">>> Fft Matrices Double Tests <<<\n"); + assert(testiFft() == 0); return 0; } + diff --git a/src/signalProcessing/includes/fft.h b/src/signalProcessing/includes/fft.h index 593c6eb3..79301325 100644 --- a/src/signalProcessing/includes/fft.h +++ b/src/signalProcessing/includes/fft.h @@ -22,8 +22,9 @@ #define cffts(in) in #define zffts(in) in -#define sfftma(in,rows,columns,out) cfftma(FloatComplexMatrix(in,0),rows,columns,out) -#define dfftma(in,rows,columns,out) zfftma(DoubleComplexMatrix(in,0),rows,columns,out) +void sfftma(float* in,int rows,int columns,float* out); + +void dfftma(double* in,int rows,int columns,double* out); /* ** compute the fast fourier transform of a vector diff --git a/src/signalProcessing/includes/hilbert.h b/src/signalProcessing/includes/hilbert.h index 18cdde46..b011dab0 100644 --- a/src/signalProcessing/includes/hilbert.h +++ b/src/signalProcessing/includes/hilbert.h @@ -17,6 +17,13 @@ #include "floatComplex.h" #include "doubleComplex.h" + +/* FIXME : input : real + output : complex + Is this true all time? + Or must we do input : real, output :real? +*/ + float shilberts(float in); void shilberta (float* in, int rows, int cols, floatComplex *out); diff --git a/src/signalProcessing/includes/ifft.h b/src/signalProcessing/includes/ifft.h index a0c06ef4..877ea88e 100644 --- a/src/signalProcessing/includes/ifft.h +++ b/src/signalProcessing/includes/ifft.h @@ -21,16 +21,10 @@ #define ciffts(in) in #define ziffts(in) in -#define sifftma(in,rows,columns,out) {float* temp;\ - temp=malloc((uint)(rows*columns)*sizeof(float));\ - sfilla(temp,rows,columns,0);\ - cifftma(FloatComplexMatrix(in,temp,rows*columns),rows,columns,out);\ - } -#define difftma(in,rows,columns,out) {double* temp;\ - temp=malloc((uint)(rows*columns)*sizeof(double));\ - dfilla(temp,rows,columns,0);\ - zifftma(DoubleComplexMatrix(in,temp,rows*columns),rows,columns,out);\ - } + +void sifftma ( float* in , int rows, int cols, float* out); + +void difftma ( double* in , int rows, int cols, double* out); /* ** compute the inverse fast fourier transform of a vector |