CTITLEMWRINT -- COMPUTES REAL SIGNALS AT FRACTIONAL DISTANCE 00010001 C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** CA AUTHOR C. J. SICKING 00020001 CA DESIGNER C. J. SICKING 00030001 CA LANGUAGE FORTRAN 00040001 CA SYSTEM IBM AND CRAY 00050001 CA WRITTEN SEPTEMBER, 1980 00060001 C REVISED 03-05-82 ESN. FOR THE CRAY. 00070001 CA 00080001 CA 00090001 CA CALL MWRINT (SIGNAL, NSAMP, IN, FRAC, LFLTR, COEF, ANS) 00100000 CA 00110001 CA IN/OUT ARGUMENT TYPE DESCRIPTION 00120001 CA 00130001 CA IN SIGNAL R4 SIGNAL ARRAY 00140001 CA IN NSAMP I4 NUMBER OF SAMPLES IN SIGNAL 00150001 CA IN IN I4 SAMPLE DESIRED IS BETWEEN SAMPLES IN AND 00160001 CA IN + 1 IN SIGNAL ARRAY 00170001 CA IN FRAC R4 FRACTIONAL DISTANCE BETWEEN IN AND IN+1 00180001 CA IN LFLTR I4 NUMBER OF COEFFICIENTS IN FILTERS 00190001 CA IN COEF R4 FILTER ARRAY 00200000 CA OUT ANS R4 INTERPOLATED RESULT 00210001 CA 00220001 CA 00230001 CA MWRINT COMPUTES THE VALUE OF A REAL SIGNAL AT A FRACTIONAL 00240001 CA DISTANCE BETWEEN SAMPLES USING THE WIENER FILTER COMPUTED 00250001 CA BY MCOFGN. 00260001 CA 00270001 C 00280001 C 00290001 SUBROUTINE MWRINT (SIGNAL, NSAMP, IN, FRAC, LFLTR, COEF, ANS) 00300000 C 00310001 REAL COEF (LFLTR, 99) 00320001 REAL SIGNAL ( NSAMP) 00330001 C 00340001 C ROUND FRAC TO THE NEAREST 0.01 AND MULTIPLY BY 100 TO OBTAIN THE 00350001 C INDEX TO THE COEF ARRAY. 00360001 C 00370001 TEM = FRAC * 100.0 + 0.5 00380001 LCN = TEM 00390001 C 00400000 C IF LCN IS 0 OR 100 SET VALUE TO NEAREST SAMPLE AND RETURN. 00410001 C 00420001 IF (LCN .NE. 0) GO TO 10 00430001 ANS = SIGNAL(IN) 00440001 GO TO 60 00450001 C 00460001 10 IF (LCN .NE. 100) GO TO 20 00470001 ANS = SIGNAL(IN+1) 00480001 GO TO 60 00490001 C 00500000 C APPLY THE FILTER AT INDEX LCN AFTER CHECKING FOR END PROBLEMS. 00510001 C IB AND IE ARE THE FIRST AND LAST INDICES TO THE Y ARRAY SUCH THAT 00520001 C THE FILTER OF LENGTH LR OVERLAYS THE SAMPLES IN Y FROM IB TO IE. 00530001 C IF THE DESIRED SAMPLE IS CLOSE ENOUGH TO THE END OF THE ARRAY 00540001 C SO THAT THE FILTER WILL RUN OFF THE END OF Y, THE RESULT OF THE 00550001 C FILTER APPLICATION IS COMPOSED OF CONTRIBUTIONS FROM ONLY THOSE 00560001 C VALUES THAT ARE WITHIN THE ARRAY Y. THIS MEANS THAT INTERPOLATED 00570001 C VALUES VERY NEAR THE END OF Y WILL BE SOMEWHAT DEGRADED. 00580001 C 00590001 20 IB = IN - ((LFLTR / 2) - 1) 00600000 IF (IB .LT. 1) GO TO 30 00610001 J = 1 00620001 GO TO 40 00630001 C 00640001 30 IB = 1 00650001 J = (LFLTR / 2) + 1 - IN 00660001 C 00670001 40 IE = IN + LFLTR / 2 00680001 IF (IE .GT. NSAMP) IE = NSAMP 00690001 C 00700000 C DOT PRODUCT OF THE FILTER WITH THE ARRAY Y TO COMPUTE THE RESULT. 00710001 C 00720001 ANS = 0.0 00730001 C 00740001 DO 50 I = IB, IE 00750001 ANS = ANS + SIGNAL(I) * COEF(J, LCN) 00760001 C 00770001 50 J = J + 1 00780001 C 00790001 60 RETURN 00800000 END 00810001