## DG01OD

### Scrambled discrete Hartley transform of a real signal

[Specification] [Arguments] [Method] [References] [Comments] [Example]

Purpose

      To compute the (scrambled) discrete Hartley transform of
      a real signal.

Specification

          SUBROUTINE DG01OD( SCR, WGHT, N, A, W, INFO )
    C     .. Scalar Arguments ..
          CHARACTER         SCR, WGHT
          INTEGER           INFO, N
    C     .. Array Arguments ..
          DOUBLE PRECISION  A(*), W(*)

Arguments

Mode Parameters

      SCR     CHARACTER*1
              Indicates whether the signal is scrambled on input or
              on output as follows:
              = 'N':  the signal is not scrambled at all;
              = 'I':  the input signal is bit-reversed;
              = 'O':  the output transform is bit-reversed.

      WGHT    CHARACTER*1
              Indicates whether the precomputed weights are available
              or not, as follows:
              = 'A':  available;
              = 'N':  not available.
              Note that if N > 1 and WGHT = 'N' on entry, then WGHT is
              set to 'A' on exit.

Input/Output Parameters

      N       (input) INTEGER
              Number of real samples. N must be a power of 2.
              N >= 0.

      A       (input/output) DOUBLE PRECISION array, dimension (N)
              On entry with SCR = 'N' or SCR = 'O', this array must
              contain the input signal.
              On entry with SCR = 'I', this array must contain the
              bit-reversed input signal.
              On exit with SCR = 'N' or SCR = 'I', this array contains
              the Hartley transform of the input signal.
              On exit with SCR = 'O', this array contains the
              bit-reversed Hartley transform.

      W       (input/output) DOUBLE PRECISION array,
                             dimension (N - LOG2(N))
              On entry with WGHT = 'A', this array must contain the long
              weight vector computed by a previous call of this routine
              with the same value of N. If WGHT = 'N', the contents of
              this array on entry is ignored.
              On exit, this array contains the long weight vector.

Error Indicator

      INFO    INTEGER
              = 0:  successful exit;
              < 0:  if INFO = -i, the i-th argument had an illegal
                    value.

Method

      This routine uses a Hartley butterfly algorithm as described
      in [1].

References

      [1] Van Loan, Charles.
          Computational frameworks for the fast Fourier transform.
          SIAM, 1992.

Numerical Aspects

      The algorithm is backward stable and requires O(N log(N))
      floating point operations.

Further Comments

      None

Example

Program Text

    *     DG01OD EXAMPLE PROGRAM TEXT
    *
    *     .. Parameters ..
          INTEGER          NIN, NOUT
          PARAMETER        ( NIN = 5, NOUT = 6 )
          INTEGER          NMAX
          PARAMETER        ( NMAX = 128 )
    *     .. Local Scalars ..
          INTEGER          I, INFO, N
          CHARACTER*1      SCR, WGHT
    *     .. Local Arrays ..
          DOUBLE PRECISION A(NMAX), W(NMAX)
    *     .. External Subroutines ..
          EXTERNAL         DG01OD
    *     .. Executable Statements ..
    *
          WRITE ( NOUT, FMT = 99999 )
    *     Skip the heading in the data file and read the data.
          READ ( NIN, FMT = '()' )
          READ ( NIN, FMT = * ) N, SCR, WGHT
          IF ( N.LT.0 .OR. N.GT.NMAX ) THEN
             WRITE ( NOUT, FMT = 99995 ) N
          ELSE
             READ ( NIN, FMT = * ) ( A(I), I = 1,N )
    *        Compute the Hartley transform.
             CALL DG01OD( SCR, WGHT, N, A, W, INFO )
             IF ( INFO.NE.0 ) THEN
                WRITE ( NOUT, FMT = 99998 ) INFO
             ELSE
                WRITE ( NOUT, FMT = 99997 )
                DO 10 I = 1, N
                   WRITE ( NOUT, FMT = 99996 ) I, A(I)
       10       CONTINUE
             END IF
          END IF
          STOP
    *
    99999 FORMAT (' DG01OD EXAMPLE PROGRAM RESULTS',/1X)
    99998 FORMAT (' INFO on exit from DG01OD = ',I2)
    99997 FORMAT ('   Hartley transform ',//'   i    A(i)',/)
    99996 FORMAT (I4,1X,F8.4)
    99995 FORMAT (/' N is out of range.',/' N = ',I5)
          END

Program Data

     DG01OD EXAMPLE
      16      N      N
     1.0
     2.0
     3.0
     4.0
     5.0
     6.0
     7.0
     8.0
     9.0
    10.0
    11.0
    12.0
    13.0
    14.0
    15.0
    16.0

Program Results

     DG01OD EXAMPLE PROGRAM RESULTS

       Hartley transform

       i    A(i)

       1 136.0000
       2 -48.2187
       3 -27.3137
       4 -19.9728
       5 -16.0000
       6 -13.3454
       7 -11.3137
       8  -9.5913
       9  -8.0000
      10  -6.4087
      11  -4.6863
      12  -2.6546
      13   0.0000
      14   3.9728
      15  11.3137
      16  32.2187

Return to index