00001 #ifndef vnl_fft_h_ 00002 #define vnl_fft_h_ 00003 /* 00004 fsm@robots.ox.ac.uk 00005 */ 00006 00007 #include <vcl_compiler.h> 00008 00009 //: use C++ overloading to find the correct FORTRAN routine from templated FFT code. 00010 00011 void vnl_fft_setgpfa(float *triggs, int size, int const pqr[3], int *info); 00012 void vnl_fft_setgpfa(double *triggs, int size, int const pqr[3], int *info); 00013 00014 00015 // CALL GPFA(A,B,TRIGS,INC,JUMP,N,LOT,ISIGN,NIPQ,INFO) 00016 // 00017 // A IS FIRST REAL INPUT/OUTPUT VECTOR 00018 // B IS FIRST IMAGINARY INPUT/OUTPUT VECTOR 00019 // TRIGS IS A TABLE OF TWIDDLE FACTORS, PRECALCULATED 00020 // BY CALLING SUBROUTINE 'SETGPFA' 00021 // INC IS THE INCREMENT WITHIN EACH DATA VECTOR 00022 // JUMP IS THE INCREMENT BETWEEN DATA VECTORS 00023 // N IS THE LENGTH OF THE TRANSFORMS: 00024 // ----------------------------------- 00025 // N = (2**IP) * (3**IQ) * (5**IR) 00026 // ----------------------------------- 00027 // LOT IS THE NUMBER OF TRANSFORMS 00028 // ISIGN = +1 FOR FORWARD TRANSFORM 00029 // = -1 FOR INVERSE TRANSFORM 00030 // NIPQ is an array containing the number of factors (for 00031 // power of 2,3 and 5 00032 // INFO is set to -1 if there is a problem, 0 otherwise 00033 00034 // These functions perform a number (LOT) of 1D FFTs, each of the same signal size (N). 00035 // The signal is stored in two real arrays (A, B), with consecutive elements separated 00036 // by a stride (INC). The separation between the LOT signals to be transformed is JUMP. 00037 void vnl_fft_gpfa(float *a, float *b, float const *triggs, 00038 int inc, int jump, int n, 00039 int lot, int isign, int const pqr[3], int *info); 00040 void vnl_fft_gpfa(double *a, double *b, double const *triggs, 00041 int inc, int jump, int n, 00042 int lot, int isign, int const pqr[3], int *info); 00043 00044 #endif