Odin Bindings for the Fastest Fourier Transform in the West FFTW3
Bindings for single precision (float, f32, fftwf_) and double precision (double, f64, fftw_) FFTW3 functions.
No bindings for long double (fftwl_) functions.
This repository is under MIT license. FFTW3 have their own license, see their website.
For example
sudo apt install libfftw3-devmake testTake a look at the tests for more example usage.
import fftw3 "./fftw3"
// DFT length
n: i32 = 10
// complex input
buf_x := make([^]fftw3.fftw_complex, n)
defer free(buf_x)
// complex result of forward transform
buf_x_forward := make([^]fftw3.fftw_complex, n)
defer free(buf_x_forward)
// initialize complex input
for i in 0 ..< n {
buf_x[i][0] = f64(i) + 0.123 * f64(i)
buf_x[i][1] = f64(n - i) - 0.456 * f64(n - i)
}
// plan a forward transform
plan := fftw3.fftw_plan_dft_1d(
n,
buf_x,
buf_x_forward,
fftw3.Sign.FORWARD,
fftw3.Flags.ESTIMATE,
)
defer fftw3.fftw_destroy_plan(plan)
// execute the forward transform
fftw3.fftw_execute_dft(plan, buf_x, buf_x_forward)How fftw3.odin was Created
- generate fftw3.odin using the Odin Bindings Generator for C Libraries
- remove all
fftwl_*functions - add
FILE :: c.FILE - add
foreign import lib "system:fftw3"with@(extra_linker_flags = "-lfftw3_threads -lfftw3 -lm -lpthread"); same for the single precision version - convert flags like
FFTW_MEASUREto enumFlags.MEASUREand replaceflags: u32withflags: Flagsin signatures - convert
FFTW_FORWARDandFFTW_BACKWARDto enumSign.FORWARDandSign.BACKWARDand replacesign: i32withsign: Signin signatures - replace pointers ^ with [^]