Procedure COSFT(var Y:array of real; N, ISIGN:integer); var THETA,WR,WI,WPR,SUM,WTEMP,Y1,Y2,WPI,EVEN,ODD,ENF0,SUM0,SUME:real; I,J,M,JJ:integer; begin THETA:=3.14159265358979 / N; WR:=1; WI:=0; WPR:=-2 * Sqr(Sin(0.5 * THETA)); WPI:=Sin(THETA); Sum:=Y[1]; M:=N div 2; For J:=1 To M - 1 do begin WTEMP:=WR; WR:=WR * WPR - WI * WPI + WR; WI:=WI * WPR + WTEMP * WPI + WI; Y1:=0.5 * (Y[J + 1] + Y[N - J + 1]); Y2:=(Y[J + 1] - Y[N - J + 1]); Y[J + 1]:=Y1 - WI * Y2; Y[N - J + 1]:=Y1 + WI * Y2; Sum:=Sum + WR * Y2; end; REALFT(Y, M, 1); Y[2]:=Sum; For JJ:=2 To M do begin J:=2*JJ; Sum:=Sum + Y[J]; Y[J]:=Sum; end; If ISIGN = -1 Then begin EVEN:=Y[1]; ODD:=Y[2]; For JJ:=1 To M -1 do begin I:=2*JJ + 1; EVEN:=EVEN + Y[I]; ODD:=ODD + Y[I + 1]; end; ENF0:=2 * (EVEN - ODD); SUM0:=Y[1] - ENF0; SUME:=(2 * ODD / N) - SUM0; Y[1]:=0.5 * ENF0; Y[2]:=Y[2] - SUME; For JJ:=1 To M -1 do begin I:=2 * JJ + 1; Y[I]:=Y[I] - SUM0; Y[I + 1]:=Y[I + 1] - SUME; end; end; end;