How is FFT implemented in RSF? What FFT conventions are used? What choices of array size are efficient?
There are two main fft programs: sffft1 and sffft3.
sffft1 takes real input and transforms it to complex by applying real-to-complex FFT on the first axis. It does the inverse transform when inv=y.
sffft3 applies complex-to-complex FFT on the specified axis. The sign of the transform is determined by the sign parameter.
sfcosft applies real-to-real cosine transform.
Here is an example 2-D FFT figure from Jon Claerbout reproduced in bei/ft1/plane4:
RSF utilizes the KISS FFT library for applying FFT. There are some faster open-source software solutions available, most notably FFTW but KISS (Keep It Simple, Stupid) FFT is attractive because of it simplicity and compactness. The library can handle an arbitrary data size. However, some sizes (prime factor powers) are more efficient than others. For example, here are CPU times for running sffft1 on files with different sizes:
Update: sffft1, sffft3, and some other programs that use FFT, now pad the data to the nearest optimal size.