aboutsummaryrefslogtreecommitdiff
path: root/fftw.bqn
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 𝕩
  planout  CreatePlan sh,sh,in,0¨in,dir,26
  ExecutePlan plan
  DestroyPlan plan
  ÷(×´sh˙)(1=dir) Enc (sh2)  out
}