Google
 

Trailing-Edge - PDP-10 Archives - decuslib10-02 - 43,50145/harm.doc
There are 2 other files named harm.doc in the archive. Click here to see a list.
SUBROUTINE HARM

PURPOSE
   PERFORMS DISCRETE COMPLEX FOURIER TRANSFORMS ON A COMPLEX
   THREE DIMENSIONAL ARRAY

USAGE
   CALL HARM (A,M,INV,S,IFSET,IFERR)

DESCRIPTION OF PARAMETERS
   A	 - AS INPUT, A CONTAINS THE COMPLEX, 3-DIMENSIONAL
	   ARRAY TO BE TRANSFORMED.  THE REAL PART OF
	   A(I1,I2,I3) IS STORED IN VECTOR FASHION IN A CELL
	   WITH INDEX 2*(I3*N1*N2 + I2*N1 + I1) + 1 WHERE
	   NI = 2**M(I), I=1,2,3 AND I1 = 0,1,...,N1-1 ETC.
	   THE IMAGINARY PART IS IN THE CELL IMMEDIATELY
	   FOLLOWING.  NOTE THAT THE SUBSCRIPT I1 INCREASES
	   MOST RAPIDLY AND I3 INCREASES LEAST RAPIDLY.
	   AS OUTPUT, A CONTAINS THE COMPLEX FOURIER
	   TRANSFORM.  THE NUMBER OF CORE LOCATIONS OF
	   ARRAY A IS 2*(N1*N2*N3)
   M	 - A THREE CELL VECTOR WHICH DETERMINES THE SIZES
	   OF THE 3 DIMENSIONS OF THE ARRAY A.	 THE SIZE,
	   NI, OF THE I DIMENSION OF A IS 2**M(I), I = 1,2,3
   INV	 - A VECTOR WORK AREA FOR BIT AND INDEX MANIPULATION
	   OF DIMENSION ONE FOURTH OF THE QUANTITY
	   MAX(N1,N2,N3)
   S	 - A VECTOR WORK AREA FOR SINE TABLES WITH DIMENSION
	   THE SAME AS INV
   IFSET - AN OPTION PARAMETER WITH THE FOLLOWING SETTINGS
	      0    SET UP SINE AND INV TABLES ONLY
	      1    SET UP SINE AND INV TABLES ONLY AND
		   CALCULATE FOURIER TRANSFORM
	     -1    SET UP SINE AND INV TABLES ONLY AND
		   CALCULATE INVERSE FOURIER TRANSFORM (FOR
		   THE MEANING OF INVERSE SEE THE EQUATIONS
		   UNDER METHOD BELOW)
	      2    CALCULATE FOURIER TRANSFORM ONLY (ASSUME
		   SINE AND INV TABLES EXIST)
	     -2    CALCULATE INVERSE FOURIER TRANSFORM ONLY
		   (ASSUME SINE AND INV TABLES EXIST)
   IFERR - ERROR INDICATOR.   WHEN IFSET IS 0,+1,-1,
	   IFERR = 1 MEANS THE MAXIMUM M(I) IS GREATER THAN
	  20 , I=1,2,3	 WHEN IFSET IS 2,-2 , IFERR = 1
	   MEANS THAT THE SINE AND INV TABLES ARE NOT LARGE
	   ENOUGH OR HAVE NOT BEEN COMPUTED .
	   IF ON RETURN IFERR = 0 THEN NONE OF THE ABOVE
	   CONDITIONS ARE PRESENT

REMARKS
   THIS SUBROUTINE IS TO BE USED FOR COMPLEX, 3-DIMENSIONAL
   ARRAYS IN WHICH EACH DIMENSION IS A POWER OF 2.  THE
   MAXIMUM M(I) MUST NOT BE LESS THAN 3 OR GREATER THAN 20,
   I = 1,2,3

SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
   NONE

METHOD
   FOR IFSET = +1, OR +2, THE FOURIER TRANSFORM OF COMPLEX
   ARRAY A IS OBTAINED.

	  N1-1	 N2-1	N3-1		    L1	 L2   L3
1,J2,J3)=SUM	SUM    SUM    A(K1,K2,K3)*W1  *W2  *W3
	  K1=0	 K2=0	K3=0

	  WHERE WI IS THE N(I) ROOT OF UNITY AND L1=K1*J1,
		L2=K2*J2, L3=K3*J3


   FOR IFSET = -1, OR -2, THE INVERSE FOURIER TRANSFORM A OF
   COMPLEX ARRAY X IS OBTAINED.

1,K2,K3)=
       1      N1-1   N2-1   N3-1		-L1  -L2  -L3
   -------- *SUM    SUM    SUM	  X(J1,J2,J3)*W1  *W2  *W3
   N1*N2*N3   J1=0   J2=0   J3=0


   SEE J.W. COOLEY AND J.W. TUKEY, 'AN ALGORITHM FOR THE
   MACHINE CALCULATION OF COMPLEX FOURIER SERIES',
   MATHEMATICS OF COMPUTATIONS, VOL. 19 (APR. 1965), P. 297.