CTITLESAFXINA -- SPATIAL PREDICTION DRIVER ROUTINE 00010008 C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** CA AUTHOR D CORRIGAN 00020000 CA DESIGNER D CORRIGAN 00030000 CA LANGUAGE FORTRAN 77 00040000 CA SYSTEM IBM (SEE CRAY) 00050000 CA WRITTEN AUGUST 1988 00060000 C REVISED 11/14/88 CAD REPLACED CALL FROM SNAXPY TO 00070000 C SASNXPY. ADDED SASNXPY SUBROUTINE00080000 C REVISED 01-15-89 JJC FOR SPARC PRODUCTION. 00090000 C REVISED 02-28-89 JJC CHANGED BACK TO ESSL SNAXPY DUE 00100000 C TO BAD PERFORMANCE IN MATHADV. 00110000 C REVISED 08-22-90 ESN INITIALIZE H0 TO 0.0. 00120000 C REVISED 10-15-90 DC REVISE TO INCLUDE 2 TO 1 00130000 C INTERPLOATION IN ADDITION TO 00140000 C THE SPATIAL PREDICTION 00150000 C REVISED 02-10-92 JJC RENAMED SAFXIN1 TO SAFXINA. 00160009 C RENAMED SAFXIN2 TO SAFXINB. 00170008 CA 00180000 CA CALL SAFXINA (D,N,NX,LX,WNF,OSW,R,C,H,A,B,Y,F,G,OP,LOP ) 00190009 CA 00200009 CA ARGUMENTS : 00210009 CA 00220009 CA D INPUT/OUTPUT - DATA FOR A SINGLE FREQUENCY 00230009 CA N OUTPUT - INTERPOLATED TRACES 00240009 CA NX INPUT - NUMBER OF TRACES IN DESIGN GATE 00250009 CA LX INPUT - NUMBER OF TRACES IN SPATIAL FILTER 00260009 CA WNF INPUT - WHITE NOISE FACTOR 00270009 CDC OSW INPUT - OUTPUT SWITCH: 00280003 CDC = 0 - ORIGINAL TRACES REPLACED BY 00290003 CDC FXDECON OUTPUT 00300003 CDC = 1 - LEAVE INPUT TRACES UNCHANGED 00310003 CA R INPUT/OUTPUT - AUTO CORRELATIONS 00320009 CA C INPUT/OUTPUT - CROSS CORRELATIONS 00330009 CA H INPUT - FILTER 00340009 CA A INPUT - ARRAY FOR INTERMEDIATE RESULTS 00350009 CA B INPUT - ARRAY FOR INTERMEDIATE RESULTS 00360009 CA Y INPUT - ARRAY FOR INTERMEDIATE RESULTS 00370009 CA Y INPUT - ARRAY FOR INTERMEDIATE RESULTS 00380009 CA Y INPUT - ARRAY FOR INTERMEDIATE RESULTS 00390009 CA F OUTPUT - FILTER 00400009 CA G OUTPUT - FILTER 00410009 CA OP INPUT - INTERPOLATION OPERATOR 00420009 CA LOP INPUT - LENGTH OF OP 00430009 CA 00440009 CA THIS ROUTINE PERFORMS SPATIAL PREDICTION FILTER OPERATIONS 00450009 CA MAIN ENGINE FOR SPATIAL PREDICTION 00460009 CA 00470009 CA SUBROUTINES CALLED : 00480009 CA SAFXCC5 00490009 CA SAFXINB 00500009 CA SACLEVN 00510009 CA CCOPY (IBM ESSL ROUTINE) 00520009 CA SASNXPY 00530009 CA 00540009 C 00550000 SUBROUTINE SAFXINA( D,N,NX,LX,WNF,OSW,R,C,H,A,B,Y,F,G,OP,LOP ) 00560008 C 00570000 IMPLICIT INTEGER (A-Z) 00580000 C 00590000 COMPLEX D(1),N(1) 00600000 COMPLEX R(1),C(1) 00610000 COMPLEX H(1) 00620000 COMPLEX H0 00630000 COMPLEX ZERO 00640000 REAL A(1),B(1) 00650000 REAL Y(1) 00660000 REAL F(1) 00670000 REAL G(1) 00680000 REAL OP(1) 00690000 REAL WNF 00700000 REAL OSW 00710003 C 00720000 DATA ZERO/(0.,0.)/ 00730000 C 00740000 C INITIALIZE 00750000 C 00760000 MX = LX - 1 00770000 MH = MX/2 00780000 NM = NX + MX 00790000 IS = 1 + MH 00800000 C 00810000 C AUTO/CROSS CORRELATIONS 00820000 C 00830000 CALL SAFXCC5(D(IS),NX,LX,R,C,A,B) 00840000 R(1) = WNF*R(1) 00850003 C 00860000 C PREDICTION OPERATOR 00870000 C 00880000 IF( OSW.EQ.0. ) THEN 00890003 CALL SACLEVN(LX,R,C,H,A,B) 00900000 C 00910000 C SCALE FILTER 00920000 C 00930000 IR = 1 00940000 CJJ 00950000 H0 = 0.0 00960000 IF (H(1+MH) .NE. 0) H0 = 1./H(1+MH) 00970000 C 00980000 DO 100 IH = 1,LX 00990000 II = IR + 1 01000000 H(IH) = H0*H(IH) 01010000 F(IR) = REAL(H(IH)) 01020000 F(II) = AIMAG(H(IH)) 01030000 100 IR = IR + 2 01040000 ENDIF 01050003 C 01060000 C NOW THE INTERPOLATOR 01070000 C 01080000 CALL SAFXINB( LX,R,C,A,B,OP,LOP ) 01090008 CALL SACLEVN(MX,R,C,H,A,B) 01100000 C 01110000 IR = 1 01120000 II = 2 01130000 G(IR) = 0. 01140000 G(II) = 0. 01150000 IR = IR + 2 01160000 DO 150 IH = 1,MX 01170001 II = IR + 1 01180000 G(IR) = REAL(H(IH)) 01190000 G(II) = AIMAG(H(IH)) 01200000 150 IR = IR + 2 01210001 C 01220000 C COMPLEX FILTER OPERATION 01230000 C MOVE DATA TO BE FILTERED TO B 01240000 C 01250000 CALL CCOPY( NX+MX,D,1,B,1 ) 01260000 IR = 1 01270000 II = 2 01280000 IF( OSW.EQ.0. ) THEN 01290003 CALL CCOPY( NX,ZERO,0,A,1 ) 01300003 CALL SNAXPY( LX,NX,F(IR),2,B(II),2,2,A(II),2,0 ) 01310000 CALL SNAXPY( LX,NX,F(II),2,B(IR),2,2,A(II),2,0 ) 01320000 CALL SNAXPY( LX,NX,F(IR),2,B(IR),2,2,A(IR),2,0 ) 01330000 ENDIF 01340003 CALL CCOPY( NX,ZERO,0,Y,1 ) 01350003 CALL SNAXPY( LX,NX,G(IR),2,B(II),2,2,Y(II),2,0 ) 01360000 CALL SNAXPY( LX,NX,G(II),2,B(IR),2,2,Y(II),2,0 ) 01370000 CALL SNAXPY( LX,NX,G(IR),2,B(IR),2,2,Y(IR),2,0 ) 01380000 C 01390000 JF1 = II 01400000 JF2 = II + 2*LX - 2 01410000 DO 200 JF = JF1,JF2,2 01420000 F(JF) = - F(JF) 01430000 200 G(JF) = - G(JF) 01440000 C 01450000 CALL SNAXPY( LX,NX,G(II),2,B(II),2,2,Y(IR),2,0 ) 01460003 C 01470003 IF( OSW.EQ.0. ) THEN 01480003 CALL SNAXPY( LX,NX,F(II),2,B(II),2,2,A(IR),2,0 ) 01490000 C 01500003 C OUTPUT: 01510003 C WHEN OSW = 0, 01520003 C REPLACE D BY D - N 01530003 C 01540003 CALL CCOPY( NX,A,1,N,1 ) 01550003 DO 300 I = 1,NX 01560003 300 D(I) = D(I+MH) - N(I) 01570003 ELSE 01580003 C 01590003 C OTHERWISE, 01600003 C LEAVE INPUT ALONE 01610003 C 01620003 DO 400 I = 1,NX 01630003 400 D(I) = D(I+MH) 01640003 ENDIF 01650003 C 01660000 C OUTPUT: 01670000 C IN ANY CASE, 01680003 C PUT INTERPOLATED ARRAY IN N 01690000 C 01700003 CALL CCOPY( NX,Y,1,N,1 ) 01710000 C 01720000 C 01730000 C ---------------------------------------------------------------------01740000 C 01750000 RETURN 01760000 END 01770000