46 lines
1.2 KiB
Plaintext
46 lines
1.2 KiB
Plaintext
@% = &60A
|
|
|
|
DIM Complex{r#, i#}
|
|
DIM in{(7)} = Complex{}, out{(7)} = Complex{}
|
|
DATA 1, 1, 1, 1, 0, 0, 0, 0
|
|
|
|
PRINT "Input (real, imag):"
|
|
FOR I% = 0 TO 7
|
|
READ in{(I%)}.r#
|
|
out{(I%)}.r# = in{(I%)}.r#
|
|
PRINT in{(I%)}.r# "," in{(I%)}.i#
|
|
NEXT
|
|
|
|
PROCfft(out{()}, in{()}, 0, 1, DIM(in{()},1)+1)
|
|
|
|
PRINT "Output (real, imag):"
|
|
FOR I% = 0 TO 7
|
|
PRINT out{(I%)}.r# "," out{(I%)}.i#
|
|
NEXT
|
|
END
|
|
|
|
DEF PROCfft(b{()}, o{()}, B%, S%, N%)
|
|
LOCAL I%, t{} : DIM t{} = Complex{}
|
|
IF S% < N% THEN
|
|
PROCfft(o{()}, b{()}, B%, S%*2, N%)
|
|
PROCfft(o{()}, b{()}, B%+S%, S%*2, N%)
|
|
FOR I% = 0 TO N%-1 STEP 2*S%
|
|
t.r# = COS(-PI*I%/N%)
|
|
t.i# = SIN(-PI*I%/N%)
|
|
PROCcmul(t{}, o{(B%+I%+S%)})
|
|
b{(B%+I% DIV 2)}.r# = o{(B%+I%)}.r# + t.r#
|
|
b{(B%+I% DIV 2)}.i# = o{(B%+I%)}.i# + t.i#
|
|
b{(B%+(I%+N%) DIV 2)}.r# = o{(B%+I%)}.r# - t.r#
|
|
b{(B%+(I%+N%) DIV 2)}.i# = o{(B%+I%)}.i# - t.i#
|
|
NEXT
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
DEF PROCcmul(c{},d{})
|
|
LOCAL r#, i#
|
|
r# = c.r#*d.r# - c.i#*d.i#
|
|
i# = c.r#*d.i# + c.i#*d.r#
|
|
c.r# = r#
|
|
c.i# = i#
|
|
ENDPROC
|