home *** CD-ROM | disk | FTP | other *** search
- IDT 'GZEL'
- *
- * Program for computation of DFT using Goertzel's algorithm.
- *
- * Uses second-order Goertzel's algorithm.
- * Computes up to 64 DFT points.
- * Data points are located on page 0.
- * Results are output sequentially to port 0.
- * Coefficient table is of size N for sine and cosines.
- *
- N EQU 64 * Size of the transform
- AORG 0
- *
- *
- X EQU 0 * Data points
- * Other locations on page 1.
- ONE EQU 0 * Contains value 1
- HOLDN EQU 1 * Contains value N
- QUARTN EQU 2 * Contains value N/4
- J EQU 3 * Current DFT point
- COS EQU 4 * Current cosine value
- SIN EQU 5 * Current sine value
- TABLE EQU 6 * Location of sine table
- A1 EQU 7 * Real locations
- A2 EQU 8
- B1 EQU 9 * Imaginary locations
- B2 EQU 10
- REAL EQU 11 * Real result for output
- IMAG EQU 12 * Imaginary result for output
- *
- * Start of routine.
- *
- START LDPK 1
- LACK 1
- SACL ONE
- LT ONE
- MPYK SINE
- PAC
- SACL TABLE * Save address of sine table
- LACK N
- SACL HOLDN * HOLDN = N
- LACK N/4
- SACL QUARTN * QUARTN = N/4
- ZAC
- SACL J * J = 0
- *
- LOOP LAC TABLE
- ADD J
- TBLR SIN * Get sine and cosine values
- ADD QUARTN * for this loop
- TBLR COS
- *****************************************************************
- * *
- * MAIN LOOP FOR GOERTZEL'S ALGORITHM *
- * *
- *****************************************************************
- GOTCOS ZAC
- SACL A2 * A2 = 0
- SACL B2 * B2 = 0
- LARP 1
- LARK AR0,N-2
- LARK AR1,X
- LAC *+
- SACL A1 * A1 = X(0)
- LAC *+
- SACL B1 * B1 = Y(0)
- LT COS
- NLOOP LARP 1
- MPY A1
- PAC
- APAC * ACC = 2cos(j)*A1
- SUB A2,15
- ADD *+,15 * ACC = 2cos(j)*A1 - A2 + X(i)
- DMOV A1 * A2 = A1
- SACH A1,1 * A1 = 2cos(j)*A1 - A2 + X(i)
- MPY B1
- PAC
- APAC * ACC = 2cos(j)*B1
- SUB B2,15
- ADD *+,15,AR0 * ACC = 2cos(j)*B1 - B2 + Y(i)
- DMOV B1 * B2 = B1
- SACH B1,1 * B1 = 2cos(j)*B1 - B2 + Y(i)
- BANZ NLOOP * Loop for i = 1 to N-1
- *
- * Main loop complete.
- *
- MPY A1
- PAC
- SUB A2,15
- LT SIN
- MPY B1
- SPAC
- SACH REAL,1 * Real = cos(j)*A1 - A2 - sin(j)*B1
- MPY A1
- PAC
- LT COS
- MPY B1
- APAC
- SUB B2,15
- SACH IMAG,1 * Imag = cos(j)*B1 - B2 + sin(j)*A1
- OUT REAL,PA0 * Output results
- OUT IMAG,PA0
- LAC J
- ADD ONE
- SACL J * J = J + 1
- SUB HOLDN
- BLZ LOOP * Repeat for J = 0 to N-1
- *
- * End of program.
- *
- STOP B STOP
- *
- * Sine and cosine tables.
- *
- SINE EQU $
- DATA 0
- DATA 3211
- DATA 6392
- DATA 9511
- DATA 12539
- DATA 15446
- DATA 18204
- DATA 20787
- DATA 23169
- DATA 25329
- DATA 27244
- DATA 28897
- DATA 30272
- DATA 31356
- DATA 32137
- DATA 32609
- COSINE EQU $
- DATA 32767
- DATA 32609
- DATA 32137
- DATA 31356
- DATA 30272
- DATA 28897
- DATA 27244
- DATA 25329
- DATA 23169
- DATA 20787
- DATA 18204
- DATA 15446
- DATA 12539
- DATA 9511
- DATA 6392
- DATA 3211
- DATA 0
- DATA -3211
- DATA -6392
- DATA -9511
- DATA -12539
- DATA -15446
- DATA -18204
- DATA -20787
- DATA -23169
- DATA -25329
- DATA -27244
- DATA -28897
- DATA -30272
- DATA -31356
- DATA -32137
- DATA -32609
- DATA -32767
- DATA -32609
- DATA -32137
- DATA -31356
- DATA -30272
- DATA -28897
- DATA -27244
- DATA -25329
- DATA -23169
- DATA -20787
- DATA -18204
- DATA -15446
- DATA -12539
- DATA -9511
- DATA -6392
- DATA -3211
- DATA 0
- DATA 3211
- DATA 6392
- DATA 9511
- DATA 12539
- DATA 15446
- DATA 18204
- DATA 20787
- DATA 23169
- DATA 25329
- DATA 27244
- DATA 28897
- DATA 30272
- DATA 31356
- DATA 32137
- DATA 32609
- END