d@0: d@0: d@0: Guru Complex DFTs - FFTW 3.2.1 d@0: d@0: d@0: d@0: d@0: d@0: d@0: d@0: d@0: d@0: d@0: d@0: d@0: d@0:
d@0:

d@0: d@0: Next: , d@0: Previous: Guru vector and transform sizes, d@0: Up: Guru Interface d@0:


d@0:
d@0: d@0:

4.5.3 Guru Complex DFTs

d@0: d@0:
     fftw_plan fftw_plan_guru_dft(
d@0:           int rank, const fftw_iodim *dims,
d@0:           int howmany_rank, const fftw_iodim *howmany_dims,
d@0:           fftw_complex *in, fftw_complex *out,
d@0:           int sign, unsigned flags);
d@0:      
d@0:      fftw_plan fftw_plan_guru_split_dft(
d@0:           int rank, const fftw_iodim *dims,
d@0:           int howmany_rank, const fftw_iodim *howmany_dims,
d@0:           double *ri, double *ii, double *ro, double *io,
d@0:           unsigned flags);
d@0: 
d@0:

d@0: These two functions plan a complex-data, multi-dimensional DFT d@0: for the interleaved and split format, respectively. d@0: Transform dimensions are given by (rank, dims) over a d@0: multi-dimensional vector (loop) of dimensions (howmany_rank, d@0: howmany_dims). dims and howmany_dims should point d@0: to fftw_iodim arrays of length rank and d@0: howmany_rank, respectively. d@0: d@0:

flags is a bitwise OR (`|') of zero or more planner flags, d@0: as defined in Planner Flags. d@0: d@0:

In the fftw_plan_guru_dft function, the pointers in and d@0: out point to the interleaved input and output arrays, d@0: respectively. The sign can be either -1 (= d@0: FFTW_FORWARD) or +1 (= FFTW_BACKWARD). If the d@0: pointers are equal, the transform is in-place. d@0: d@0:

In the fftw_plan_guru_split_dft function, d@0: ri and ii point to the real and imaginary input arrays, d@0: and ro and io point to the real and imaginary output d@0: arrays. The input and output pointers may be the same, indicating an d@0: in-place transform. For example, for fftw_complex pointers d@0: in and out, the corresponding parameters are: d@0: d@0:

     ri = (double *) in;
d@0:      ii = (double *) in + 1;
d@0:      ro = (double *) out;
d@0:      io = (double *) out + 1;
d@0: 
d@0:

Because fftw_plan_guru_split_dft accepts split arrays, strides d@0: are expressed in units of double. For a contiguous d@0: fftw_complex array, the overall stride of the transform should d@0: be 2, the distance between consecutive real parts or between d@0: consecutive imaginary parts; see Guru vector and transform sizes. Note that the dimension strides are applied equally to the d@0: real and imaginary parts; real and imaginary arrays with different d@0: strides are not supported. d@0: d@0:

There is no sign parameter in fftw_plan_guru_split_dft. d@0: This function always plans for an FFTW_FORWARD transform. To d@0: plan for an FFTW_BACKWARD transform, you can exploit the d@0: identity that the backwards DFT is equal to the forwards DFT with the d@0: real and imaginary parts swapped. For example, in the case of the d@0: fftw_complex arrays above, the FFTW_BACKWARD transform d@0: is computed by the parameters: d@0: d@0:

     ri = (double *) in + 1;
d@0:      ii = (double *) in;
d@0:      ro = (double *) out + 1;
d@0:      io = (double *) out;
d@0: 
d@0: d@0: d@0: