blob: 40c900cc85894efcd2b8e5207da3d64bb0ae9b75 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# FFTW-based replacement for fft.bqn
plan ← "*:i32"
Fn ← "/usr/lib/libfftw3.so.3"⊸•FFI
createPlan ← Fn plan‿"fftw_plan_dft"‿"i32"‿"*i32"‿"*f64"‿"&f64"‿"i32"‿"i32"
destroyPlan ← Fn ""‿"fftw_destroy_plan"‿plan
executePlan ← Fn ""‿"fftw_execute"‿plan
{
𝕨𝕊⁼𝕩: (-𝕨1⊘≢¯1)𝕊𝕩 ;
"FFT argument must be a list or have two list cells" ! (3⌊=)◶⟨0,1,2=≠,0⟩𝕩
Enc ← ⍉⌽
𝕩 ↩ (2↑≍)⍟(2>=) 𝕩
dir ← -⟜¬ 𝕨≡¯1
sh ← 1↓≢𝕩
in ← ⥊ Enc 𝕩
plan‿out ← CreatePlan ⟨≠sh,sh,in,0¨in,dir,2⋆6⟩
ExecutePlan ⟨plan⟩
DestroyPlan ⟨plan⟩
÷⟜(×´sh˙)⍟(1=dir) Enc⁼ (sh∾2) ⥊ out
}
|