cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: FFTW 3.3.8: The Discrete Hartley Transform cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167:
cannam@167:

cannam@167: Previous: , Up: More DFTs of Real Data   [Contents][Index]

cannam@167:
cannam@167:
cannam@167: cannam@167:

2.5.3 The Discrete Hartley Transform

cannam@167: cannam@167:

If you are planning to use the DHT because you’ve heard that it is cannam@167: “faster” than the DFT (FFT), stop here. The DHT is not cannam@167: faster than the DFT. That story is an old but enduring misconception cannam@167: that was debunked in 1987. cannam@167:

cannam@167:

The discrete Hartley transform (DHT) is an invertible linear transform cannam@167: closely related to the DFT. In the DFT, one multiplies each input by cannam@167: cos - i * sin (a complex exponential), whereas in the DHT each cannam@167: input is multiplied by simply cos + sin. Thus, the DHT cannam@167: transforms n real numbers to n real numbers, and has the cannam@167: convenient property of being its own inverse. In FFTW, a DHT (of any cannam@167: positive n) can be specified by an r2r kind of FFTW_DHT. cannam@167: cannam@167: cannam@167: cannam@167:

cannam@167:

Like the DFT, in FFTW the DHT is unnormalized, so computing a DHT of cannam@167: size n followed by another DHT of the same size will result in cannam@167: the original array multiplied by n. cannam@167: cannam@167:

cannam@167:

The DHT was originally proposed as a more efficient alternative to the cannam@167: DFT for real data, but it was subsequently shown that a specialized DFT cannam@167: (such as FFTW’s r2hc or r2c transforms) could be just as fast. In FFTW, cannam@167: the DHT is actually computed by post-processing an r2hc transform, so cannam@167: there is ordinarily no reason to prefer it from a performance cannam@167: perspective.5 cannam@167: However, we have heard rumors that the DHT might be the most appropriate cannam@167: transform in its own right for certain applications, and we would be cannam@167: very interested to hear from anyone who finds it useful. cannam@167:

cannam@167:

If FFTW_DHT is specified for multiple dimensions of a cannam@167: multi-dimensional transform, FFTW computes the separable product of 1d cannam@167: DHTs along each dimension. Unfortunately, this is not quite the same cannam@167: thing as a true multi-dimensional DHT; you can compute the latter, if cannam@167: necessary, with at most rank-1 post-processing passes cannam@167: [see e.g. H. Hao and R. N. Bracewell, Proc. IEEE 75, 264–266 (1987)]. cannam@167:

cannam@167:

For the precise mathematical definition of the DHT as used by FFTW, see cannam@167: What FFTW Really Computes. cannam@167:

cannam@167:
cannam@167:
cannam@167:

Footnotes

cannam@167: cannam@167:

(5)

cannam@167:

We provide the DHT mainly as a byproduct of some cannam@167: internal algorithms. FFTW computes a real input/output DFT of cannam@167: prime size by re-expressing it as a DHT plus post/pre-processing cannam@167: and then using Rader’s prime-DFT algorithm adapted to the DHT.

cannam@167:
cannam@167:
cannam@167:
cannam@167:

cannam@167: Previous: , Up: More DFTs of Real Data   [Contents][Index]

cannam@167:
cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: