📄 2-dit-fft.asm
字号:
*
* TITL COMPLEX, RADIX-2, FFT
*
* GENERIC PROGRAM TO DO A RADIX-2 COMPLEX FFT COMPUTATION IN TMS320C30
*
* THE COMPLEX DATA RESIDE IN INTERNAL MEMORY. THE COMPUTATION IS DONE
* IN-PLACE,BUT THE RESULT IS MOVED TO ANOTHER MEMORY SECTION TO DEMONSTRATE
* THE BIT-REVERSED ADDRESSING.
*
* THE TWIDDLE FACTORS ARE SUPPLIED IN A TABLE PUT IN A .DATA SECTION.
* THIS DATA IS INCLUDED IN A SEPARATE FILE TO PRESERVE THE GENERIC
* NATURE OF THE PROGRAM. FOR THE SAME PURPOSE,THE SIZE OF THE FFT N
* AND LOG2(N) ARE DEFINED IN A .GLOBL DIRECTIVE AND SPECIFIED DURING LINKING.
*
*
.globl FFT ; Entry point for execution
.globl N ; FFT size
.globl M ; LOG2(N)
.globl SINE ; Address of sine table
INP .usect "IN",1024 ; Memory with input data
.BSS OUTP,1024 ; Memory with output data
.text
* INITIALIZE
FFTSIZ .word N
LOGFFT .word M
SINTAB .word SINE
INPUT .word INP
OUTPUT .word OUTP
FFT: LDP FFTSIZ ; Command to load data page pointer
LDI @FFTSIZ,IR1
LSH -2,IR1 ;
LDI 0,AR6
LDI @FFTSIZ,IR0
LSH 1,IR0
LDI @FFTSIZ,R7
LDI 1,AR7
LDI 1,AR5
* OUTER LOOP
LOOP: NOP *++AR6(1) ; Current FFT stage
LDI @INPUT,AR0 ; AR0 points to X(I)
ADDI R7,AR0,AR2 ; AR2 points to X(L)
LDI AR7,RC
SUBI 1,RC ; RC should be one less than desired #
* FIRST LOOP
RPTB BLK1
ADDF *AR0,*AR2,R0 ; R0=X(I)+X(L)
SUBF *AR2++,*AR0++,R1
ADDF *AR2,*AR0,R2
SUBF *AR2,*AR0,R3
STF R2,*AR0--
|| STF R3,*AR2--
BLK1 STF R0,*AR0++(IR0)
|| STF R1,*AR2++(IR0)
*
CMPI @LOGFFT,AR6
BZD END
* MAIN INNER LOOP
LDI 2,AR1
LDI @SINTAB,AR4
INLOP: ADDI AR5,AR4
LDI AR1,AR0
ADDI 2,AR1
ADDI @INPUT,AR0
ADDI R7,AR0,AR2
LDI AR7,RC
SUBI 1,RC
LDF *AR4,R6
* SECOND LOOP
RPTB BLK2
SUBF *AR2,*AR0,R2
SUBF *+AR2,*+AR0,R1
*
MPYF R2,R6,R0
|| ADDF *+AR2,*+AR0,R3
*
MPYF R1,*+AR4(IR1),R3
|| STF R3,*+AR0
SUBF R0,R3,R4
MPYF R1,R6,R0
|| ADDF *AR2,*AR0,R3
MPYF R2,*+AR4(IR1),R3
|| STF R3,*AR0++(IR0)
*
ADDF R0,R3,R5
BLK2 STF R5,*AR2++(IR0)
STF R4,*+AR2
CMPI R7,AR1
BNE INLOP
LSH 1,AR7
BRD LOOP
LSH 1,AR5
LDI R1,IR0
LSH -1,R7
* STORE RESULT OUT USING BIT-REVERSED ADDRESSING
END: LDI @FFTSIZ,RC
SUBI 1,RC
LDI @FFTSIZ,IR0
LDI 2,IR1
LDI @INPUT,AR0
LDI @OUTPUT,AR1
RPTB BITRV
LDF *+AR0(1),R0
|| LDF *AR0++(IR0)B,R1
BITRV STF R0,*+AR1(1)
|| STF R1,*AR1++(IR1)
SELF BR SELF
.end
*
*TITL TABLE WITH TWIDDLE FACTORS FOR A 128-POINT FFT
*
* FILE TO BE LINKED WITH THE SOURCE CODE FOR A 128-POINT,RADIX-2 FFT.
.globl SINE
.globl N
.globl M
N .set 128
M .set 7
.data
SINE
.float 0.000000
.float 0.049068
.float 0.098017
.float 0.146730
.float 0.195090
.float 0.242980
.float 0.290285
.float 0.336890
.float 0.382683
.float 0.427555
.float 0.471397
.float 0.514103
.float 0.555570
.float 0.595699
.float 0.634393
.float 0.671559
.float 0.707107
.float 0.740951
.float 0.773010
.float 0.803208
.float 0.831470
.float 0.857729
.float 0.881921
.float 0.903989
.float 0.923880
.float 0.941544
.float 0.956940
.float 0.970031
.float 0.980785
.float 0.989177
.float 0.995185
.float 0.998795
COSINE
.float 0.998795
.float 1.000000
.float 0.998795
.float 0.995185
.float 0.989177
.float 0.980785
.float 0.970031
.float 0.956940
.float 0.941544
.float 0.923880
.float 0.903989
.float 0.881921
.float 0.857729
.float 0.831470
.float 0.803208
.float 0.773010
.float 0.740951
.float 0.707107
.float 0.671559
.float 0.634393
.float 0.595699
.float 0.555570
.float 0.514103
.float 0.471397
.float 0.427555
.float 0.382683
.float 0.336890
.float 0.290285
.float 0.242980
.float 0.195090
.float 0.146730
.float 0.098017
.float 0.049068
.float -0.000000
.float -0.049068
.float -0.098017
.float -0.146730
.float -0.195090
.float -0.242980
.float -0.290285
.float -0.336890
.float -0.382683
.float -0.427555
.float -0.471397
.float -0.514103
.float -0.555570
.float -0.595699
.float -0.634393
.float -0.671559
.float -0.707107
.float -0.740951
.float -0.773010
.float -0.803208
.float -0.831470
.float -0.857729
.float -0.881921
.float -0.903989
.float -0.923880
.float -0.941544
.float -0.956940
.float -0.970031
.float -0.980785
.float -0.989177
.float -0.995185
.float -0.998795
.float -1.000000
.float -0.998795
.float -0.995185
.float -0.989177
.float -0.980785
.float -0.970031
.float -0.956940
.float -0.941544
.float -0.923880
.float -0.903989
.float -0.881921
.float -0.857729
.float -0.831470
.float -0.803208
.float -0.773010
.float -0.740951
.float -0.707107
.float -0.671559
.float -0.634393
.float -0.595699
.float -0.555570
.float -0.514103
.float -0.471397
.float -0.427555
.float -0.382683
.float -0.336890
.float -0.290285
.float -0.242980
.float -0.195090
.float -0.146730
.float -0.098017
.float -0.049068
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -