Non-uniform fast Fourier transform (NUFFT), purely written in Julia. This package is based on [1-2].
- The type-1 transform (non-uniform to uniform) computes Fourier components on uniform grid points
$\mathbf{q} \in \mathcal{I}_{N_{1}} \times \cdots \times \mathcal{I}_{N_{D}}$ from coefficients on non-uniform grid points$\mathbf{x}_{m} \in [-1/2,1/2]^{D}$ :
where
- The type-2 transform (uniform to non-uniform) computes Fourier components on non-uniform grid points
$\mathbf{x}_{m} \in [-1/2,1/2]^{D}$ from coefficients on uniform grid points$\mathbf{q} \in \mathcal{I}_{N_{1}} \times \cdots \times \mathcal{I}_{N_{D}}$ :
where
- The type-3 transform (non-uniform to non-uniform) computes Fourier components on non-uniform grid points
$\nu_{p}\in\mathbb{R}^{D}$ from coefficients on non-uniform grid points$\mathbf{x}_{m} \in [-1/2,1/2]^{D}$ :
- This pacakge supports both CPU (via
FLoops.jl
) and GPU (viaCUDA.jl
) - The NUFFT type 1-3 operations on dimension
$D=1,2,3$ - Both signs
+1
and-1
in the exponents,$\exp \left( \pm 2\pi i \cdots \right)$ , are supported (you can choose the sign with theiflag
argument; see below).
A typical example usage is (check runtests.jl
for more detailed examples):
# X and N specify non-uniform and uniform grid points
plan = plan_nufft!(X, N)
# source refers to cofficients that are Fourier transformed
# target refers to a storage that Fourier components are stored
plan(target, iflag, source)
[1] A. H. Barnett et al., A parallel nonuniform fast Fourier transform library based on an “exponential of semicircle" kernel, SIAM Journal on Scientific Computing, 41:5.
[2] D. Potts et al., Uniform error estimates for nonequispaced fast Fourier transforms, Sampling Theory, Signal Processing, and Data Analysis, 19:17.