factor/extra/math/fft/fft.factor

39 lines
696 B
Factor

! Copyright (c) 2007 Hans Schmid.
! See http://factorcode.org/license.txt for BSD license.
USING: columns grouping kernel math math.constants math.functions math.vectors
sequences ;
IN: math.fft
! Fast Fourier Transform
<PRIVATE
: n^v ( n v -- w ) [ ^ ] with map ;
: omega ( n -- n' )
recip -2 pi i* * * exp ;
: twiddle ( seq -- seq )
dup length [ omega ] [ n^v ] bi v* ;
PRIVATE>
DEFER: fft
: two ( seq -- seq )
fft 2 v/n dup append ;
<PRIVATE
: even ( seq -- seq ) 2 group 0 <column> ;
: odd ( seq -- seq ) 2 group 1 <column> ;
: (fft) ( seq -- seq )
[ odd two twiddle ] [ even two ] bi v+ ;
PRIVATE>
: fft ( seq -- seq )
dup length 1 = [ (fft) ] unless ;