**** FFT class. Useful routines include: ____fft_basic:_Radix-2_FFT,_in-place_and_in-order._in-order_result. ____fft_real_:_Radix-2_FFT,_fft_basic,_but_optimized_for_real_input_data._ ____fft_torl_:_Radix-2_iFFT,_but_optimized_for_real_result_data._ ____dft:_direct_DFT_routine. ____fft:_various_flavors_of_simplified_radix-2_fft_routines. ____fft_2dimensional_:_Image_FFT,_for_real_data. ____ifft_2dimensional:_inverse_of_the_above For those fft's that take a 'twid' argument (twiddle factors), you must first assign the complex exponential factors using the routine 'assign_basis(size)'. Some routines take a twid argument thereby optimizing for speed.

Flattened version is here

Public

Features
 **** Return up the complex array to be the array of pairs (i.e., twiddle factors) corresponding to the desired fft size 'n'. This routine allocates memory for you.
 **** Conjugate and scale complex data (e.g. prior to IFFT by FFT)
 **** Perform direct Discrete Fourier Transform (DFT). 'data' may be any length.
 **** Perform 2D FFT on image (both dims must be powers of 2). We assume here that row order is fastest in 'x'.
 **** Perform 3D FFT on image (both dims must be powers of 2). We assume here that row order is fastest in 'x'.
fft(x:ARRAY{CPX})
 **** complex data in x, complex result in x in order.
fft(x:ARRAY{FLT}):ARRAY{CPX}
 **** real data in x, in-order result returned as a new array.
 **** Perform 2D FFT on image (both dims must be powers of 2). IMAGE IS ASSUMED PURE-REAL (i.e., imaginary portions are zeros). If the image is not real, the 'fft_real' call should be change to 'fft_basic'. We assume here that row order is fastest in 'x'.
 **** Perform 3D FFT on image (both dims must be powers of 2). IMAGE IS ASSUMED PURE-REAL (i.e., imaginary portions are zeros). If the image is not real, the 'fft_real' call should be change to 'fft_basic'. We assume here that row order is fastest in 'x'.
fft_basic(x:ARRAY{CPX},stride:INT)
fft_basic(x:ARRAY{CPX},stride:INT,twid:ARRAY{CPX})
 **** Data is x. Data size is n. 'dilate' means: library global expn is the (cos, -j sin) array, EXCEPT for effective data size n/dilate, stride is the offset of each successive data term, as in "fft" above.
fft_real(x:ARRAY{CPX},stride:INT)
fft_real(x:ARRAY{CPX},stride:INT,twid:ARRAY{CPX})
fft_torl(x:ARRAY{CPX},stride:INT,scale:FLT)
fft_torl(x:ARRAY{CPX},stride:INT,scale:FLT,twid:ARRAY{CPX})
 **** search our list of existing twiddle arrays
ifft(x:ARRAY2{CPX})
ifft(x:ARRAY3{CPX})
ifft(x:ARRAY{CPX})
 **** inverse fft, complex data in x, complex result in x.
 **** Perform 2D inverse FFT on image (both dims must be powers of 2). Assume row indexing is the fastest varying index.
 **** Perform 3D inverse FFT on image (both dims must be powers of 2). Assume row indexing is the fastest varying index.
ifft_real(x:ARRAY{CPX})
 **** assumped complex conj. sym. data in x, from real data. Produces a real result (i.e., .im attributes are all zeros).
 **** optimized for stride indexing.
init
 **** create a complex array fttable from an integer array
 **** Query whether n is a 2^k for some k
 **** __Query_whether_the_data_in_x_is_all_real.
 **** This routine separates out the reals from the result when we do a real n point fft using an n/2 point complex fft. 'sign' is 1 for FFT2real, -1 for torl.
 **** bit reverse the elements in array x

Private

 **** prestored twiddle factors.
 **** prestored twiddle factors.