go-fft
The discrete Fourier transform in pure Go. numpy.fft semantics, no FFTW.
go-fft computes the discrete Fourier transform of complex and real signals of any length — split-radix for power-of-two sizes, mixed-radix Cooley–Tukey for composites, Rader and Bluestein's chirp-z for primes — in pure Go, with cgo disabled. It follows the numpy.fft / scipy.fft conventions: forward and inverse complex and real transforms, multi-dimensional and 2-D transforms, frequency-bin helpers, window functions and spectral helpers (PSD, spectrogram).
Ruby has no cgo-free FFT (every option wraps FFTW3) and gonum/dsp/fourier's optimized assembly is amd64-only. go-fft is a fully portable scalar core with go-asmgen SIMD kernels on four of Go's six 64-bit targets. 100% test coverage is the bar, differentially checked against numpy.
Why go-fft
The fast Fourier transform is the workhorse of signal processing, and in most
languages it means binding the native FFTW3 C library. go-fft
brings the numpy.fft / scipy.fft vocabulary to Go with
no cgo and no FFTW: a single portable module that cross-compiles to
a static binary on every target, accelerated by go-asmgen-generated SIMD where the
Go assembler allows it. It is the cgo-free FFT the Go and Ruby ecosystems lacked.
Repositories
fft
The library. Complex & real transforms (FFT/IFFT/RFFT/IRFFT), N-D and 2-D (FFTN/FFT2), frequency-bin helpers, windows, and spectral helpers (PSD/Spectrogram). SIMD complex-multiply on amd64 (SSE2), arm64 (NEON), riscv64 (RVV) and s390x (vector) — four of the six 64-bit targets; loong64/ppc64le run the validated scalar path.
docs
Versioned documentation site (MkDocs Material): API reference, the phased roadmap, and honest benchmark pages versus pocketfft / FFTW. Source →
brand
Logos and icons for the organization, in SVG / PNG / JPG / ICO / ICNS across colour, white and black variants.
Quality bar
- Pure Go.
CGO_ENABLED=0across the org. No cgo, no FFTW, no native shims. - 100% test coverage. Gated in CI, differentially checked against
numpy.fft. - numpy.fft semantics. The same normalization, bin layout and frequency conventions you already know.
- Multi-arch SIMD. go-asmgen complex-multiply kernels on four 64-bit targets, validated per-arch (riscv64 hardware-validated on RVV 1.0); a portable scalar core everywhere.
- BSD-3-Clause on every source file.