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