File: CORREL.MC of Tape: Various/ETH/eth11-3
(Source file text) 

.TITLE THE AUTO/CROSS CORRELATION FUNCTION SUBROUTINE(CORREL)
;LABORATORY SUBROUTINES
;DEC-11
;FILE CORREL.MAC
;FILE ID CORREL.1

.CSECT	FCOREL









;			COPYRIGHT (C) 1976 BY
;	    DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
;
;
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND  COPIED
;ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH  LICENSE AND WITH THE
;INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR  ANY  OTHER
;COPIES  THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
;OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF  THE  SOFTWARE  IS  HEREBY
;TRANSFERRED.
;
;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE  WITHOUT  NOTICE
;AND  SHOULD  NOT  BE  CONSTRUED  AS  A COMMITMENT BY DIGITAL EQUIPMENT
;CORPORATION.
;
;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR  RELIABILITY  OF  ITS
;SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
;
;
;
;LDP SOFTWARE DEVELOPMENT GROUP   SEPTEMBER, 1977.
	.SBTTL CONDITIONALS, GLOBALS AND MACROS

	;CONDITIONAL ASSEMBLY PARAMETERS
	;  DEFINE PARAMETERS BY REMOVING FIRST ";" IN LINE WHICH 
	;  PRECEEDS THE APPROPRIATE PARAMETER.

;EIS=1
;EAE=1
.IF	DF,EAE
DIV=177300
AC=DIV+2
MQ=AC+2
MUL=MQ+2
EAESR=MUL+3
.ENDC



	;CONDITIONAL ASSEMBLY PARAMETER DESCRIPTIONS

;EIS	"EIS" SHOULD BE DEFINED IF EIS(KE11-E) HARDWARE IS AVAILABLE
;	ON THE SYSTEM WHERE THIS SOFTWARE IS TO BE USED. IF NOT DEFINED,
;	SUBROUTINES WHICH MIMIC THE REQUIRED FUNCTIONS OF THIS HARDWARE
;	ARE ASSEMBLED AND SUBSTITUTED.
;
;EAE	"EAE" SHOULD BE DEFINED IF EIS HARDWARE IS NOT AVAILABLE BUT
;	THE EAE IS.
;	NOTE: IF EAE HARDWARE IS AVAILABLE AND IS TO BE USED, THE 
;	      DEFAULT ADDRESSES ASSOCIATED WITH THE DEVICE ARE USED.
;	      IF YOUR "EAE" IS NOT INSTALLED AT THE NORMAL LOCATIONS
;	      THE DEFAULT ADDRESSES OF THE STATUS WORDS SHOULD BE
;	      MODIFIED TO REFLECT THIS DESCREPENCY BY REDEFINING "DIV"
;	      BY EDITING THIS FILE AND SETTING IT EQUAL TO THE STARTING
;	      ADDRESS OF THE STATUS WORDS ASSOCIATED WITH THE "EAE".



	;GLOBALS
	;	-EXTERNAL

	.GLOBL	FFT,$F.R

.IF	NDF,EIS
.IF	NDF,EAE
	.GLOBL $F.MUL
	NON=1
.ENDC
.ENDC

	;INTERNAL

	.GLOBL CORREL

	;REGISTER DEFINITIONS

	R0=%0
	R1=%1
	R2=%2
	R3=%3
	R4=%4
	R5=%5
	SP=%6
	PC=%7
.IF DF	EAE
	F.PROD=	AC
	F.MPLI=	MQ
	F.MCND=	MUL
	F.SHFT=	MUL+10
.ENDC
	.SBTTL	FORMAT OF CALL IS AS FOLLOWS
;
;	CALL CORREL(IERROR,N,IA1,IA2,IFFTA,ISCAL)
;	WHERE
;	IERROR IS AN INTEGER VALUE RETURNED BY THE SUBROUTINE TO 
;	       INDICATE A POSSIBLE ERROR CONDITION.
;	       = 0  => NO ERRORS
;	       = 1  => N IS LESS THAN OR EQUAL TO 8
;	       = 2  => N IS GREATER THAN F.MAXN(ASSEMBLY PARAMETER)
;	       = 3  => N IS NOT A POWER OF 2
;	       < 0  => NUMBER OF ARGUMENTS IS WRONG OR AN ARGUMENT IS
;		       DEFAULTED.
;       !!!NOTE:!!!
;		IF THIS ARGUMENT IS OMITTED A FATAL ERROR WILL OCCUR
;		AS AN M-TRAP OR IN FORTRAN ERR 62
;	N = THE NUMBER OF POINTS IN THE INTEGER ARRAYS "IA1" AND "IA2"
;	IA1 => AN INTEGER ARRAY OF LENGTH AT LEAST "N" CONTAINING
;	       THE SAMPLES FOR THE FIRST FUNCTION TO BE CORRELATED.
;	       *** ALSO UPON RETURNED, THIS ARRAY WILL CONTAIN THE RAW
;	       INTEGER ESTIMATE FOR THE CORRELATION FUNCTION. THIS DATA
;	       SHOULD BE SCALED(SEE "ISCALE") TO OBTAIN ACTUAL RESULTS.
;	IA2 => AN INTEGER ARRAY OF LENGTH AT LEAST "N" CONTAINING
;	       THE SAMPLES FOR THE SECOND FUNCTION TO BE CORRELATED WITH
;	       THE FIRST.  
;	NOTE: IF AUTO-CORRELLATION IS DESIRED, "IA1" SHOULD
;	      ALSO BE "IA2".
;	IFFTA => AN INTEGER ARRAY TO BE USED BY THE SUBROUTINE AS
;		 A STORAGE AREA FOR THE IMAGINARY RESULTS FROM THE 
;		 "FFT" SUBROUTINE(SEE CHAPTER 9). THE LENGTH OF THIS
;		 ARRAY DEPENDS ON WHETHER AUTO- OR CROSS-CORRELLATION
;		 IS DESIRED. THAT IS IF
;		 1)"IA1" = "IA2" THEN ARRAY "IFFTA" MUST BE
;		   AT LEAST OF LENGTH "N".
;		 2)"IA1" DOES NOT EQUAL "IA2", THEN ARRAY "FFTA"
;		   MUST BE AT LEAST OF LENGTH 2*"N".
;	ISCALE = IS THE POWER OF TWO(2), RETURNED BY THE SUBROUTINE,
;		 BY WHICH THE OUTPUT DATA MUST BE MULTIPLIED IN ORDER
;		 TO OBTAIN ACTUAL RESULTS
	.SBTTL	CORRELATION ENTRY AND INITIALIZATION

CORREL:	MOVB	@R5,R1		;CHECK FOR SOME ARGUMENTS
	BNE	SOME		;IF SOME, BRANCH
;  !!! NOTE INTENTIONAL M-TRAP IF FIRST ARG NOT PRESENT
TRAPER:	MOV	R0,1		;OTHERWISE, TRAP
;
SOME:	TST	(R5)+		;GET TO NEXT ENTRY
	MOV	#-1,R3		;NEED TO CHECK FOR DEFAULTED ARGUMENTS
	CMP	R3,@R5		;CHECK IF DEFAULTED
	BEQ	TRAPER		;IF DEFAUTED, GO M-TRAP
	MOV	@R5,C.ERR1	;STORE ADDRESS FOR ERROR RETURN
	MOV	(R5)+,C.ERR2	;DITTO
	MOV	R5,R0		;GET COPY OF ARG. LIST POINTER
	MOV	#5,R2		;STORE COUNT OF ARG. FOR ERROR INDICATOR
	CMP	R1,#6		;CHECK FOR CORRECT NO. OF ARGS
	BLT	14$		;IF NOT, EXIT WITH ERROR
	ADD	#12,R0		;POINT TO END OF LIST
13$:	CMP	R3,-(R0)	;CHECK EACH ARGUMENT FOR NO DEFAULT
	BNE	12$		;IF NOT DEFAULTED, BRANCH
14$:	COM	R2		;SET ERROR TO NEG. OF MISSING ARGUMENT
	MOV	R2,@C.ERR1	;SET ERROR INDICATOR
	RTS	PC		;OTHERWISE RETURN WITH ERROR
12$:	DEC	R2		;LOOP FOR 5 ARGS.
	BNE	13$
	MOV	@(R5)+,R0	;GET NO. OF POINTS
	MOV	R0,C.N		;SAVE NO. OF POINTS FOR FFT
	BGT	11$		;IF G.E. ZERO, BRANCH
	MOV	#1,@C.ERR1	;INDICATE ERROR
	RTS	PC		;AND RETURN
11$:	MOV	(R5)+,-(SP)	;GET FIRST ARRAY - SP WILL BE FLAG
	MOV	@SP,C.REP1	;STORE FIRST REAL ARRAY ADDRESS
	MOV	(R5)+,C.REP2	;GET SECOND ARRAY
	MOV	(R5)+,R1	;GET ADDRESS OF DUMMY ARRAY FOR FFT
				; THIS ARRAY IS USED FOR IMAG. PARTS
	MOV	R1,C.IMP1	;STORE ADDRESS FOR FIRST REAL ARRAY
	MOV	R1,R2		;PREPARE ADDRESS FOR 2ND REAL ARRAY
	SUB	C.REP2,(SP)	;CHECK FOR AUTO-CORRELATION
	BEQ	2$		;IF AUTO-CORRELATION, BRANCH
	ADD	R0,R2		;POINT TO HALF POINT IN DUMMY ARRAY
	ADD	R0,R2		; BY ADDING WORD COUNT TWICE
2$:	MOV	R2,C.IMP2	;GET SECOND SCRATCH AREA
				;CLEAR IMAG1 TWICE.
C.CLR1:	CLR	(R1)+
	CLR	(R2)+
	DEC	R0
	BNE	C.CLR1

NORMAL:	MOV	@R5,C.SCLF	;GET ADDRESS OF SCALE FACTOR
	MOV	#-16.,@(R5)+	;NUMBERS WILL BE SCALED BY
				;  2**16
	MOV	#15.,R4		;PREPARE SCALE FACTOR
	MOV	C.REP1,R1	;GET ADDRESS OF REAL ARRAY
	INC	R0		;SET INITIAL TEST FOR MAXIMUM
	JSR	PC,CHECKH	;CHECK FOR HIGHEST
	TST	(SP)		;CHECK FOR AUTO CROSS
	BEQ	3$		;IF AUTO, SKIP CHECK FOR HIGH IN ARRAY2
	MOV	C.REP2,R1	;OTHERWISE CHECK ARRAY 2
	JSR	PC,CHECKH	;CHECK FOR HIGHEST IN ARRAY 2
3$:	MOV	C.REP1,R0
	MOV	C.REP2,R1
	ASL	R4		;SCALING FOR BOTH ARRAYS
	ADD	R4,@C.SCLF	;UPDATE CURRENT SCALE FACTOR
	ASR	R4		;RESTORE SCALE FACTOR/ARRAY
	MOV	C.N,R2		;GET BUFFER LENGTH
	DEC	R4		;SET COUNT FOR SHIFT COUNT IN "SCALE"
	TST	(SP)		;TEST FOR CROSS CORRELATION
	BNE	5$		;BRANCH IF CROSS CORRELATION
	ADD	R2,R1		;IF AUTO, DIVIDE ARRAY IN HALF
	ASR	R2		; AND NO. OF POINTS FOR SCALING
5$:	MOV	R4,R3		;USE NO. OF SHIFTS MINUS ONE AS COUNT
	BEQ	7$		;IF ONLY ONE SHIFT, BRANCH
6$:	ASL	(R0)		;SHIFT REAL
	ASL	(R1)		; AND THEN IMAGINARY PARTS
	DEC	R3		;LOOP THROUGH SHIFTS
	BNE	6$
7$:	ASL	(R0)+		;LAST SHIFT ON ARRAYS DONE HERE TO 
	ASL	(R1)+		; UPDATE ADDRESS ALSO
	DEC	R2		;IS WHOLE ARRAY DONE
	BNE	5$		;IF NOT, DO AGAIN
NONORM:	CLR	(PC)+		;INDICATE FORWARD TRANSFORM
C.INVF:	.WORD	0

	.SBTTL	CORRELATION FFT CALLS

;PERFORM TRANSFORM ON BUFFER 1

C.FF1:	MOV	#FFT1,R5	;GET ADDRESS OF ADDRESSES FOR FFT
	JSR	PC,FFT		;DO FFT ON FIRST ARRAY
	TST	@C.ERR1		;TEST FOR FFT ERROR
	BEQ	C.CON1
	TST	(SP)+		;POP STACK
	RTS	PC		;AND RETURN
C.CON1:	MOV	$F.R,R1		;R1 = LOG2(# POINTS)-2
	CMPB	(R1)+,(R1)+	;R1 = LOG2(# POINTS)
	ASL	R1		;R1 = 2*LOG2(# POINTS) = "INTSF"
	SUB	(PC)+,R1	;R1 = "INTSF"-SCL1
C.SCAL:	.WORD	0
	ADD	R1,@(PC)+	;ADD AMOUNT NEEDED TO NORMALIZE
C.SCLF:	.WORD 0			; SCALE FACTOR 
	TST	(SP)		;AUTO OR CROSS CORRELATION?
	BEQ	C.CRSP		;BR IF AUTO

;PERFORM TRANSFORM ON BUFFER 2

	MOV	#FFT2,R5
	JSR	PC,FFT		;DO SECOND FFT

;SINCE FFT TYPE ERRORS ARE FOUND IN THE CALL ABOVE, NO TEST
;IS NEEDED HERE.

	SUB	C.SCAL,@C.SCLF	;SF = NORM.SHIFT+"INTSF"-SCL1-SCL2

	.SBTTL	COMPUTATION OF CROSS POWER SPECTRUM - EAE VERSION
;CROSS POWER SPECTRUM OF COMPLEX FREQUENCY DOMAIN BUFFERS
;"A" (S1=REAL, S3=IMAG) AND "B" (S2=REAL, S4=IMAG) YIELDS "C"
;(S1=REAL, S2=IMAG).
;REAL(C) = REAL(A)*REAL(B) + IMAG(A)*IMAG(B)
;IMAG(C) = IMAG(A)*REAL(B) - REAL(A)*IMAG(B)

C.CRSP:	MOV	C.REP1,R0
	MOV	C.IMP1,R1
	MOV	C.REP2,R2
	MOV	C.IMP2,R3
	MOV	C.N,(PC)+	;SET TEMP COUNT
C.TMPN:	.WORD 0
	MOV	(SP)+,(PC)+	;STORE AUTO/CROSS SWITCH
C.SWIT:	0
	BNE	C.CSP1		;BR IF CROSS CORRELATION
	MOV	R0,R2		;C.REP1 REPLACED C.REP2
	MOV	R1,R3		;C.IMP1 REPLACES C.IMP2
	SUB	C.SCAL,@C.SCLF	;SCLF = NORM.FACTOR+"INTSF"-SCL1-SCL1
C.CSP1:	.IF	DF,EAE
	MOV	#F.MPLI,R4	;EAE HARDWARE ADDRESSES
	MOV	#F.PROD,R5
	MOV	(R0),(R4)+	;MPLI=REAL(A)
	MOV	(R2),(R4)	;MCND=REAL(B)
	MOV	(R5),(PC)+	;TMPR=REAL(A)*REAL(B)
C.TMPR:	0			;TEMPORARY FOR REAL PART OF XPROD
	MOV	(R1),-(R4)	;MPLI=IMAG(A)
	MOV	(R3),@#F.MCND	;MCND=IMAG(B)
	ADD	(R5),C.TMPR	;TMPR=REAL(A)*REAL(B)+IMAG(A)*IMAG(B)
	BVS	C.OFLO		;GO SCALE IF OVERFLOW
	MOV	(R1),(R4)+	;MPLI=IMAG(A)
	MOV	(R2),(R4)	;MCND=REAL(B)
	MOV	(R5),(PC)+	;TMPI=IMAG(A)*REAL(B)
C.TMPI:	0			;TEMPORARY FOR IMAG PART OF XPROD
	MOV	(R0),-(R4)	;MPLI=REAL(A)
	MOV	(R3),@#F.MCND	;MCND=IMAG(B)
	SUB	(R5),C.TMPI	;TMPI=IMAG(A)*REAL(B)-REAL(A)*IMAG(B)
	BVS	C.OFLO		;GO SCALE IF OVERFLOW
	MOV	C.TMPR,(R0)+	;STORE XPROD IN S1 AND S2
	MOV	C.TMPI,(R1)+	;AND INCREMENT POINTERS
	CMP	(R2)+,(R3)+
	DEC	C.TMPN		;ARE WE DONE?
	BNE	C.CSP1		;BR IF MORE TO DO
	.ENDC

	.SBTTL	DITTO - EIS VERSION

	.IF	DF,EIS
	MOV	(R0),R4		;MPLI=REAL(A)
	MUL	(R2),R4		;MCND=REAL(B)
	MOV	R4,(PC)+	;TMPR=REAL(A)*REAL(B)
C.TMPR:	0
	MOV	(R1),R4		;MPLI=IMAG(A)
	MUL	(R3),R4		;MCND=IMAG(B)
	ADD	R4,C.TMPR	;TMPR=REAL(A)*REAL(B)+IMAG(A)*IMAG(B)
	BVS	C.OFLO		;GO SCALE IF OVERFLOW
	MOV	(R1),R4		;MPLI=IMAG(A)
	MUL	(R2),R4		;MCND=REAL(B)
	MOV	R4,(PC)+	;TMPI=IMAG(A)*REAL(B)
C.TMPI:	0
	MOV	(R0),R4		;MPLI=REAL(A)
	MUL	(R3),R4		;MCND=IMAG(B)
	SUB	R4,C.TMPI	;TMPI=IMAG(A)*REAL(B)-REAL(A)*IMAG(B)
	BVS	C.OFLO		;SCALE IF OVERFLOW
	MOV	C.TMPR,(R0)+	;STORE XPROD IN SI & SJ OR SK IF XCORR
	MOV	C.TMPI,(R1)+	;AND INCREMENT POINTERS
	CMP	(R2)+,(R3)+
	DEC	C.TMPN		;ARE WE DONE?
	BNE	C.CSP1		;BR IF MORE TO DO
	.ENDC

	.SBTTL	DITTO - NON VERSION

	.IF	DF,NON
	MOV	R2,-(SP)	;MULTIPLY SUBR ZAPS R2-R5
	MOV	R3,-(SP)
	MOV	(R2),(PC)+	;REAL(B)
C.BR:	0
	MOV	(R3),(PC)+	;IMAG(B)
C.BI:	0
	MOV	(R0),R4		;MPLI=REAL(A)
	MOV	C.BR,R5		;MCND=REAL(B)
	JSR	PC,$F.MUL
	ASR	R3
	MOV	R3,(PC)+	;TMPR=REAL(A)*REAL(B)
C.TMPR:	0
	MOV	(R1),R4		;MPLI=IMAG(A)
	MOV	C.BI,R5		;MCND=IMAG(B)
	JSR	PC,$F.MUL
	ASR	R3
	ADD	R3,C.TMPR	;TMPR=REAL(A)*REAL(B)+IMAG(A)*IMAG(B)
	BVS	C.OFLO		;SCALE IF OVERFLOW
	MOV	(R1),R4		;MPLI=IMAG(A)
	MOV	C.BR,R5		;MCND=REAL(B)
	JSR	PC,$F.MUL
	ASR	R3
	MOV	R3,(PC)+	;TMPI=IMAG(A)*REAL(B)
C.TMPI:	0
	MOV	(R0),R4		;MPLI=REAL(A)
	MOV	C.BI,R5		;MCND=IMAG(B)
	JSR	PC,$F.MUL
	ASR	R3
	SUB	R3,C.TMPI	;TMPI=IMAG(A)*REAL(B)-REAL(A)*IMAG(B)
	BVS	C.OFLO		;SCALE IF OVERFLOW
	MOV	(SP)+,R3	;RESTORE POINTERS
	MOV	(SP)+,R2
	MOV	C.TMPR,(R0)+	;STORE XPROD IN SI & SJ OR SK IF XCORR
	MOV	C.TMPI,(R1)+	;AND INCREMENT POINTERS
	CMP	(R2)+,(R3)+
	DEC	C.TMPN		;ARE WE DONE?
	BNE	C.CSP1
	.ENDC

	.SBTTL	COMPUTE CORRELATION COEFFICIENTS

	INC	C.INVF		;SET FOR INVERSE TRANSFORM
	MOV	#FFT1,R5
	JSR	PC,FFT		;PRODUCE AUTO- OR CROSSCORRELATION

;NO FFT ERROR CHECKING IS DONE HERE SINCE FFT TYPE ERRORS WOULD
;HAVE BEEN DETECTED IN THE FIRST CALL.

	SUB	C.SCAL,@C.SCLF	;SCLF=SCLF-SCL1(FROM FFT)
	NEG	@C.SCLF		;SCLF=-SCLF

	RTS	PC		;RETURN FROM WHENCE WE CAME.

	.SBTTL	SCALING ROUTINE

C.OFLO:	.IF	DF,NON
	MOV	(SP)+,R3	;RESTORE POINTERS
	MOV	(SP)+,R2
	.ENDC
	SUB	#2,@C.SCLF	;UPDATE THE SCALE FACTOR
	MOV	C.REP1,R4
	MOV	C.IMP1,R5
	MOV	C.N,-(SP)	;TOTAL NUMBER OF POINTS
	SUB	C.TMPN,(SP)	;MINUS NUMBER LEFT TO SQ & SUM
	BEQ	C.OFL2		;BR IF OVERFLOW ON FIRST POINTS
C.OFL1:	ASR	(R4)		;SCALE THE CROSS PRODUCTS
	ASR	(R4)+		;ALREADY CALCULATED
	TST	C.SWIT		;AUTO OR CROSS CORR?
	BEQ	C.OFL4		;BR IF AUTO
	ASR	(R5)
	ASR	(R5)+
C.OFL4:	DEC	(SP)		;REDUCE NUMBER OF XPRODS REMAINING
	BNE	C.OFL1		;BR IF MORE TO GO

;SCALE REMAINING FREQUENCY DOMAIN

C.OFL2:	MOV	R2,(SP)		;TOP OF STACK IS TEMPORARY
	MOV	R3,-(SP)	;WE NEED REGISTERS 2 & 3
	MOV	C.TMPN,-(SP)	;AGAIN TOP OF STACK IS TEMP
C.OFL3:	ASR	(R2)+
	ASR	(R3)+
	TST	C.SWIT		;AUTO OR CROSS CORR?
	BEQ	C.OFL5		;BR IF AUTO
	ASR	(R4)+
	ASR	(R5)+
C.OFL5:	DEC	(SP)
	BNE	C.OFL3
	TST	(SP)+		;CLEAR TEMPORARY OFF STACK
	MOV	(SP)+,R3	;RESTORE POINTERS IN R1 & R3
	MOV	(SP)+,R2
	BR	C.CSP1

;ROUTINE TO CHECK FOR HIGHEST NUMBERS

CHECKH:	MOV	(PC)+,R3	;GET ARRAY LENGTH
C.N:	.WORD 0
1$:	MOV	(R1)+,R2	;GET NEXT VALUE
	BGE	2$		;IF POSITIVE, BRANCH
	NEG	R2		;OTHERWISE MAKE POSITIVE
2$:	CMP	R0,R2		;CHECK FOR HIGHER VALUE
	BHI	3$		;IF TESTER "R0" IS HIGHER, BRANCH
	DEC	R4		;INC POWER OF TWO SCALE FACTOR
	ASL	R0		;OTHERWISE, DOUBLE TESTER
	BPL	2$		;IF NOT MAXIMUM, TEST AGAIN
	TST	(SP)+		;IF MAXIMUM, NUMBERS ALREADY NORMALIZE
	JMP	NONORM		; SO FIX UP STACK, AND CONTINUE
3$:	DEC	R3		;LOOP TILL DONE ARRAY
	BNE	1$
	RTS	PC		;AND THEN LEAVE

;CORRELATION DATA AREA
;FFT TABLE FOR COMPLEX ARRAY A

FFT1:	6	;NO. OF ELEMENTS IN CALL
C.ERR1: 0
C.N1:	C.N	;NUMBER OF POINTS
C.REP1:	0	;POINTER TO REAL(A)
C.IMP1:	0	;POINTER TO IMAG(A)
C.INV1:	C.INVF	;DIRECTION OF TRANSFORM
C.SCL1:	C.SCAL	;SCALE FACTOR COMPUTED BY FFTC
;TABLE FOR COMPLEX ARRAY B

FFT2:	6	;NO. OF ELEMENTS IN CALL TO FFT
C.ERR2:	0
C.N2:	C.N
C.REP2:	0
C.IMP2:	0
C.INV2:	C.INVF
C.SCL2:	C.SCAL

	.END