home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1997 #3 / amigamamagazinepolishissue03-1 / ma_1995 / 07 / ami26b < prev    next >
Text File  |  1997-04-15  |  1KB  |  136 lines

  1. <l>
  2. ' --------------------------------------------------------
  3.  
  4. ' listing 1: Gîówny algorytm FFT
  5.  
  6. ' (c) copyright 1995 by: LECH BALCERZAK vel WILLIAM MOBIUS
  7.  
  8. ' --------------------------------------------------------
  9.  
  10. PROCEDURE fft
  11.  
  12.     ' inicjacja
  13.  
  14.     ' podaj p=1,2,3,4,5...
  15.  
  16.     n=2^p
  17.  
  18.     nf1=n-1
  19.  
  20.     nf2=n/2
  21.  
  22.     nf3=SQR(n)
  23.  
  24.     ' extract
  25.  
  26.     FOR l=1 TO p
  27.  
  28.         l1=2^(p+1-l)
  29.  
  30.         l2=l1/2
  31.  
  32.         u1=1
  33.  
  34.         u2=0
  35.  
  36.         af=PI/l2
  37.  
  38.         cf=COS(af)
  39.  
  40.         sf=-SIN(af)
  41.  
  42.         FOR j=1 TO l2
  43.  
  44.             FOR i=j TO n STEP l1
  45.  
  46.                 i1=i+l2
  47.  
  48.                 t1=x(i)+x(i1)
  49.  
  50.                 t2=jx(i)+jx(i1)
  51.  
  52.                 t3=x(i)-x(i1)
  53.  
  54.                 t4=jx(i)-jx(i1)
  55.  
  56.                 x(i1)=t3*u1-t4*u2
  57.  
  58.                 jx(i1)=t4*u1+t3*u2
  59.  
  60.                 x(i)=t1
  61.  
  62.                 jx(i)=t2
  63.  
  64.             NEXT i
  65.  
  66.             u3=u1*cf-u2*sf
  67.  
  68.             u2=u2*cf+u1*sf
  69.  
  70.             u1=u3
  71.  
  72.         NEXT j
  73.  
  74.     NEXT l
  75.  
  76.     ' sortowanie
  77.  
  78.     j=1
  79.  
  80.     FOR i=1 TO nf1
  81.  
  82.         IF i>=j
  83.  
  84.             GOTO etykieta1
  85.  
  86.         ENDIF
  87.  
  88.         t1=x(j)
  89.  
  90.         t2=jx(j)
  91.  
  92.         x(j)=x(i)
  93.  
  94.         jx(j)=jx(i)
  95.  
  96.         x(i)=t1
  97.  
  98.         jx(i)=t2
  99.  
  100.         etykieta1:
  101.  
  102.         kk=nf2
  103.  
  104.         etykieta3:
  105.  
  106.         IF kk>=j
  107.  
  108.             GOTO etykieta2
  109.  
  110.         ENDIF
  111.  
  112.         j=j-kk
  113.  
  114.         kk=kk/2
  115.  
  116.         GOTO etykieta3
  117.  
  118.         etykieta2:
  119.  
  120.         j=j+kk
  121.  
  122.     NEXT i
  123.  
  124.     ' normalizacja
  125.  
  126.     FOR i=1 TO n
  127.  
  128.         x(i)=x(i)/nf3
  129.  
  130.         jx(i)=jx(i)/nf3
  131.  
  132.     NEXT i
  133.  
  134. RETURN
  135.  
  136.