ref: b548687a8ed1d0a159c9d3f3f921d93bbb56908e
dir: /module/ffts.m/
FFTs: module{ PATH: con "/dis/math/ffts.dis"; ffts: fn(a,b:array of real, ntot,n,nspan,isn:int); }; # multivariate complex fourier transform, computed in place # using mixed-radix fast fourier transform algorithm. # arrays a and b originally hold the real and imaginary # components of the data, and return the real and # imaginary components of the resulting fourier coefficients. # multivariate data is indexed according to the fortran # array element successor function, without limit # on the number of implied multiple subscripts. # the subroutine is called once for each variate. # the calls for a multivariate transform may be in any order. # ntot is the total number of complex data values. # n is the dimension of the current variable. # nspan/n is the spacing of consecutive data values # while indexing the current variable. # the sign of isn determines the sign of the complex # exponential, and the magnitude of isn is normally one. # univariate transform: # ffts(a,b,n,n,n,1) # trivariate transform with a(n1,n2,n3), b(n1,n2,n3): # ffts(a,b,n1*n2*n3,n1,n1,1) # ffts(a,b,n1*n2*n3,n2,n1*n2,1) # ffts(a,b,n1*n2*n3,n3,n1*n2*n3,1) # the data can alternatively be stored in a single vector c # alternating real and imaginary parts. the magnitude of isn changed # to two to give correct indexing increment, and a[0:] and a[1:] used # for a and b