home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / dsp / dspgroup / fft32010.arc / PROGRAM.2 < prev    next >
Encoding:
Text File  |  1984-11-13  |  4.0 KB  |  198 lines

  1.       IDT 'GZEL'
  2. *
  3. *  Program for computation of DFT using Goertzel's algorithm.
  4. *
  5. *    Uses second-order Goertzel's algorithm.
  6. *    Computes up to 64 DFT points.
  7. *    Data points are located on page 0.
  8. *    Results are output sequentially to port 0.
  9. *    Coefficient table is of size N for sine and cosines.
  10. *
  11. N EQU 64        * Size of the transform
  12.       AORG 0
  13. *
  14. *
  15. X      EQU 0        * Data points
  16. * Other locations on page 1.
  17. ONE    EQU 0        * Contains value 1
  18. HOLDN  EQU 1        * Contains value N
  19. QUARTN EQU 2        * Contains value N/4
  20. J      EQU 3        * Current DFT point
  21. COS    EQU 4        * Current cosine value
  22. SIN    EQU 5        * Current sine value
  23. TABLE  EQU 6        * Location of sine table
  24. A1     EQU 7        * Real locations
  25. A2     EQU 8
  26. B1     EQU 9        * Imaginary locations
  27. B2     EQU 10
  28. REAL   EQU 11        * Real result for output
  29. IMAG   EQU 12        * Imaginary result for output
  30. *
  31. * Start of routine.
  32. *
  33. START      LDPK 1
  34.       LACK 1
  35.       SACL ONE
  36.       LT   ONE
  37.       MPYK SINE
  38.       PAC
  39.       SACL TABLE        * Save address of sine table
  40.       LACK N
  41.       SACL HOLDN        * HOLDN = N
  42.       LACK N/4
  43.       SACL QUARTN        * QUARTN = N/4
  44.       ZAC
  45.       SACL J        * J = 0
  46. *
  47. LOOP        LAC  TABLE
  48.         ADD  J
  49.         TBLR SIN    * Get sine and cosine values
  50.         ADD  QUARTN    * for this loop
  51.         TBLR COS
  52. *****************************************************************
  53. *                                *
  54. *      MAIN LOOP FOR GOERTZEL'S ALGORITHM                    *
  55. *                                *
  56. *****************************************************************
  57. GOTCOS         ZAC
  58.          SACL A2        * A2 = 0
  59.          SACL B2        * B2 = 0
  60.          LARP 1
  61.          LARK AR0,N-2
  62.          LARK AR1,X
  63.          LAC  *+
  64.          SACL A1        * A1 = X(0)
  65.          LAC  *+
  66.          SACL B1        * B1 = Y(0)
  67.          LT   COS
  68. NLOOP        LARP 1
  69.         MPY  A1
  70.         PAC
  71.         APAC        * ACC = 2cos(j)*A1
  72.         SUB  A2,15
  73.         ADD  *+,15    * ACC = 2cos(j)*A1 - A2 + X(i)
  74.         DMOV A1     * A2 = A1
  75.         SACH A1,1    * A1 = 2cos(j)*A1 - A2 + X(i)
  76.         MPY  B1
  77.         PAC
  78.         APAC        * ACC = 2cos(j)*B1
  79.         SUB  B2,15
  80.         ADD  *+,15,AR0    * ACC = 2cos(j)*B1 - B2 + Y(i)
  81.         DMOV B1     * B2 = B1
  82.         SACH B1,1    * B1 = 2cos(j)*B1 - B2 + Y(i)
  83.         BANZ NLOOP    * Loop for i = 1 to N-1
  84. *
  85. * Main loop complete.
  86. *
  87.          MPY  A1
  88.          PAC
  89.          SUB  A2,15
  90.          LT   SIN
  91.          MPY  B1
  92.          SPAC
  93.          SACH REAL,1    * Real = cos(j)*A1 - A2 - sin(j)*B1
  94.          MPY  A1
  95.          PAC
  96.          LT   COS
  97.          MPY  B1
  98.          APAC
  99.          SUB  B2,15
  100.          SACH IMAG,1    * Imag = cos(j)*B1 - B2 + sin(j)*A1
  101.          OUT  REAL,PA0    * Output results
  102.          OUT  IMAG,PA0
  103.          LAC  J
  104.          ADD  ONE
  105.          SACL J        * J = J + 1
  106.          SUB  HOLDN
  107.          BLZ  LOOP        * Repeat for J = 0 to N-1
  108. *
  109. * End of program.
  110. *
  111. STOP  B STOP
  112. *
  113. * Sine and cosine tables.
  114. *
  115. SINE  EQU $
  116.       DATA 0
  117.       DATA 3211
  118.       DATA 6392
  119.       DATA 9511
  120.       DATA 12539
  121.       DATA 15446
  122.       DATA 18204
  123.       DATA 20787
  124.       DATA 23169
  125.       DATA 25329
  126.       DATA 27244
  127.       DATA 28897
  128.       DATA 30272
  129.       DATA 31356
  130.       DATA 32137
  131.       DATA 32609
  132. COSINE EQU $
  133.       DATA 32767
  134.       DATA 32609
  135.       DATA 32137
  136.       DATA 31356
  137.       DATA 30272
  138.       DATA 28897
  139.       DATA 27244
  140.       DATA 25329
  141.       DATA 23169
  142.       DATA 20787
  143.       DATA 18204
  144.       DATA 15446
  145.       DATA 12539
  146.       DATA 9511
  147.       DATA 6392
  148.       DATA 3211
  149.       DATA 0
  150.       DATA -3211
  151.       DATA -6392
  152.       DATA -9511
  153.       DATA -12539
  154.       DATA -15446
  155.       DATA -18204
  156.       DATA -20787
  157.       DATA -23169
  158.       DATA -25329
  159.       DATA -27244
  160.       DATA -28897
  161.       DATA -30272
  162.       DATA -31356
  163.       DATA -32137
  164.       DATA -32609
  165.       DATA -32767
  166.       DATA -32609
  167.       DATA -32137
  168.       DATA -31356
  169.       DATA -30272
  170.       DATA -28897
  171.       DATA -27244
  172.       DATA -25329
  173.       DATA -23169
  174.       DATA -20787
  175.       DATA -18204
  176.       DATA -15446
  177.       DATA -12539
  178.       DATA -9511
  179.       DATA -6392
  180.       DATA -3211
  181.       DATA 0
  182.       DATA 3211
  183.       DATA 6392
  184.       DATA 9511
  185.       DATA 12539
  186.       DATA 15446
  187.       DATA 18204
  188.       DATA 20787
  189.       DATA 23169
  190.       DATA 25329
  191.       DATA 27244
  192.       DATA 28897
  193.       DATA 30272
  194.       DATA 31356
  195.       DATA 32137
  196.       DATA 32609
  197.       END
  198.