-- Generic_Complex_Fast_Fourier_Transform with ARRAY_EXCEPTIONS; generic -- package YOUR_NAME is new GENERIC_COMPLEX_FAST_FOURIER_TRANSFORM -- ( REAL, COMPLEX, COMPLEX_VECTOR, COMPLEX_MATRIX); -- do the instantiation where the instantiation of -- GENERIC_COMPLEX_TYPES is visible type REAL is digits <> ; type COMPLEX is private; type COMPLEX_VECTOR is array(INTEGER range <>) of COMPLEX; type COMPLEX_MATRIX is array(INTEGER range <>,INTEGER range <>) of COMPLEX; with function COMPOSE_FROM_CARTESIAN(L,R:REAL) return COMPLEX is <>; with function RE(L:COMPLEX) return REAL is <>; with function IM(L:COMPLEX) return REAL is <>; with function "+"(L,R:COMPLEX) return COMPLEX is <>; with function "-"(L,R:COMPLEX) return COMPLEX is <>; with function "*"(L,R:COMPLEX) return COMPLEX is <>; with function "/"(L,R:COMPLEX) return COMPLEX is <>; with function "*"(L:COMPLEX;R:REAL) return COMPLEX is <>; with function "/"(L:COMPLEX;R:REAL) return COMPLEX is <>; package GENERIC_COMPLEX_FAST_FOURIER_TRANSFORM is procedure FFT ( A : in out COMPLEX_VECTOR ) ; function FFT ( A : COMPLEX_VECTOR ) return COMPLEX_VECTOR ; -- PURPOSE : COMPUTE DISCRETE FAST FOURIER TRANSFORM OF -- THE POINTS IN THE COMPLEX VECTOR -- -- INPUT : THE COMPLEX VECTOR A ( e.g. TIME DOMAIN ) -- -- OUTPUT : THE TRANSFORM OF VECTOR A ( e.g. FREQUENCY DOMAIN ) -- IS RETURNED IN PLACE FOR THE PROCEDURE, -- IS RETURNED AS THE VALUE OF THE FUNCTION -- SCALED BY DIVIDING BY NUMBER OF POINTS -- -- METHOD : N LOG N FFT ALGORITHM procedure INVERSE_FFT ( A : in out COMPLEX_VECTOR ) ; function INVERSE_FFT ( A : COMPLEX_VECTOR ) return COMPLEX_VECTOR ; -- PURPOSE : COMPUTE INVERSE DISCRETE FAST FOURIER TRANSFORM OF -- THE POINTS IN THE COMPLEX VECTOR -- -- INPUT : THE COMPLEX VECTOR A ( e.g. FREQUENCY DOMAIN ) -- -- OUTPUT : THE INVERSE TRANSFORM OF VECTOR A ( e.g. TIME DOMAIN ) -- IS RETURNED IN PLACE FOR THE PROCEDURE, -- IS RETURNED AS THE VALUE OF THE FUNCTION -- NO SCALING -- -- METHOD : N LOG N FFT ALGORITHM procedure FEJER ( A : in out COMPLEX_VECTOR ) ; function FEJER ( A : COMPLEX_VECTOR ) return COMPLEX_VECTOR ; -- PURPOSE : COMPUTE FEJER MODIFIED FOURIER TRANSFORM OF -- THE POINTS IN THE COMPLEX VECTOR -- -- INPUT : THE COMPLEX VECTOR A ( e.g. TIME DOMAIN ) -- -- OUTPUT : THE FEJER TRANSFORM OF VECTOR A ( e.g. FREQUENCY DOMAIN ) -- IS RETURNED IN PLACE FOR THE PROCEDURE, -- IS RETURNED AS THE VALUE OF THE FUNCTION -- -- METHOD : N LOG N FFT ALGORITHM -- APPLY WEIGHTING OF (N-I)/N TO I TH FREQUENCY -- WHERE N IS THE LENGHT OF THE VECTOR end GENERIC_COMPLEX_FAST_FOURIER_TRANSFORM ;