You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This package is mainly not intended to be used directly. Instead, developers of packages that implement FFTs (such as [FFTW.jl](https://github.com/JuliaMath/FFTW.jl)) extend the types/functions defined in `AbstractFFTs`. This multiple FFT packages to co-exist with the same underlying `fft(x)` and `plan_fft(x)` interface.
12
+
This package is mainly not intended to be used directly.
13
+
Instead, developers of packages that implement FFTs (such as [FFTW.jl](https://github.com/JuliaMath/FFTW.jl))
14
+
extend the types/functions defined in `AbstractFFTs`.
15
+
This allows multiple FFT packages to co-exist with the same underlying `fft(x)` and `plan_fft(x)` interface.
13
16
14
17
## Developer information
15
18
16
19
To define a new FFT implementation in your own module, you should
17
20
18
-
* Define a new subtype (e.g. `MyPlan`) of `AbstractFFTs.Plan{T}` for FFTs and related transforms on arrays of `T`. This must have a `pinv::Plan` field, initially undefined when a `MyPlan` is created, that is used for caching the inverse plan.
21
+
* Define a new subtype (e.g. `MyPlan`) of `AbstractFFTs.Plan{T}` for FFTs and related transforms on arrays of `T`.
22
+
This must have a `pinv::Plan` field, initially undefined when a `MyPlan` is created, that is used for caching the
23
+
inverse plan.
19
24
20
-
* Define a new method `AbstractFFTs.plan_fft(x, region; kws...)` that returns a `MyPlan` for at least some types of `x` and some set of dimensions `region`.
25
+
* Define a new method `AbstractFFTs.plan_fft(x, region; kws...)` that returns a `MyPlan` for at least some types of
26
+
`x` and some set of dimensions `region`.
21
27
22
28
* Define a method of `A_mul_B!(y, p::MyPlan, x)` that computes the transform `p` of `x` and stores the result in `y`.
23
29
24
-
* If the inverse transform is implemented, you should also define `plan_inv(p::MyPlan)`, which should construct the inverse plan to `p`, and `plan_bfft(x, region; kws...)` for an unnormalized inverse ("backwards") transform of `x`.
30
+
* Define a method of `*(p::MyPlan, x)`, which can simply call your `A_mul_B!` method.
31
+
This is not defined generically in this package due to subtleties that arise for in-place and real-input FFTs.
32
+
33
+
* If the inverse transform is implemented, you should also define `plan_inv(p::MyPlan)`, which should construct the
34
+
inverse plan to `p`, and `plan_bfft(x, region; kws...)` for an unnormalized inverse ("backwards") transform of `x`.
25
35
26
36
* You can also define similar methods of `plan_rfft` and `plan_brfft` for real-input FFTs.
27
37
28
-
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).
38
+
The normalization convention for your FFT should be that it computes yₖ = ∑ⱼ xⱼ exp(-2πi jk/n) for a transform of
39
+
length n, and the "backwards" (unnormalized inverse) transform computes the same thing but with exp(+2πi jk/n).
0 commit comments