home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG023.ARK / STOICFFT.STC < prev    next >
Text File  |  1984-04-29  |  3KB  |  97 lines

  1.  
  2.  
  3. % ***************************************************************************
  4. % ** COPYRIGHT (C) MASSACHUSETTS INSTITUTE OF TECHNOLOGY AND HARVARD       **
  5. % ** UNIVERSITY, BIOMEDICAL ENGINEERING CENTER 1977.  ALL RIGHTS RESERVED. **
  6. % ***************************************************************************
  7.  
  8. % FLOATING POINT FFT
  9. % J. SACHS 1/28/77
  10.  
  11. RADIX @ OCTAL
  12.  
  13. % VARIABLES
  14. 0.0 'WR FCONSTANT    % REAL PART OF W
  15. 0.0 'WI FCONSTANT    % IMAGINARY PART OF W
  16. 0.0 'DELTA FCONSTANT    % DELTA THETA
  17.  
  18. 0 'IA VARIABLE        % A INDEX
  19. 0 'IB VARIABLE        % B INDEX
  20. 0 'ISTEP VARIABLE    % STEP SIZE
  21. 0 'N VARIABLE        % NUMBER OF POINTS
  22. 0 'LOG2N VARIABLE    % LOG N BASE 2
  23. 0 'SENSE VARIABLE    % SENSE OF FFT (-1 = FORWARD; 0 = REVERSE)
  24. 0 'CBUF VARIABLE    % ADDRESS OF INPUT ARRAY
  25.  
  26. % RAISE 2 TO THE POWER AT TOP OF STACK
  27. '2** CODE<  D POP,  1 H LXI,  E A MOV,  A ORA,  PUSH JZ,
  28.   .  H DAD,  E DCR,  JNZ,  PUSH JMP,  >
  29.  
  30. % COMPLEX ARITHMETIC
  31. 'C+ : D2OVER F+ D2UNDER D2OVER F+ D2UNDER ;
  32. 'CEXP : FLOAT DELTA F* DDUP FCOS () WR F! FSIN () WI F! ;
  33.  
  34. 'WC* : DOVER WR F* DOVER WI F* F- D2OVER WI F* D2OVER WR F* F+
  35.   D2UNDER D2UNDER ;
  36.  
  37. % LOAD COMPLEX NUMBER FROM ARRAY
  38. 'AC@ CODE<  IA LHLD,  .  H DAD,  H DAD,  H DAD,  XCHG,  CBUF LHLD,
  39.   D DAD,  M E MOV,  H INX,  M D MOV,  H INX,  M C MOV,  H INX,  M B MOV,
  40.   H INX,  B PUSH,  D PUSH,  M E MOV,  H INX,  M D MOV,  H INX,  M C MOV,
  41.   H INX,  M B MOV,  B PUSH,  D PUSH,  NEXT JMP,  >
  42. 'BC@ CODE<  IB LHLD,  JMP,  >
  43.  
  44. % STORE COMPLEX NUMBER IN ARRAY
  45. 'AC! CODE<  IA LHLD,  .  H DAD,  H DAD,  H DAD,  XCHG,  CBUF LHLD,
  46.   D DAD,  4 D LXI,  D DAD,
  47.   D POP,  E M MOV,  H INX,  D M MOV,  H INX,
  48.   D POP,  E M MOV,  H INX,  D M MOV,  -7 D LXI,  D DAD,
  49.   D POP,  E M MOV,  H INX,  D M MOV,  H INX,
  50.   D POP,  E M MOV,  H INX,  D M MOV,  NEXT JMP,  >
  51. 'BC! CODE<  IB LHLD,  JMP,  >
  52.  
  53. % FFT INNER CALCULATIONS
  54. 'SETUP CODE<  H POP,  IA SHLD,  XCHG,  ISTEP LHLD,  D DAD,
  55.   IB SHLD,  NEXT JMP,  >
  56.  
  57. 'BUTTERFLY : SETUP BC@ WC* DOVER FMINUS DOVER FMINUS AC@ C+ BC! AC@ C+ AC! ;
  58.  
  59. % BIT REVERSAL
  60. 'IABI CODE<  IA LHLD,  XCHG,  LOG2N LDA,  A C MOV,  0 H LXI,
  61.   .  H DAD,  D A MOV,  RAR,  A D MOV,  E A MOV,  RAR,  A E MOV,
  62.   IFNC,  H INX,  THEN,  C DCR,  JNZ,  IB SHLD,  NEXT JMP,  >
  63.  
  64. 'BITREV : N @ 0 DO I IA ! IABI I IB @ LT IF AC@ BC@ AC! BC! THEN LOOP ;
  65.  
  66. % DIVIDE INPUT ARRAY BY SQRT(N)
  67. 'NORMALIZE : 1.0 N @ FLOAT FSQRT F/ () WR F!
  68.   N @ 0 DO I IA ! AC@ DSWAP WR F* DSWAP WR F* AC! LOOP ;
  69.  
  70. % ADDRESS LOG2N SENSE FFT
  71. % ADDRESS IS START OF COMPLEX ARRAY
  72. % LOG2N IS LOG BASE 2 OF NUMBER OF POINTS
  73. % SENSE IS -1 FOR FORWARD TRANSFORM; 0 FOR REVERSE TRANSFORM
  74. 'FFT : SENSE ! DUP LOG2N ! 2** N ! CBUF !
  75.   BITREV NORMALIZE
  76.   LOG2N @ 0 DO
  77.    I 2** ISTEP ! PI ISTEP @ SENSE @ IF MINUS THEN FLOAT F/ () DELTA F!
  78.     ISTEP @ 0 DO
  79.     I CEXP N @ I DO
  80.      I BUTTERFLY
  81.     ISTEP @ 2* +LOOP
  82.    LOOP
  83.   LOOP
  84.   ;
  85.  
  86. % DEFINE FORWARD AND REVERSE FFT'S
  87. 'RFFT : 0 FFT ;
  88. 'FFT : -1 FFT ;
  89.  
  90. RADIX !
  91. ;F
  92.  
  93.  
  94.  
  95. ***EOF***
  96.  
  97.