Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: FFTW 3.3.8: 1d Real-even DFTs (DCTs) Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82:
Chris@82:

Chris@82: Next: , Previous: , Up: What FFTW Really Computes   [Contents][Index]

Chris@82:
Chris@82:
Chris@82: Chris@82:

4.8.3 1d Real-even DFTs (DCTs)

Chris@82: Chris@82:

The Real-even symmetry DFTs in FFTW are exactly equivalent to the unnormalized Chris@82: forward (and backward) DFTs as defined above, where the input array Chris@82: X of length N is purely real and is also even symmetry. In Chris@82: this case, the output array is likewise real and even symmetry. Chris@82: Chris@82: Chris@82:

Chris@82: Chris@82: Chris@82:

For the case of REDFT00, this even symmetry means that Chris@82: Xj = XN-j, Chris@82: where we take X to be periodic so that Chris@82: XN = X0. Chris@82: Because of this redundancy, only the first n real numbers are Chris@82: actually stored, where N = 2(n-1). Chris@82:

Chris@82:

The proper definition of even symmetry for REDFT10, Chris@82: REDFT01, and REDFT11 transforms is somewhat more intricate Chris@82: because of the shifts by 1/2 of the input and/or output, although Chris@82: the corresponding boundary conditions are given in Real even/odd DFTs (cosine/sine transforms). Because of the even symmetry, however, Chris@82: the sine terms in the DFT all cancel and the remaining cosine terms are Chris@82: written explicitly below. This formulation often leads people to call Chris@82: such a transform a discrete cosine transform (DCT), although it is Chris@82: really just a special case of the DFT. Chris@82: Chris@82: Chris@82:

Chris@82: Chris@82:

In each of the definitions below, we transform a real array X of Chris@82: length n to a real array Y of length n: Chris@82:

Chris@82: Chris@82:

REDFT00 (DCT-I)

Chris@82: Chris@82:

An REDFT00 transform (type-I DCT) in FFTW is defined by: Chris@82:

.
Chris@82: Note that this transform is not defined for n=1. For n=2, Chris@82: the summation term above is dropped as you might expect. Chris@82:

Chris@82: Chris@82:

REDFT10 (DCT-II)

Chris@82: Chris@82:

An REDFT10 transform (type-II DCT, sometimes called “the” DCT) in FFTW is defined by: Chris@82:

.
Chris@82:

Chris@82: Chris@82:

REDFT01 (DCT-III)

Chris@82: Chris@82:

An REDFT01 transform (type-III DCT) in FFTW is defined by: Chris@82:

.
Chris@82: In the case of n=1, this reduces to Chris@82: Y0 = X0. Chris@82: Up to a scale factor (see below), this is the inverse of REDFT10 (“the” DCT), and so the REDFT01 (DCT-III) is sometimes called the “IDCT”. Chris@82: Chris@82:

Chris@82: Chris@82:

REDFT11 (DCT-IV)

Chris@82: Chris@82:

An REDFT11 transform (type-IV DCT) in FFTW is defined by: Chris@82:

.
Chris@82:

Chris@82: Chris@82:

Inverses and Normalization

Chris@82: Chris@82:

These definitions correspond directly to the unnormalized DFTs used Chris@82: elsewhere in FFTW (hence the factors of 2 in front of the Chris@82: summations). The unnormalized inverse of REDFT00 is Chris@82: REDFT00, of REDFT10 is REDFT01 and vice versa, and Chris@82: of REDFT11 is REDFT11. Each unnormalized inverse results Chris@82: in the original array multiplied by N, where N is the Chris@82: logical DFT size. For REDFT00, N=2(n-1) (note that Chris@82: n=1 is not defined); otherwise, N=2n. Chris@82: Chris@82:

Chris@82: Chris@82:

In defining the discrete cosine transform, some authors also include Chris@82: additional factors of Chris@82: √2 Chris@82: (or its inverse) multiplying selected inputs and/or outputs. This is a Chris@82: mostly cosmetic change that makes the transform orthogonal, but Chris@82: sacrifices the direct equivalence to a symmetric DFT. Chris@82:

Chris@82:
Chris@82:
Chris@82:

Chris@82: Next: , Previous: , Up: What FFTW Really Computes   [Contents][Index]

Chris@82:
Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: