class FFT |
---|
**** | 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. |
assign_basis(n:INT):ARRAY{CPX} |
---|
**** | Return up the complex array to be the array of <cos,sin> pairs (i.e., twiddle factors) corresponding to the desired fft size 'n'. This routine allocates memory for you. |
conj_scale(x:ARRAY{CPX},n:INT,scale:FLT) |
---|
**** | Conjugate and scale complex data (e.g. prior to IFFT by FFT) |
dft(data:ARRAY{CPX},res:ARRAY{CPX},twid:ARRAY{CPX}):ARRAY{CPX} |
---|
**** | Perform direct Discrete Fourier Transform (DFT). 'data' may be any length. |
fft(x:ARRAY2{CPX}) |
---|
**** | Perform 2D FFT on image (both dims must be powers of 2). We assume here that row order is fastest in 'x'. |
fft(x:ARRAY3{CPX}) |
---|
**** | 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}) |
---|
fft(x:ARRAY{CPX},stride:INT) |
---|
**** | complex data in x, complex result in x in order. |
fft(x:ARRAY{FLT}):ARRAY{CPX} |
---|
fft(x:ARRAY{FLT},stride:INT):ARRAY{CPX} |
---|
**** | real data in x, in-order result returned as a new array. |
fft_2dimensional(x:ARRAY2{CPX}) |
---|
**** | 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'. |
fft_3dimensional(x:ARRAY3{CPX}) |
---|
**** | 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}) |
---|
fft_raw(x:ARRAY{CPX},n:INT,dilate:INT,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}) |
---|
find_table(n:INT):ARRAY{CPX} |
---|
**** | search our list of existing twiddle arrays |
ifft(x:ARRAY2{CPX}) |
---|
ifft(x:ARRAY3{CPX}) |
---|
ifft(x:ARRAY{CPX}) |
---|
ifft(x:ARRAY{CPX},stride:INT) |
---|
**** | inverse fft, complex data in x, complex result in x. |
ifft_2dimensional(x:ARRAY2{CPX}) |
---|
**** | Perform 2D inverse FFT on image (both dims must be powers of 2). Assume row indexing is the fastest varying index. |
ifft_3dimensional(x:ARRAY3{CPX}) |
---|
**** | 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}) |
---|
ifft_real(x:ARRAY{CPX},stride:INT) |
---|
**** | assumped complex conj. sym. data in x, from real data. Produces a real result (i.e., .im attributes are all zeros). |
ifft_stride(x:ARRAY{CPX},stride:INT) |
---|
**** | optimized for stride indexing. |
init |
---|
int_2_complex(s:ARRAY{INT},c:ARRAY{CPX}):ARRAY{CPX} |
---|
**** | create a complex array fttable from an integer array |
is_power_of_two(n:INT):BOOL |
---|
**** | Query whether n is a 2^k for some k |
pure_real(x:ARRAY{CPX},n:INT):BOOL |
---|
**** |
__Query_whether_the_data_in_x_is_all_real. |
reals(x:ARRAY{CPX},stride:INT,sign:INT,twid:ARRAY{CPX}) |
---|
**** | 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. |
reverse_dig(x:ARRAY{CPX},n:INT,stride:INT) |
---|
**** | bit reverse the elements in array x |
shared twiddles:FLIST{ARRAY{CPX}}; |
---|
**** | prestored twiddle factors. |
shared twiddles:FLIST{ARRAY{CPX}}; |
---|
**** | prestored twiddle factors. |