A general framework for fast Fourier transforms (FFTs) in Julia.
This package is mainly not intended to be used directly.
Instead, developers of packages that implement FFTs (such as FFTW.jl)
extend the types/functions defined in AbstractFFTs
.
This allows multiple FFT packages to co-exist with the same underlying fft(x)
and plan_fft(x)
interface.
To define a new FFT implementation in your own module, you should
-
Define a new subtype (e.g.
MyPlan
) ofAbstractFFTs.Plan{T}
for FFTs and related transforms on arrays ofT
. This must have apinv::Plan
field, initially undefined when aMyPlan
is created, that is used for caching the inverse plan. -
Define a new method
AbstractFFTs.plan_fft(x, region; kws...)
that returns aMyPlan
for at least some types ofx
and some set of dimensionsregion
. -
Define a method of
A_mul_B!(y, p::MyPlan, x)
that computes the transformp
ofx
and stores the result iny
. -
Define a method of
*(p::MyPlan, x)
, which can simply call yourA_mul_B!
method. This is not defined generically in this package due to subtleties that arise for in-place and real-input FFTs. -
If the inverse transform is implemented, you should also define
plan_inv(p::MyPlan)
, which should construct the inverse plan top
, andplan_bfft(x, region; kws...)
for an unnormalized inverse ("backwards") transform ofx
. -
You can also define similar methods of
plan_rfft
andplan_brfft
for real-input FFTs.
The normalization convention for your FFT should be that it computes yₖ = ∑ⱼ xⱼ exp(-2πi jk/n) for a transform of length n, and the "backwards" (unnormalized inverse) transform computes the same thing but with exp(+2πi jk/n).