cannam@167: cannam@167: cannam@167: cannam@167: cannam@167:
cannam@167:cannam@167: Next: Guru Real-data DFTs, Previous: Guru vector and transform sizes, Up: Guru Interface [Contents][Index]
cannam@167:fftw_plan fftw_plan_guru_dft( cannam@167: int rank, const fftw_iodim *dims, cannam@167: int howmany_rank, const fftw_iodim *howmany_dims, cannam@167: fftw_complex *in, fftw_complex *out, cannam@167: int sign, unsigned flags); cannam@167: cannam@167: fftw_plan fftw_plan_guru_split_dft( cannam@167: int rank, const fftw_iodim *dims, cannam@167: int howmany_rank, const fftw_iodim *howmany_dims, cannam@167: double *ri, double *ii, double *ro, double *io, cannam@167: unsigned flags); cannam@167:
These two functions plan a complex-data, multi-dimensional DFT
cannam@167: for the interleaved and split format, respectively.
cannam@167: Transform dimensions are given by (rank
, dims
) over a
cannam@167: multi-dimensional vector (loop) of dimensions (howmany_rank
,
cannam@167: howmany_dims
). dims
and howmany_dims
should point
cannam@167: to fftw_iodim
arrays of length rank
and
cannam@167: howmany_rank
, respectively.
cannam@167:
flags
is a bitwise OR (‘|’) of zero or more planner flags,
cannam@167: as defined in Planner Flags.
cannam@167:
In the fftw_plan_guru_dft
function, the pointers in
and
cannam@167: out
point to the interleaved input and output arrays,
cannam@167: respectively. The sign can be either -1 (=
cannam@167: FFTW_FORWARD
) or +1 (= FFTW_BACKWARD
). If the
cannam@167: pointers are equal, the transform is in-place.
cannam@167:
In the fftw_plan_guru_split_dft
function,
cannam@167: ri
and ii
point to the real and imaginary input arrays,
cannam@167: and ro
and io
point to the real and imaginary output
cannam@167: arrays. The input and output pointers may be the same, indicating an
cannam@167: in-place transform. For example, for fftw_complex
pointers
cannam@167: in
and out
, the corresponding parameters are:
cannam@167:
ri = (double *) in; cannam@167: ii = (double *) in + 1; cannam@167: ro = (double *) out; cannam@167: io = (double *) out + 1; cannam@167:
Because fftw_plan_guru_split_dft
accepts split arrays, strides
cannam@167: are expressed in units of double
. For a contiguous
cannam@167: fftw_complex
array, the overall stride of the transform should
cannam@167: be 2, the distance between consecutive real parts or between
cannam@167: consecutive imaginary parts; see Guru vector and transform sizes. Note that the dimension strides are applied equally to the
cannam@167: real and imaginary parts; real and imaginary arrays with different
cannam@167: strides are not supported.
cannam@167:
There is no sign
parameter in fftw_plan_guru_split_dft
.
cannam@167: This function always plans for an FFTW_FORWARD
transform. To
cannam@167: plan for an FFTW_BACKWARD
transform, you can exploit the
cannam@167: identity that the backwards DFT is equal to the forwards DFT with the
cannam@167: real and imaginary parts swapped. For example, in the case of the
cannam@167: fftw_complex
arrays above, the FFTW_BACKWARD
transform
cannam@167: is computed by the parameters:
cannam@167:
ri = (double *) in + 1; cannam@167: ii = (double *) in; cannam@167: ro = (double *) out + 1; cannam@167: io = (double *) out; cannam@167:
cannam@167: Next: Guru Real-data DFTs, Previous: Guru vector and transform sizes, Up: Guru Interface [Contents][Index]
cannam@167: