Nonequispaced Fast Sine Transform (NFST)
NDST and NFST
We consider the odd, 1-periodic trigonometric polynomial
\[ f^s(\pmb{x}) \coloneqq \sum_{\pmb{k} \in I_{\pmb{N},\mathrm{s}}^d} \hat{f}_{\pmb{k}}^s \, \sin(2\pi \, \pmb{k} \odot \pmb{x}), \quad \pmb{x} \in \mathbb{R}^d,\]
with multibandlimit $\pmb{N} \in \mathbb{N}^d$ and index set
\[ I_{\pmb{N},\mathrm{s}}^d \coloneqq \left\{ \pmb{k} \in \mathbb{Z}^d: 1 \leq k_i \leq N_i - 1, \, i = 1,2,\ldots,d \right\}.\]
Note that we define $\sin(\pmb{k} \circ \pmb{x}) \coloneqq \prod_{i=1}^d \sin(k_i \cdot x_i)$. The NDST is the evaluation of
\[ f^s(\pmb{x}_j) = \sum_{\pmb{k} \in I_{\pmb{N},\mathrm{s}}^d} \hat{f}_{\pmb{k}}^s \, \sin(2\pi \, \pmb{k} \odot \pmb{x}_j)\]
at arbitrary nodes $\pmb{x}_j \in [0,0.5]^d$ for given coefficients $\hat{f}_{\pmb{k}}^s \in \mathbb{R}, \pmb{k} \in I_{\pmb{N},\mathrm{s}}^d$. Similarly to the NDFT, the transposed NDST is the evaluation of
\[ \hat{h}^s_{\pmb{k}} = \sum_{j=1}^M f^s_j \, \sin(2\pi \, \pmb{k} \odot \pmb{x}_j)\]
for the frequencies $\pmb{k} \in I_{\pmb{N},\mathrm{s}}^d$ with given coefficients $f^s_j \in \mathbb{R}, j = 1,2,\ldots,M$.
We modify the NFFT in order to derive a fast algorithm for the computation of the NDST and transposed NDST, obtaining the NFST and its transposed counterpart. For details we refer to Chapter 6 in [Plonka, Potts, Steidl, Tasche, 2018].
Plan structure
NFFT3.NFST
— TypeNFST{D}
A NFST (nonequispaced fast sine transform) plan, where D is the dimension.
The NFST realizes a direct and fast computation of the discrete nonequispaced sine transform. The aim is to compute
\[f^s(\pmb{x}_j) = \sum_{\pmb{k} \in I_{\pmb{N},\mathrm{s}}^D} \hat{f}_{\pmb{k}}^s \, \sin(2\pi \, \pmb{k} \odot \pmb{x}_j)\]
at given arbitrary knots $\pmb{x}_j \in [0,0.5]^D, j = 1, \cdots, M$, for coefficients $\hat{f}^{s}_{\pmb{k}} \in \mathbb{R}$, $\pmb{k} \in I_{\pmb{N},\mathrm{s}}^D \coloneqq \left\{ \pmb{k} \in \mathbb{Z}^D: 1 \leq k_i \leq N_i - 1, \, i = 1,2,\ldots,D \right\}$, and a multibandlimit vector $\pmb{N} \in \mathbb{N}^{D}$. Note that we define $\sin(\pmb{k} \circ \pmb{x}) \coloneqq \prod_{i=1}^D \sin(k_i \cdot x_i)$. The transposed problem reads as
\[\hat{h}^s_{\pmb{k}} = \sum_{j=1}^M f^s_j \, \sin(2\pi \, \pmb{k} \odot \pmb{x}_j)\]
for the frequencies $\pmb{k} \in I_{\pmb{N},\mathrm{s}}^D$ with given coefficients $f^s_j \in \mathbb{R}, j = 1,2,\ldots,M$.
Fields
N
- the multibandlimit $(N_1, N_2, \ldots, N_D)$ of the trigonometric polynomial $f^s$.M
- the number of nodes.n
- the oversampling $(n_1, n_2, \ldots, n_D)$ per dimension.m
- the window size. A larger m results in more accuracy but also a higher computational cost.f1
- the NFST flags.f2
- the FFTW flags.init_done
- indicates if the plan is initialized.finalized
- indicates if the plan is finalized.x
- the nodes $x_j \in [0,0.5]^D, \, j = 1, \ldots, M$.f
- the values $f^s(\pmb{x}_j)$ for the NFST or the coefficients $f_j^s \in \mathbb{R}, j = 1, \ldots, M,$ for the transposed NFST.fhat
- the Fourier coefficients $\hat{f}_{\pmb{k}}^s \in \mathbb{R}$ for the NFST or the values $\hat{h}_{\pmb{k}}^s, \pmb{k} \in I_{\pmb{N},\mathrm{s}}^D,$ for the adjoint NFST.plan
- plan (C pointer).
Constructor
NFST{D}( N::NTuple{D,Int32}, M::Int32, n::NTuple{D,Int32}, m::Int32, f1::UInt32, f2::UInt32 ) where {D}
Additional Constructor
NFST( N::NTuple{D,Int32}, M::Int32, n::NTuple{D,Int32}, m::Int32, f1::UInt32, f2::UInt32) where {D}
NFST( N::NTuple{D,Int32}, M::Int32) where {D}
See also
Functions
NFFT3.nfst_trafo
— Functionnfst_trafo(P)
computes the NDST via the fast NFST algorithm for provided nodes $\pmb{x}_j, j =1,2,\dots,M,$ in P.X
and coefficients $\hat{f}_{\pmb{k}}^s \in \mathbb{R}, \pmb{k} \in I_{\pmb{N},s}^D,$ in P.fhat
.
Input
P
- a NFST plan structure.
See also
NFFT3.nfst_trafo_direct
— Functionnfst_trafo_direct(P)
computes the NDST via naive matrix-vector multiplication for provided nodes $\pmb{x}_j, j =1,2,\dots,M,$ in P.X
and coefficients $\hat{f}_{\pmb{k}}^s \in \mathbb{R}, \pmb{k} \in I_{\pmb{N},s}^D,$ in P.fhat
.
Input
P
- a NFST plan structure.
See also
NFFT3.nfst_transposed
— Functionnfst_transposed(P)
computes the transposed NDST via the fast transposed NFST algorithm for provided nodes $\pmb{x}_j, j =1,2,\dots,M,$ in P.X
and coefficients $f_j^s \in \mathbb{R}, j =1,2,\dots,M,$ in P.f
.
Input
P
- a NFST plan structure.
See also
NFFT3.nfst_transposed_direct
— Functionnfst_transposed_direct(P)
computes the transposed NDST via naive matrix-vector multiplication for provided nodes $\pmb{x}_j, j =1,2,\dots,M,$ in P.X
and coefficients $f_j^s \in \mathbb{R}, j =1,2,\dots,M,$ in P.f
.
Input
P
- a NFST plan structure.
See also
NFFT3.nfst_finalize_plan
— Functionnfst_finalize_plan(P)
destroys a NFST plan structure.
Input
P
- a NFST plan structure.
See also
NFFT3.nfst_init
— Functionnfst_init(P)
intialises the NFST plan in C. This function does not have to be called by the user.
Input
p
- a NFST plan structure.
See also
Literature
- [Plonka, Potts, Steidl, Tasche, 2018] G. Plonka, D. Potts, G. Steidl and M. Tasche. Numerical Fourier Analysis: Theory and Applications. Springer Nature Switzerland AG, 2018. doi: 10.1007/978-3-030-04306-3.