numerics
Loading...
Searching...
No Matches
num::spectral Namespace Reference

Classes

class  FFTPlan
 Precomputed plan for repeated complex transforms of a fixed size. More...
 

Enumerations

enum class  FFTBackend { seq , simd , stdsimd , fftw }
 Selects which backend handles an FFT operation. More...
 

Functions

void fft (const CVector &in, CVector &out, FFTBackend b=default_fft_backend)
 Forward complex DFT. out must be pre-allocated to in.size().
 
void ifft (const CVector &in, CVector &out, FFTBackend b=default_fft_backend)
 Inverse complex DFT (unnormalised: result = n * true_inverse).
 
void rfft (const Vector &in, CVector &out, FFTBackend b=default_fft_backend)
 Real-to-complex forward DFT. out must be pre-allocated to n/2+1.
 
void irfft (const CVector &in, int n, Vector &out, FFTBackend b=default_fft_backend)
 Complex-to-real inverse DFT (unnormalised).
 

Variables

constexpr FFTBackend seq = FFTBackend::seq
 
constexpr FFTBackend fftw = FFTBackend::fftw
 
constexpr FFTBackend fft_simd = FFTBackend::simd
 
constexpr FFTBackend fft_stdsimd = FFTBackend::stdsimd
 
constexpr bool has_fftw
 True when FFTW3 was found at configure time.
 
constexpr bool has_fft_simd
 True when handwritten AVX2 or NEON backend is available.
 
constexpr bool has_fft_stdsimd
 True when std::experimental::simd is available.
 
constexpr FFTBackend default_fft_backend
 Automatically selected at configure time: fftw > simd > seq.
 

Enumeration Type Documentation

◆ FFTBackend

Selects which backend handles an FFT operation.

Enumerator
seq 

Native Cooley-Tukey radix-2 DIT – always available (power-of-two only)

simd 

Handwritten AVX2 / NEON butterfly – falls back to seq if unavailable.

stdsimd 

std::experimental::simd butterfly – requires NUMERICS_HAS_STD_SIMD

fftw 

FFTW3 (mixed-radix, AVX / NEON optimised) – requires NUMERICS_HAS_FFTW.

Definition at line 26 of file fft.hpp.

Function Documentation

◆ fft()

void num::spectral::fft ( const CVector in,
CVector out,
FFTBackend  b = default_fft_backend 
)

Forward complex DFT. out must be pre-allocated to in.size().

Definition at line 15 of file fft.cpp.

References backends::opt::fft(), backends::seq::fft(), fftw, num::ipow(), simd, and stdsimd.

◆ ifft()

void num::spectral::ifft ( const CVector in,
CVector out,
FFTBackend  b = default_fft_backend 
)

Inverse complex DFT (unnormalised: result = n * true_inverse).

Definition at line 31 of file fft.cpp.

References fftw, backends::opt::ifft(), backends::seq::ifft(), num::ipow(), simd, and stdsimd.

◆ irfft()

void num::spectral::irfft ( const CVector in,
int  n,
Vector out,
FFTBackend  b = default_fft_backend 
)

Complex-to-real inverse DFT (unnormalised).

Parameters
nLength of the real output (must satisfy in.size() == n/2+1).

Definition at line 61 of file fft.cpp.

References fftw, num::ipow(), backends::opt::irfft(), backends::seq::irfft(), simd, and stdsimd.

◆ rfft()

void num::spectral::rfft ( const Vector in,
CVector out,
FFTBackend  b = default_fft_backend 
)

Real-to-complex forward DFT. out must be pre-allocated to n/2+1.

Definition at line 46 of file fft.cpp.

References fftw, num::ipow(), backends::opt::rfft(), backends::seq::rfft(), simd, and stdsimd.

Variable Documentation

◆ default_fft_backend

constexpr FFTBackend num::spectral::default_fft_backend
inlineconstexpr
Initial value:
=
FFTBackend::seq

Automatically selected at configure time: fftw > simd > seq.

Definition at line 65 of file fft.hpp.

◆ fft_simd

constexpr FFTBackend num::spectral::fft_simd = FFTBackend::simd
inlineconstexpr

Definition at line 37 of file fft.hpp.

◆ fft_stdsimd

constexpr FFTBackend num::spectral::fft_stdsimd = FFTBackend::stdsimd
inlineconstexpr

Definition at line 38 of file fft.hpp.

◆ fftw

constexpr FFTBackend num::spectral::fftw = FFTBackend::fftw
inlineconstexpr

Definition at line 36 of file fft.hpp.

◆ has_fft_simd

constexpr bool num::spectral::has_fft_simd
inlineconstexpr
Initial value:
=
false

True when handwritten AVX2 or NEON backend is available.

Definition at line 49 of file fft.hpp.

◆ has_fft_stdsimd

constexpr bool num::spectral::has_fft_stdsimd
inlineconstexpr
Initial value:
=
false

True when std::experimental::simd is available.

Definition at line 57 of file fft.hpp.

◆ has_fftw

constexpr bool num::spectral::has_fftw
inlineconstexpr
Initial value:
=
false

True when FFTW3 was found at configure time.

Definition at line 41 of file fft.hpp.

◆ seq

constexpr FFTBackend num::spectral::seq = FFTBackend::seq
inlineconstexpr

Definition at line 35 of file fft.hpp.