Node:The Halfcomplex-format DFT, Next:Real even/odd DFTs (cosine/sine transforms), Previous:More DFTs of Real Data, Up:More DFTs of Real Data
An r2r kind of
FFTW_R2HC (r2hc) corresponds to an r2c DFT
(see One-Dimensional DFTs of Real Data) but with "halfcomplex"
format output, and may sometimes be faster and/or more convenient than
The inverse hc2r transform is of kind
This consists of the non-redundant half of the complex output for a 1d
real-input DFT of size
n, stored as a sequence of
double) in the format:
r0, r1, r2, ..., rn/2, i(n+1)/2-1, ..., i2, i1
is the real part of the kth output, and
is the imaginary part. (Division by 2 is rounded down.) For a
hc[n], the kth component thus has its
real part in
hc[k] and its imaginary part in
the exception of
n/2 (the latter
n is even)--in these two cases, the imaginary part is
zero due to symmetries of the real-input DFT, and is not stored.
Thus, the r2hc transform of
n real values is a halfcomplex array of
n, and vice versa for hc2r.
Aside from the differing format, the output of
FFTW_HC2R is otherwise exactly the same as for
the corresponding 1d r2c/c2r transform
FFTW_BACKWARD transforms, respectively).
Recall that these transforms are unnormalized, so r2hc followed by hc2r
will result in the original data multiplied by
like the c2r transform, an out-of-place hc2r transform will
destroy its input array.
Although these halfcomplex transforms can be used with the
multi-dimensional r2r interface, the interpretation of such a separable
product of transforms along each dimension is problematic. For example,
consider a two-dimensional
ny, r2hc by r2hc
transform planned by
fftw_plan_r2r_2d(nx, ny, in, out, FFTW_R2HC,
FFTW_R2HC, FFTW_MEASURE). Conceptually, FFTW first transforms the rows
ny) to produce halfcomplex rows, and then transforms the
columns (of size
nx). Half of these column transforms, however,
are of imaginary parts, and should therefore be multiplied by i
and combined with the r2hc transforms of the real columns to produce the
2d DFT amplitudes; FFTW's r2r transform does not perform this
combination for you. Thus, if a multi-dimensional real-input/output DFT
is required, we recommend using the ordinary r2c/c2r
interface (see Multi-Dimensional DFTs of Real Data).