Given a sequence of
$n$ real data values
${x}_{\mathit{j}}$, for
$\mathit{j}=0,1,\dots ,n-1$, C06EAF calculates their discrete Fourier transform defined by
(Note the scale factor of
$\frac{1}{\sqrt{n}}$ in this definition.) The transformed values
${\hat{z}}_{k}$ are complex, but they form a Hermitian sequence (i.e.,
${\hat{z}}_{n-k}$ is the complex conjugate of
${\hat{z}}_{k}$), so they are completely determined by
$n$ real numbers (see also the
C06 Chapter Introduction).
To compute the inverse discrete Fourier transform defined by
this routine should be followed by a call of
C06GBF to form the complex conjugates of the
${\hat{z}}_{k}$.
C06EAF uses the fast Fourier transform (FFT) algorithm (see
Brigham (1974)). There are some restrictions on the value of
$n$ (see
Section 5).
If on entry
${\mathbf{IFAIL}}={\mathbf{0}}$ or
${-{\mathbf{1}}}$, explanatory error messages are output on the current error message unit (as defined by
X04AAF).
Some indication of accuracy can be obtained by performing a subsequent inverse transform and comparing the results with the original sequence (in exact arithmetic they would be identical).
On the other hand, C06EAF is particularly slow if
$n$ has several unpaired prime factors, i.e., if the ‘square-free’ part of
$n$ has several factors.
For such values of
$n$,
C06FAF (which requires additional real workspace) is considerably faster.
This example reads in a sequence of real data values and prints their discrete Fourier transform (as computed by C06EAF), after expanding it from Hermitian form into a full complex sequence. It then performs an inverse transform using
C06GBF followed by
C06EBF, and prints the sequence so obtained alongside the original data values.