Chris@10: Chris@10: Chris@10: 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: Planner Flags, Chris@10: Up: Basic Interface Chris@10:


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

4.3.3 Real-data DFTs

Chris@10: Chris@10:
     fftw_plan fftw_plan_dft_r2c_1d(int n0,
Chris@10:                                     double *in, fftw_complex *out,
Chris@10:                                     unsigned flags);
Chris@10:      fftw_plan fftw_plan_dft_r2c_2d(int n0, int n1,
Chris@10:                                     double *in, fftw_complex *out,
Chris@10:                                     unsigned flags);
Chris@10:      fftw_plan fftw_plan_dft_r2c_3d(int n0, int n1, int n2,
Chris@10:                                     double *in, fftw_complex *out,
Chris@10:                                     unsigned flags);
Chris@10:      fftw_plan fftw_plan_dft_r2c(int rank, const int *n,
Chris@10:                                  double *in, fftw_complex *out,
Chris@10:                                  unsigned flags);
Chris@10: 
Chris@10:

Chris@10: Plan a real-input/complex-output discrete Fourier transform (DFT) in Chris@10: zero or more dimensions, returning an fftw_plan (see Using Plans). Chris@10: Chris@10:

Once you have created a plan for a certain transform type and Chris@10: parameters, then creating another plan of the same type and parameters, Chris@10: but for different arrays, is fast and shares constant data with the Chris@10: first plan (if it still exists). Chris@10: Chris@10:

The planner returns NULL if the plan cannot be created. A Chris@10: non-NULL plan is always returned by the basic interface unless Chris@10: you are using a customized FFTW configuration supporting a restricted Chris@10: set of transforms, or if you use the FFTW_PRESERVE_INPUT flag Chris@10: with a multi-dimensional out-of-place c2r transform (see below). Chris@10: Chris@10:

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

The inverse transforms, taking complex input (storing the non-redundant Chris@10: half of a logically Hermitian array) to real output, are given by: Chris@10: Chris@10:

     fftw_plan fftw_plan_dft_c2r_1d(int n0,
Chris@10:                                     fftw_complex *in, double *out,
Chris@10:                                     unsigned flags);
Chris@10:      fftw_plan fftw_plan_dft_c2r_2d(int n0, int n1,
Chris@10:                                     fftw_complex *in, double *out,
Chris@10:                                     unsigned flags);
Chris@10:      fftw_plan fftw_plan_dft_c2r_3d(int n0, int n1, int n2,
Chris@10:                                     fftw_complex *in, double *out,
Chris@10:                                     unsigned flags);
Chris@10:      fftw_plan fftw_plan_dft_c2r(int rank, const int *n,
Chris@10:                                  fftw_complex *in, double *out,
Chris@10:                                  unsigned flags);
Chris@10: 
Chris@10:

Chris@10: The arguments are the same as for the r2c transforms, except that the Chris@10: input and output data formats are reversed. Chris@10: Chris@10:

FFTW computes an unnormalized transform: computing an r2c followed by a Chris@10: c2r transform (or vice versa) will result in the original data Chris@10: multiplied by the size of the transform (the product of the logical Chris@10: dimensions). Chris@10: An r2c transform produces the same output as a FFTW_FORWARD Chris@10: complex DFT of the same input, and a c2r transform is correspondingly Chris@10: equivalent to FFTW_BACKWARD. For more information, see What FFTW Really Computes. Chris@10: Chris@10: Chris@10: Chris@10: