math.transforms.fft: bit simpler, faster.
parent
d6aa829a06
commit
79ee220d6c
|
@ -9,9 +9,9 @@ IN: math.transforms.fft
|
||||||
! Discrete Fourier Transform
|
! Discrete Fourier Transform
|
||||||
:: (slow-fft) ( seq inverse? -- seq' )
|
:: (slow-fft) ( seq inverse? -- seq' )
|
||||||
seq length :> N
|
seq length :> N
|
||||||
inverse? 1 -1 ? 2pi * i* N / :> O
|
inverse? 1 -1 ? 2pi * i* N / N iota n*v :> omega
|
||||||
N iota [| k |
|
N iota [| k |
|
||||||
0 seq [ O k * * e^ * + ] each-index
|
0 seq omega [ k * e^ * + ] 2each
|
||||||
inverse? [ N / ] when
|
inverse? [ N / ] when
|
||||||
] map ; inline
|
] map ; inline
|
||||||
|
|
||||||
|
@ -19,12 +19,12 @@ IN: math.transforms.fft
|
||||||
:: (fft) ( seq inverse? -- seq' )
|
:: (fft) ( seq inverse? -- seq' )
|
||||||
seq length :> N
|
seq length :> N
|
||||||
N 1 = [ seq ] [
|
N 1 = [ seq ] [
|
||||||
inverse? 1 -1 ? 2pi * i* N / :> O
|
|
||||||
N 2/ :> M
|
|
||||||
seq even-indices inverse? (fft)
|
seq even-indices inverse? (fft)
|
||||||
seq odd-indices inverse? (fft)
|
seq odd-indices inverse? (fft)
|
||||||
[ [ O * e^ * + inverse? [ 2 / ] when ] 2map-index ]
|
inverse? 1 -1 ? 2pi * i* N /
|
||||||
[ [ O * e^ * - inverse? [ 2 / ] when ] 2map-index ]
|
[ * e^ * ] curry map-index!
|
||||||
|
[ [ + inverse? [ 2 / ] when ] 2map ]
|
||||||
|
[ [ - inverse? [ 2 / ] when ] 2map ]
|
||||||
2bi append
|
2bi append
|
||||||
] if ; inline recursive
|
] if ; inline recursive
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue