realft.pas

来自「Delphi Pascal 数据挖掘领域算法包 数值算法大全」· PAS 代码 · 共 56 行

PAS
56
字号
PROCEDURE realft(VAR data: gldarray; n,isign: integer);
(* Programs using routine REALFT must define the type
TYPE
   gldarray = ARRAY [1..2*n] OF real;
where 2*n is the dimension of the input data array. When
routine FOUR1 is used with REALFT, its data type 'gldarray'
should be set as in this program. *)
VAR
   wr,wi,wpr,wpi,wtemp,theta: double;
   i,i1,i2,i3,i4: integer;
   c1,c2,h1r,h1i,h2r,h2i,wrs,wis: real;
BEGIN
   theta := 6.28318530717959/(2.0*n);
   c1 := 0.5;
   IF (isign = 1) THEN BEGIN
      c2 := -0.5;
      four1(data,n,1);
   END ELSE BEGIN
      c2 := 0.5;
      theta := -theta;
   END;
   wpr := -2.0*sqr(sin(0.5*theta));
   wpi := sin(theta);
   wr := 1.0+wpr;
   wi := wpi;
   FOR i := 2 TO (n DIV 2)+1 DO BEGIN
      i1 := i+i-1;
      i2 := i1+1;
      i3 := n+n+3-i2;
      i4 := i3+1;
      wrs := sngl(wr);
      wis := sngl(wi);
      h1r := c1*(data[i1]+data[i3]);
      h1i := c1*(data[i2]-data[i4]);
      h2r := -c2*(data[i2]+data[i4]);
      h2i := c2*(data[i1]-data[i3]);
      data[i1] := h1r+wrs*h2r-wis*h2i;
      data[i2] := h1i+wrs*h2i+wis*h2r;
      data[i3] := h1r-wrs*h2r+wis*h2i;
      data[i4] := -h1i+wrs*h2i+wis*h2r;
      wtemp := wr;
      wr := wr*wpr-wi*wpi+wr;
      wi := wi*wpr+wtemp*wpi+wi
   END;
   IF (isign = 1) THEN BEGIN
      h1r := data[1];
      data[1] := h1r+data[2];
      data[2] := h1r-data[2]
   END ELSE BEGIN
      h1r := data[1];
      data[1] := c1*(h1r+data[2]);
      data[2] := c1*(h1r-data[2]);
      four1(data,n,-1)
   END
END;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?