{FOURIER.TLD Prozeduren und Funktionen : procedure fourier_analysis(y : RealArrayType_TL; var a,b : RealArrayType_TL; n : integer); function fourier_synthesis(x : real; a,b : RealArrayType_TL; n : integer; min,max : real) : real; } procedure fourier_analysis(y : RealArrayType_TL; var a,b : RealArrayType_TL; n : integer); var dummy,u0,u1,u2,coeff,c0,s0,c,s:real; i,k:integer; begin n:=pred(n); coeff:=2.0/n; c0:=cos(coeff*pi); s0:=sin(coeff*pi); c:=1.0;s:=0.0; for k:=0 to pred(n) div 2 do begin u1:=0.0;u2:=0.0; for i:=pred(n) downto 1 do begin u0:=y[succ(i)]+2.0*c*u1-u2; u2:=u1; u1:=u0; end; a[succ(k)]:=coeff*(y[1]+c*u1-u2); b[succ(k)]:=coeff*s*u1; dummy:=c*c0-s*s0; s:=s*c0+c*s0; c:=dummy; end; a[1]:=a[1]/2.0; end; function fourier_synthesis(x : real; a,b : RealArrayType_TL; n : integer; min,max : real) : real; var i:integer; sum:real; begin if (min<0.0) or (max>2.0*pi) then x:=(x-min)/(max-min)*2.0*pi; sum:=0; for i:=2 to n div 2 do sum:=sum+a[i]*cos(pred(i)*x)+b[i]*sin(pred(i)*x); fourier_synthesis:=sum+a[1]/2.0; end;