Procedure CONVLV(DATA:array of real; N:integer; RESPNS:array of real; M:integer; ISIGN:integer;var ANS:array of real); var FFT:array[0..32] of real; I,NO2:integer; DUM1,DUM,DUM2,ANS1:real; begin For I:=1 To ((M - 1) div 2) do RESPNS[N + 1 - I]:=RESPNS[M + 1 - I]; For I:= (M + 3) div 2 To N - (M - 1) div 2 do RESPNS[I]:=0; TWOFFT(DATA, RESPNS, FFT, ANS, N); NO2:= N div 2; For I:=1 To NO2 + 1 do begin If ISIGN = 1 Then begin DUM:=ANS[2 * I - 1]; DUM1:=FFT[2 * I - 1] * DUM - FFT[2 * I] * ANS[2 * I]; ANS[2 * I - 1]:=DUM1 / NO2; DUM2:=FFT[2 * I - 1] * ANS[2 * I] + FFT[2 * I] * DUM; ANS[2 * I]:=DUM2 / NO2; end else if ISIGN = -1 Then begin If (DUM = 0) And (ANS[2 * I] = 0) Then begin ShowMessage('deconvolving at a response zero'); Exit; End; ANS1:=FFT[2 * I - 1] * DUM + FFT[2 * I] * ANS[2 * I]; DUM1:=DUM * DUM + ANS[2 * I] * ANS[2 * I]; ANS[2 * I - 1]:=ANS1 / DUM1 / NO2; ANS1:=FFT[2 * I] * DUM - FFT[2 * I - 1] * ANS[2 * I]; DUM2:=DUM * DUM + ANS[2 * I] * ANS[2 * I]; ANS[2 * I]:=ANS1 / DUM2 / NO2; end else Showmessage(' no meaning for ISIGN'); end; ANS[2]:=ANS[2 * NO2 + 1]; REALFT(ANS, NO2, -1); end;