# Discrete Fourier Transform # Usage: dft : b # Where "b" is the input vector {pi %3.141592653589793} {wN 1} {p 2} {r 2} {B 1} {realCDiv &/ @ distr @ reverse} {distMult &* @ distl} {iota0 apndl @ [%0, iota @ - @ [id,%1] ] } {oddp = @ [%1 , mod @ [id,%2]]} {cAdd &+ @ trans} {reCxIp !cAdd @ &&* @ &distl @ trans} {cExp [cos , sin]} {N length @ 1} {w cExp @ / @ [!* @ [%-2, pi, p], wN ] } {ws cExp @ + @ [pi, / @ [!* @ [%-2, pi, p], wN ] ] } {wFactors &(oddp @ 3 -> ws @ [1,* @ tl]; w @ [1,* @ tl]) @ &apndl @ distl @ [N, distl @ [r, iota0 @ N] ] } {dftPt realCDiv @ [N, reCxIp @ [B, wFactors] ] } {dft &dftPt @ distl @ [id,iota0 @ length]} {b %<1.0, 2.0, 3.0, 4.0, 3.0, 2.0, 1.0, 0.5>} {d %<0.0, 0.5, 1.0, 1.0>} {e %< 1.0, 2.0, 3.0, 4.0, 3.0, 2.0, 1.0, 0.5, 1.0, 2.0, 3.0, 4.0, 3.0, 2.0, 1.0, 0.5, 1.0, 2.0, 3.0, 4.0, 3.0, 2.0, 1.0, 0.5, 1.0, 2.0, 3.0, 4.0, 3.0, 2.0, 1.0, 0.5>}