'defdbl a-z
'pi = 2*asin(1)
dim xx_r
(sw
-1), xx_i
(sw
-1)
x_r
(i
) = 100*sin(2*pi
*62.27*i
/sw
) + 25*cos(2*pi
*132.27*i
/sw
) x_i(i) = 0
'screenres sw, sh, 32
line -(i
, sh
/4 - x_r
(i
)), _rgb(100,100,100)
dft xx_r(), xx_i(), x_r(), x_i(), sw
pset (0, 3*sh
/4 - 0.1*sqr(xx_r
(0)*xx_r
(0) + xx_i
(0)*xx_i
(0)) ), _rgb(0,255,0) line -(i
, 3*sh
/4 - 0.1*sqr(xx_r
(i
)*xx_r
(i
) + xx_i
(i
)*xx_i
(i
)) ), _rgb(0,255,0)
fft xx_r(), xx_i(), x_r(), x_i(), sw
pset (0, 50+3*sh
/4 - 0.1*sqr(xx_r
(0)*xx_r
(0) + xx_i
(0)*xx_i
(0)) ), _rgb(255,0,0) line -(i
, 50+3*sh
/4 - 0.1*sqr(xx_r
(i
)*xx_r
(i
) + xx_i
(i
)*xx_i
(i
)) ), _rgb(255,0,0)
xx_r(i) = 0
xx_i(i) = 0
rfft xx_r(), xx_i(), x_r(), sw
pset (0, 100+3*sh
/4 - 0.1*sqr(xx_r
(0)*xx_r
(0) + xx_i
(0)*xx_i
(0)) ), _rgb(255,255,0) line -(i
, 100+3*sh
/4 - 0.1*sqr(xx_r
(i
)*xx_r
(i
) + xx_i
(i
)*xx_i
(i
)) ), _rgb(255,255,0)
sub rfft
(xx_r
(), xx_i
(), x_r
(), n
)
rev = 0
if i
and (2^j
) then rev
= rev
+ (2^(log2n
- 1 - j
))
xx_r(i) = x_r(2*rev)
xx_i(i) = x_r(2*rev + 1)
m = 2^i
w_r = 1
w_i = 0
p = j + k
q = p + (m \ 2)
u_r = w_r*xx_r(q) - w_i*xx_i(q)
u_i = w_r*xx_i(q) + w_i*xx_r(q)
v_r = xx_r(p)
v_i = xx_i(p)
xx_r(p) = v_r + u_r
xx_i(p) = v_i + u_i
xx_r(q) = v_r - u_r
xx_i(q) = v_i - u_i
u_r = w_r
u_i = w_i
w_r = u_r*wm_r - u_i*wm_i
w_i = u_r*wm_i + u_i*wm_r
xx_r(n/2) = xx_r(0)
xx_i(n/2) = xx_i(0)
xx_r(n/2 + i) = xx_r(n/2 - i)
xx_i(n/2 + i) = xx_i(n/2 - i)
xpr = (xx_r(i) + xx_r(n/2 + i)) / 2
xpi = (xx_i(i) + xx_i(n/2 + i)) / 2
xmr = (xx_r(i) - xx_r(n/2 + i)) / 2
xmi = (xx_i(i) - xx_i(n/2 + i)) / 2
xx_r
(i
) = xpr
+ xpi
*cos(2*pi
*i
/n
) - xmr
*sin(2*pi
*i
/n
) xx_i
(i
) = xmi
- xpi
*sin(2*pi
*i
/n
) - xmr
*cos(2*pi
*i
/n
)
'symmetry, complex conj
xx_r(n/2 + i) = xx_r(n/2 - 1 - i)
xx_i(n/2 + i) =-xx_i(n/2 - 1 - i)
sub fft
(xx_r
(), xx_i
(), x_r
(), x_i
(), n
)
'bit rev copy
rev = 0
if i
and (2^j
) then rev
= rev
+ (2^(log2n
- 1 - j
))
xx_r(i) = x_r(rev)
xx_i(i) = x_i(rev)
m = 2^i
w_r = 1
w_i = 0
p = j + k
q = p + (m \ 2)
u_r = w_r*xx_r(q) - w_i*xx_i(q)
u_i = w_r*xx_i(q) + w_i*xx_r(q)
v_r = xx_r(p)
v_i = xx_i(p)
xx_r(p) = v_r + u_r
xx_i(p) = v_i + u_i
xx_r(q) = v_r - u_r
xx_i(q) = v_i - u_i
u_r = w_r
u_i = w_i
w_r = u_r*wm_r - u_i*wm_i
w_i = u_r*wm_i + u_i*wm_r
sub dft
(xx_r
(), xx_i
(), x_r
(), x_i
(), n
) xx_r(i) = 0
xx_i(i) = 0
xx_r
(i
) = xx_r
(i
) + x_r
(j
)*cos(2*pi
*i
*j
/n
) + x_i
(j
)*sin(2*pi
*i
*j
/n
) xx_i
(i
) = xx_i
(i
) - x_r
(j
)*sin(2*pi
*i
*j
/n
) + x_i
(j
)*cos(2*pi
*i
*j
/n
)