FUNCTION SMOOTH9(VAR INPUT_VECTOR,
			SMOOTHED	: REAL_ARRAY;
			N		: INTEGER)	: BOOLEAN;

{ COMMENT :	PERFORMS A NINE-POINT DIGITAL SMOOTHING ON THE DATA IN
  THE INPUT ARRAY CORRESPONDING TO "INPUT_VECTOR".
		THE SMOOTHED DATA ARE RETURNED IN THE ARRAY CORRESPONDING 
  TO "SMOOTHED" . IT IS POSSIBLE , WHEN USING THIS PROCEDURE , TO HAVE THE 
  SMOOTHED DATA RETURNED IN THE SAME ARRAY THEY WERE TRANSMITTED IN . THIS
  WOULD SAVE MEMORY SPACE :- A GOOD IDEA ...IF THE RAW DATA ARE EXPENDABLE.
		IF THE FUNCTION IS CALLED WITH N < 10 IT RETURNS FALSE.
		THE BOOLEAN VARIABLE OR CONSTANT "SUCCESSFUL" IS ASSUMED TO 
  BE DECLARED AT A MORE GLOBAL LEVEL AND EQUATED TO TRUE.                    }

{ WRITTEN BY G.M.ACLAND : UNIVERSITY OF PENNSYLVANIA.
  (BASED ON A SPARSE 9X9 MATRIX POINTED OUT TO ME BY MARTIN PRING.)          }

VAR
	INDEX#,OFFSET	: INTEGER;
	SUM1,SUM2,TEMP	: REAL;

BEGIN
IF N<10 THEN SMOOTH9 := NOT SUCCESSFUL ELSE BEGIN
 SMOOTH9 := SUCCESSFUL;
 FOR INDEX# := 5 TO (N-4) DO BEGIN
  SUM1 := 0;
  SUM2 := 0;
  FOR OFFSET := -4 T0 4 DO BEGIN
   TEMP := INPUT_VECTOR[INDEX# + OFFSET];
   SUM1 := SUM1 + TEMP;
   SUM2 := SUM2 + TEMP * SQR(OFFSET);
   END; { OF : FOR OFFSET ... }
  SMOOTHED[INDEX#] := ((11.8 * SUM1) - SUM2 )/46.2;
  END;  { OF : FOR INDEX# ... }
 FOR OFFSET := 1 TO 4 DO BEGIN
  SMOOTHED[OFFSET] 	     := INPUT_VECTOR[OFFSET];
  SMOOTHED[(N - OFFSET + 1)] := INPUT_VECTOR[(N - OFFSET +1)];
  END;  { OF : FOR OFFSET ... }
 END;   { OF : IF N..THEN..ELSE..}
END;    { OF : FUNCTION SMOOTH9  }

