Chris@10: Chris@10: Chris@10: Advanced Real-data DFTs - FFTW 3.3.3 Chris@10: Chris@10: Chris@10: Chris@10: Chris@10: Chris@10: Chris@10: Chris@10: Chris@10: Chris@10: Chris@10: Chris@10: Chris@10: Chris@10:
Chris@10: Chris@10: Chris@10:

Chris@10: Next: , Chris@10: Previous: Advanced Complex DFTs, Chris@10: Up: Advanced Interface Chris@10:


Chris@10:
Chris@10: Chris@10:

4.4.2 Advanced Real-data DFTs

Chris@10: Chris@10:
     fftw_plan fftw_plan_many_dft_r2c(int rank, const int *n, int howmany,
Chris@10:                                       double *in, const int *inembed,
Chris@10:                                       int istride, int idist,
Chris@10:                                       fftw_complex *out, const int *onembed,
Chris@10:                                       int ostride, int odist,
Chris@10:                                       unsigned flags);
Chris@10:      fftw_plan fftw_plan_many_dft_c2r(int rank, const int *n, int howmany,
Chris@10:                                       fftw_complex *in, const int *inembed,
Chris@10:                                       int istride, int idist,
Chris@10:                                       double *out, const int *onembed,
Chris@10:                                       int ostride, int odist,
Chris@10:                                       unsigned flags);
Chris@10: 
Chris@10:

Chris@10: Like fftw_plan_many_dft, these two functions add howmany, Chris@10: nembed, stride, and dist parameters to the Chris@10: fftw_plan_dft_r2c and fftw_plan_dft_c2r functions, but Chris@10: otherwise behave the same as the basic interface. Chris@10: Chris@10:

The interpretation of howmany, stride, and dist are Chris@10: the same as for fftw_plan_many_dft, above. Note that the Chris@10: stride and dist for the real array are in units of Chris@10: double, and for the complex array are in units of Chris@10: fftw_complex. Chris@10: Chris@10:

If an nembed parameter is NULL, it is interpreted as what Chris@10: it would be in the basic interface, as described in Real-data DFT Array Format. That is, for the complex array the size is assumed to be Chris@10: the same as n, but with the last dimension cut roughly in half. Chris@10: For the real array, the size is assumed to be n if the transform Chris@10: is out-of-place, or n with the last dimension “padded” if the Chris@10: transform is in-place. Chris@10: Chris@10:

If an nembed parameter is non-NULL, it is interpreted as Chris@10: the physical size of the corresponding array, in row-major order, just Chris@10: as for fftw_plan_many_dft. In this case, each dimension of Chris@10: nembed should be >= what it would be in the basic Chris@10: interface (e.g. the halved or padded n). Chris@10: Chris@10:

Arrays n, inembed, and onembed are not used after Chris@10: this function returns. You can safely free or reuse them. Chris@10: Chris@10: Chris@10: Chris@10: