Previous Next Contents Generated Index Doc Set Home



Two-Dimensional Fourier Transform

The subroutines described in this section compute the Fourier coefficients of a periodic sequence. The xFFT2 operations are unnormalized, so a call of xFFT2F followed by a call of xFFT2B will multiply the input sequence by M*N.

Calling Sequence

CALL RFFT2B
(PLACE, FULL, M, N, RX, LDX, RY, LDY, RWSAVE, LWSAVE)
CALL DFFT2B
(PLACE, FULL, M, N, DX, LDX, DY, LDY, DWSAVE, LWSAVE)
CALL CFFT2B
(M, N, CX, LDX, CWSAVE, LWSAVE)
CALL ZFFT2B
(M, N, ZX, LDX, ZWSAVE, LWSAVE)






void rfft2b
(char place, char full, int m, int n, float *rx, int 
ldx, float *ry, int ldy, float *wsave, int lwsave)
void dfft2b
(char place, char full, int m, int n, double *dx, int 
ldx, double *dy, int idy, double *wsave, int lwsave)
void cfft2b
(int m, int n, complex *cx, int ldx, complex *wsave, 
int lwsave)
void zfft2b
(int m, int n, doublecomplex *zx, int ldx, 
doublecomplex *wsave, int lwsave)

Arguments

PLACE

Indicates whether the transform should be performed in place or out-of-place. The legal values for PLACE are listed below. Any values not listed below are illegal.

`I' or `i' In-place. Input is supplied in xX and the transformed input is returned in xX. xY is not referenced.

`O' or `o' Out-of-place. Input is supplied in xX and the transformed input is returned in xY.

FULL

Indicates whether the transform is to take advantage of conjugate symmetry in the complex result. If it should use symmetry then it will write only the first half of the result, otherwise it will write the entire result. Writing the entire result requires twice as much storage.

`F' or `f' Return the full result and do not take advantage of symmetry.

`N' or `n' Return the first half of the result.

M

Number of rows to be transformed. These subroutines are most efficient when M is a product of small primes. M 0.

N

Length of the sequence(s) to be transformed. These subroutines are most efficient when N is a product of small primes. N 0.

xX

On entry, a two-dimensional array xX(M,N) that contains the sequences to be transformed.

LDX

Leading dimension of the array containing the data to be transformed. LDX M.

xY

Undefined on entry. On exit, the transformed sequence in the transform is performed out of place, otherwise undefined.

LDY

Leading dimension of the output array. LDY M.

xWSAVE

On entry, an array with dimension of at least (M + N + MAX(M,N) + 45). The array must have been initialized by xFFT2I.

LWSAVE

On entry, the length of WSAVE. Unchanged on output.

Sample Program




      PROGRAM TEST
      IMPLICIT NONE
C
      INTEGER           LWSAVE, M, N
      PARAMETER        (M = 2)
      PARAMETER        (N = 4)
      PARAMETER        (LWSAVE = 4 * (M + N + N) + 40)
C
      INTEGER           I, J
      REAL              PI, WSAVE(LWSAVE)
      REAL              X, Y
      COMPLEX           C(M,N)
C
      EXTERNAL          CFFT2B, CFFT2F, CFFT2I
      INTRINSIC         ACOS, CMPLX, COS, SIN
C
C     Initialize the array C to a complex sequence.
C
      PI = ACOS (-1.0)
      DO 110, J = 1, N
        DO 100, I = 1, M
          X = SIN ((I - 1.0) * 2.0 * PI / N)
          Y = COS ((J - 1.0) * 2.0 * PI / M)
          C(I,J) = CMPLX (X, Y)
  100   CONTINUE
  110 CONTINUE
C
      PRINT 1000
      DO 200, I = 1, M
        PRINT 1010, (C(I,J), J = 1, N)
  200 CONTINUE
      CALL CFFT2I (M, N, WSAVE)
      CALL CFFT2F (M, N, C, M, WSAVE, LWSAVE)
      PRINT 1020
      DO 300, I = 1, M
        PRINT 1010, (C(I,J), J = 1, N)
  300 CONTINUE
      CALL CFFT2B (M, N, C, M, WSAVE, LWSAVE)
      PRINT 1030
      DO 400, I = 1, M
        PRINT 1010, (C(I,J), J = 1, N)
  400 CONTINUE
C
 1000 FORMAT (1X, `Original Sequences:')
 1010 FORMAT (1X, 100(F4.1' +',F4.1,'i  `))
 1020 FORMAT (1X, `Transformed Sequences:')
 1030 FORMAT (1X, `Recovered Sequences:')
C
      END



Sample Output




  0.0 + 1.0i   0.0 +-1.0i   0.0 + 1.0i   0.0 +-1.0i  
  1.0 + 1.0i   1.0 +-1.0i   1.0 + 1.0i   1.0 +-1.0i  
 Transformed Sequences:
  4.0 + 0.0i   0.0 + 0.0i   0.0 + 8.0i   0.0 + 0.0i  
 -4.0 + 0.0i   0.0 + 0.0i   0.0 + 0.0i   0.0 + 0.0i  
 Recovered Sequences:
  0.0 + 8.0i   0.0 +-8.0i   0.0 + 8.0i   0.0 +-8.0i  
  8.0 + 8.0i   8.0 +-8.0i   8.0 + 8.0i   8.0 +-8.0i  






Previous Next Contents Generated Index Doc Set Home