Papers
Topics
Authors
Recent
Search
2000 character limit reached

Ozaki-Bailey FFT Methods

Updated 5 July 2026
  • Ozaki-Bailey FFT is a class of reconstruction methods that reformulate problems to recover coefficients or transform values via fast Fourier techniques.
  • Techniques include coefficient extraction from roots using FFT inversion, binary-extension-field transforms for Reed-Solomon codes, and Bluestein-based exact cyclic convolutions.
  • Recent GPU implementations combine Bailey’s six-step decomposition with tensor-core CRT and Kulisch fixed-point accumulation to optimize performance.

Ozaki-Bailey FFT denotes a family of FFT-mediated reconstruction strategies in which a target object—polynomial coefficients, transform values over binary extension fields, or full target-precision Fourier outputs—is recovered from structured evaluations or split subcomputations at transform-friendly nodes. In the recent GPU literature, the term is used explicitly for an emulated 3-D FFT that combines Ozaki Scheme II with the Bailey six-step decomposition (Matsuoka, 28 May 2026). Closely related constructions use the same underlying pattern for coefficient extraction from roots (Thomann, 2016), for FFTs over F2m\mathbb{F}_{2^m} in Reed-Solomon coding (Lin et al., 2015), and for target-precision FFTs obtained from lower-precision exact cyclic convolutions via Bluestein, NTTs, and CRT (Kawakami et al., 31 Mar 2026).

1. Structured evaluation and reconstruction pattern

A recurring feature of Ozaki-Bailey-style methods is that the Fourier or coefficient problem is not attacked in its original form. Instead, the computation is first recast so that a structured transform becomes available. In the polynomial-coefficient setting, the coefficients are recovered by inverse discrete Fourier transform from polynomial values sampled at roots of unity. In the binary-extension-field setting, FFT and IFFT are defined over affine subspaces Vk+βV_k+\beta using a basis built from subspace polynomials. In the target-precision setting, Bluestein converts the DFT into a cyclic convolution, after which Ozaki-style splitting, NTT evaluation, and CRT reconstruction are applied. In the GPU setting, Bailey’s six-step FFT decomposes the transform into small dense DFT stages that can be expressed as GEMMs and then emulated through FP8 tensor cores with CRT/Garner reconstruction (Thomann, 2016, Lin et al., 2015, Kawakami et al., 31 Mar 2026, Matsuoka, 28 May 2026).

This shared structure does not imply a single implementation template. The evaluation nodes, arithmetic domains, and reconstruction mechanisms differ substantially. Roots of unity are used in coefficient recovery; affine subspaces and linearized polynomials are used over F2m\mathbb{F}_{2^m}; cyclic convolution is induced by Bluestein in the lower-precision scheme; and modular tensor-core residue computations with Garner or Kulisch reduction are used in the GPU formulation. This suggests that the unifying content of the term is architectural rather than notational: a problem is reformulated so that a fast transform or transform-like subroutine becomes the central recovery mechanism.

2. Coefficient extraction from roots and symmetric functions

For the polynomial

P(ω)=k=1n(ωωk)=m=0namωm,P(\omega)=\prod_{k=1}^n(\omega-\omega_k)=\sum_{m=0}^n a_m\omega^m,

the FFT-based coefficient algorithm of Katsifarakis and Papageorgiou converts “coefficients from roots” into a discrete Fourier inversion problem. One chooses an integer NN with n<N2nn<N\le 2n, evaluates

pj=P(ωNj)=k=1n(ωNjωk),j=0,,N1,p_j=P(\omega_N^{-j})=\prod_{k=1}^n(\omega_N^{-j}-\omega_k), \qquad j=0,\dots,N-1,

and then recovers the coefficients by

am=1Nj=0N1P(ωNj)ωNjm,0mn.a_m=\frac{1}{N}\sum_{j=0}^{N-1}P(\omega_N^{-j})\,\omega_N^{jm}, \qquad 0\le m\le n.

This is the paper’s Algorithm PP: choose NN, compute the Vk+βV_k+\beta0, apply the FFT, and output the first Vk+βV_k+\beta1 Fourier coefficients. The implementation uses radix-2 Cooley-Tukey FFT, while Mathematica’s FFT can allow Vk+βV_k+\beta2. The product stage costs about Vk+βV_k+\beta3 complex multiplications/additions, the FFT costs Vk+βV_k+\beta4, and with radix-2 and Vk+βV_k+\beta5 the leading complexity is Vk+βV_k+\beta6 floating-point operations with Vk+βV_k+\beta7 storage for tasks other than Vandermondian inversion. For complex roots the paper states roughly between Vk+βV_k+\beta8 and Vk+βV_k+\beta9 floating-point operations, and for real roots roughly between F2m\mathbb{F}_{2^m}0 and F2m\mathbb{F}_{2^m}1. A notable property is that the method is insensitive to root ordering (Thomann, 2016).

The same paper contrasts Algorithm F2m\mathbb{F}_{2^m}2 with the recursive Algorithm F2m\mathbb{F}_{2^m}3,

F2m\mathbb{F}_{2^m}4

and with the Leja-enhanced variant F2m\mathbb{F}_{2^m}5. Algorithm F2m\mathbb{F}_{2^m}6 also has F2m\mathbb{F}_{2^m}7 time and F2m\mathbb{F}_{2^m}8 storage, with leading floating-point cost about F2m\mathbb{F}_{2^m}9 for complex roots and P(ω)=k=1n(ωωk)=m=0namωm,P(\omega)=\prod_{k=1}^n(\omega-\omega_k)=\sum_{m=0}^n a_m\omega^m,0 for real roots, but it is very sensitive to root ordering. Leja ordering is introduced through

P(ω)=k=1n(ωωk)=m=0namωm,P(\omega)=\prod_{k=1}^n(\omega-\omega_k)=\sum_{m=0}^n a_m\omega^m,1

The main empirical conclusion is that for roots on or near circles in the complex plane, Algorithm P(ω)=k=1n(ωωk)=m=0namωm,P(\omega)=\prod_{k=1}^n(\omega-\omega_k)=\sum_{m=0}^n a_m\omega^m,2 is generally superior to P(ω)=k=1n(ωωk)=m=0namωm,P(\omega)=\prod_{k=1}^n(\omega-\omega_k)=\sum_{m=0}^n a_m\omega^m,3, especially for larger P(ω)=k=1n(ωωk)=m=0namωm,P(\omega)=\prod_{k=1}^n(\omega-\omega_k)=\sum_{m=0}^n a_m\omega^m,4 and in the reported tests up to and beyond P(ω)=k=1n(ωωk)=m=0namωm,P(\omega)=\prod_{k=1}^n(\omega-\omega_k)=\sum_{m=0}^n a_m\omega^m,5. The paper repeatedly reports that P(ω)=k=1n(ωωk)=m=0namωm,P(\omega)=\prod_{k=1}^n(\omega-\omega_k)=\sum_{m=0}^n a_m\omega^m,6 is robust for roots on circles, including unit roots; that P(ω)=k=1n(ωωk)=m=0namωm,P(\omega)=\prod_{k=1}^n(\omega-\omega_k)=\sum_{m=0}^n a_m\omega^m,7 can be very accurate for small problems but tends to deteriorate quickly as P(ω)=k=1n(ωωk)=m=0namωm,P(\omega)=\prod_{k=1}^n(\omega-\omega_k)=\sum_{m=0}^n a_m\omega^m,8 increases; and that on the real line both methods degrade, though P(ω)=k=1n(ωωk)=m=0namωm,P(\omega)=\prod_{k=1}^n(\omega-\omega_k)=\sum_{m=0}^n a_m\omega^m,9 may sometimes be slightly better. Scaling by NN0 changes coefficients by NN1, and for roots inside a small circle of radius NN2, choosing NN3 can improve the accuracy of NN4 by NN5–NN6 orders of magnitude, whereas scaling is generally not helpful for NN7.

Because the coefficients are, up to sign, the elementary symmetric functions of the roots, the same method computes symmetric functions efficiently. The paper also applies the coefficient stage to reduced polynomials, Vandermonde inversion, and interpolation. In Vandermonde inversion, replacing the classical recursive coefficient stage by Algorithm NN8 yields the method NN9, and the paper reports that n<N2nn<N\le 2n0 can accurately invert Vandermonde matrices of dimension n<N2nn<N\le 2n1 and more when roots lie on the unit circle. In interpolation, the alternative algorithm n<N2nn<N\le 2n2 first forms the barycentric weights

n<N2nn<N\le 2n3

then evaluates the interpolation polynomial at the n<N2nn<N\le 2n4-th roots of unity and finally recovers the coefficients using the FFT exactly as in Algorithm n<N2nn<N\le 2n5. The reported complexity is about n<N2nn<N\le 2n6 complex additions/multiplications with n<N2nn<N\le 2n7 storage, and n<N2nn<N\le 2n8 is described as superior to the conventional Vandermonde-solve approach n<N2nn<N\le 2n9 in numerical performance.

3. Binary-extension-field transforms and Reed-Solomon decoding

A distinct Ozaki-Bailey-style formulation appears in the FFT over binary extension fields developed for systematic pj=P(ωNj)=k=1n(ωNjωk),j=0,,N1,p_j=P(\omega_N^{-j})=\prod_{k=1}^n(\omega_N^{-j}-\omega_k), \qquad j=0,\dots,N-1,0 Reed-Solomon codes over pj=P(ωNj)=k=1n(ωNjωk),j=0,,N1,p_j=P(\omega_N^{-j})=\prod_{k=1}^n(\omega_N^{-j}-\omega_k), \qquad j=0,\dots,N-1,1, with pj=P(ωNj)=k=1n(ωNjωk),j=0,,N1,p_j=P(\omega_N^{-j})=\prod_{k=1}^n(\omega_N^{-j}-\omega_k), \qquad j=0,\dots,N-1,2 a power of two. The construction uses a nonstandard basis built from subspace polynomials over the nested chain

pj=P(ωNj)=k=1n(ωNjωk),j=0,,N1,p_j=P(\omega_N^{-j})=\prod_{k=1}^n(\omega_N^{-j}-\omega_k), \qquad j=0,\dots,N-1,3

with

pj=P(ωNj)=k=1n(ωNjωk),j=0,,N1,p_j=P(\omega_N^{-j})=\prod_{k=1}^n(\omega_N^{-j}-\omega_k), \qquad j=0,\dots,N-1,4

and

pj=P(ωNj)=k=1n(ωNjωk),j=0,,N1,p_j=P(\omega_N^{-j})=\prod_{k=1}^n(\omega_N^{-j}-\omega_k), \qquad j=0,\dots,N-1,5

The basis is defined by

pj=P(ωNj)=k=1n(ωNjωk),j=0,,N1,p_j=P(\omega_N^{-j})=\prod_{k=1}^n(\omega_N^{-j}-\omega_k), \qquad j=0,\dots,N-1,6

and each basis element satisfies pj=P(ωNj)=k=1n(ωNjωk),j=0,,N1,p_j=P(\omega_N^{-j})=\prod_{k=1}^n(\omega_N^{-j}-\omega_k), \qquad j=0,\dots,N-1,7. This degree-ordered property is what enables a divide-and-conquer FFT over affine subspaces pj=P(ωNj)=k=1n(ωNjωk),j=0,,N1,p_j=P(\omega_N^{-j})=\prod_{k=1}^n(\omega_N^{-j}-\omega_k), \qquad j=0,\dots,N-1,8 (Lin et al., 2015).

The transform recursion exploits

pj=P(ωNj)=k=1n(ωNjωk),j=0,,N1,p_j=P(\omega_N^{-j})=\prod_{k=1}^n(\omega_N^{-j}-\omega_k), \qquad j=0,\dots,N-1,9

so that a length-am=1Nj=0N1P(ωNj)ωNjm,0mn.a_m=\frac{1}{N}\sum_{j=0}^{N-1}P(\omega_N^{-j})\,\omega_N^{jm}, \qquad 0\le m\le n.0 transform reduces to two length-am=1Nj=0N1P(ωNj)ωNjm,0mn.a_m=\frac{1}{N}\sum_{j=0}^{N-1}P(\omega_N^{-j})\,\omega_N^{jm}, \qquad 0\le m\le n.1 transforms on shifted evaluation sets. For am=1Nj=0N1P(ωNj)ωNjm,0mn.a_m=\frac{1}{N}\sum_{j=0}^{N-1}P(\omega_N^{-j})\,\omega_N^{jm}, \qquad 0\le m\le n.2, the addition and multiplication recurrences are

am=1Nj=0N1P(ωNj)ωNjm,0mn.a_m=\frac{1}{N}\sum_{j=0}^{N-1}P(\omega_N^{-j})\,\omega_N^{jm}, \qquad 0\le m\le n.3

hence

am=1Nj=0N1P(ωNj)ωNjm,0mn.a_m=\frac{1}{N}\sum_{j=0}^{N-1}P(\omega_N^{-j})\,\omega_N^{jm}, \qquad 0\le m\le n.4

and both FFT and IFFT run in am=1Nj=0N1P(ωNj)ωNjm,0mn.a_m=\frac{1}{N}\sum_{j=0}^{N-1}P(\omega_N^{-j})\,\omega_N^{jm}, \qquad 0\le m\le n.5.

The coding application is central. With am=1Nj=0N1P(ωNj)ωNjm,0mn.a_m=\frac{1}{N}\sum_{j=0}^{N-1}P(\omega_N^{-j})\,\omega_N^{jm}, \qquad 0\le m\le n.6, encoding and syndrome computation are reorganized so that only transforms of length am=1Nj=0N1P(ωNj)ωNjm,0mn.a_m=\frac{1}{N}\sum_{j=0}^{N-1}P(\omega_N^{-j})\,\omega_N^{jm}, \qquad 0\le m\le n.7 are needed for the parity or syndrome part, avoiding a full length-am=1Nj=0N1P(ωNj)ωNjm,0mn.a_m=\frac{1}{N}\sum_{j=0}^{N-1}P(\omega_N^{-j})\,\omega_N^{jm}, \qquad 0\le m\le n.8 transform in those stages. The syndrome polynomial is extracted from blockwise inverse transforms, while the error-locator polynomial is obtained through a fast half-GCD algorithm on degree-am=1Nj=0N1P(ωNj)ωNjm,0mn.a_m=\frac{1}{N}\sum_{j=0}^{N-1}P(\omega_N^{-j})\,\omega_N^{jm}, \qquad 0\le m\le n.9 polynomials with complexity PP0. The overall decoding pipeline has complexity

PP1

improving upon the cited PP2 benchmark and reaching the best known complexity bound that was established by Justesen in 1976, but now over the practically important family PP3. The authors contrast this with Cooley-Tukey FFTs, which apply only when the field contains enough roots of unity, and with arbitrary-field FFTs of Schönhage/Cantor type, which incur extra PP4 factors. Computer simulations report that the proposed decoder is PP5 times faster than the conventional one for the PP6 Reed-Solomon code over PP7.

4. Target-precision FFTs from lower-precision exact convolutions

Another major development formulates an Ozaki-Bailey-style FFT for target precision by applying the Ozaki scheme to the cyclic convolution inside Bluestein’s FFT. For a length-PP8 DFT,

PP9

Bluestein rewrites the transform as

NN0

The method then treats the induced cyclic convolution as the computational core, splits the inputs into lower-precision pieces in Ozaki fashion,

NN1

and computes every split convolution exactly using 32-bit NTTs together with CRT reconstruction rather than floating-point FFTs (Kawakami et al., 31 Mar 2026).

The exactness condition is what distinguishes this scheme from ordinary floating-point convolution. For a single modulus NN2, exact recovery requires

NN3

which yields

NN4

With two moduli NN5, the split width becomes

NN6

The implementation uses the 32-bit primes

NN7

This larger admissible NN8 is identified as the key reason that the NTT/CRT route yields fewer splits than a floating-point exact-rounding route based on FFT error bounds.

The paper also introduces NTT-domain accumulation. If two split-pair products share the same scale, their transform-domain products can be accumulated before the inverse NTT, reducing the inverse-transform count. With capped splits NN9, the total NTT plus inverse NTT count is at most Vk+βV_k+\beta00; with Vk+βV_k+\beta01, it becomes Vk+βV_k+\beta02 for Vk+βV_k+\beta03 and Vk+βV_k+\beta04 across all tested lengths and matches the stated theoretical minimum Vk+βV_k+\beta05 when Vk+βV_k+\beta06. The method is implemented as a double-precision Bluestein FFT using TS arithmetic for outer complex arithmetic and 32-bit NTTs for exact split convolutions.

The numerical profile is mixed in a characteristic way. Against FFTW double precision, Stockham double precision, Bluestein double precision, TS Stockham FFT, and TS Bluestein FFT, the proposed method usually has the smallest relative error; it does not show a strong growth trend with Vk+βV_k+\beta07; and it substantially improves over TS Bluestein, indicating that the exact split convolutions suppress error accumulation. At the same time, it does not always give the smallest maximum relative error. On an Intel Xeon Platinum 8468 for lengths Vk+βV_k+\beta08–Vk+βV_k+\beta09, the execution time is approximately Vk+βV_k+\beta10–Vk+βV_k+\beta11 that of FFTW’s double-precision FFT, and the paper states that 32-bit NTTs account for approximately Vk+βV_k+\beta12 of the total time.

5. Bailey six-step decomposition, tensor-core CRT, and the Kulisch route

In the 2026 GPU formulation, Ozaki-Bailey FFT is defined explicitly as an emulated 3-D FFT obtained by combining Ozaki Scheme II with Bailey’s six-step decomposition. The hardware motivation is that NVIDIA’s Blackwell Ultra B300 cuts FP64 vector throughput to about Vk+βV_k+\beta13 TFLOPS per GPU, roughly Vk+βV_k+\beta14 below B200, while FFT is treated as a bandwidth-limited primitive that should run near the memory roof on a well-balanced GPU. For a Vk+βV_k+\beta15 3-D FFT, the paper computes memory traffic

Vk+βV_k+\beta16

for Vk+βV_k+\beta17, giving a memory-roof time of about Vk+βV_k+\beta18 ms at Vk+βV_k+\beta19 TB/s HBM bandwidth. Ozaki Scheme II is then applied to the GEMM-represented inner DFT stages of Bailey’s decomposition, routing them through FP8 tensor cores with mantissa-sliced Chinese-remainder reconstruction (Matsuoka, 28 May 2026).

The Bailey six-step factorization uses Vk+βV_k+\beta20; for Vk+βV_k+\beta21, the natural choice is Vk+βV_k+\beta22. The two 1-D FFT stages are implemented as dense DFT matrix multiplications, so in the 3-D case the transform reduces to repeated small GEMM-like kernels. For B300-class hardware, the paper recommends Vk+βV_k+\beta23 moduli for FP64-equivalent accuracy, with tensor-core cost multiplier

Vk+βV_k+\beta24

The crucial observation is that Bailey’s inner dimension Vk+βV_k+\beta25 gives Vk+βV_k+\beta26 for Vk+βV_k+\beta27, while Vk+βV_k+\beta28. Hence the regime is Vk+βV_k+\beta29, so reconstruction overhead no longer amortizes and the third Tensor-Memory Equilibrium parameter, Vk+βV_k+\beta30, becomes the binding cost.

Standard Garner reconstruction is estimated at roughly Vk+βV_k+\beta31 INT32 operations per output, about Vk+βV_k+\beta32 INT32 operations per output for Vk+βV_k+\beta33, and about Vk+βV_k+\beta34 INT32 operations over all FFT outputs. On B300, the effective INT32 throughput for this modular work is estimated at about Vk+βV_k+\beta35 TOPS after Barrett-reduction overhead, yielding a reconstruction time of about Vk+βV_k+\beta36 ms, far above the Vk+βV_k+\beta37 ms memory roof. The paper therefore reformulates CRT reconstruction as a forward CRT sum,

Vk+βV_k+\beta38

and slices each Vk+βV_k+\beta39 into Vk+βV_k+\beta40 8-bit chunks. This creates Phase A, an Vk+βV_k+\beta41 inner-product GEMM on tensor cores, and Phase B, the per-output reduction. For Vk+βV_k+\beta42, the main-text choice is Vk+βV_k+\beta43. Phase A is reported as around Vk+βV_k+\beta44–Vk+βV_k+\beta45 ms; Phase B is the bottleneck if executed naively in FP64.

The paper’s “Kulisch escape route” replaces Phase B by exact fixed-point accumulation on the INT32 SIMT pipe. The reconstruction is written as

Vk+βV_k+\beta46

and because Vk+βV_k+\beta47, each term lands at a fixed bit position. For Vk+βV_k+\beta48, the running sum needs about Vk+βV_k+\beta49 bits, so a Vk+βV_k+\beta50-bit accumulator made from five INT32 registers is sufficient. The implementation model uses five INT32 registers, about four INT32 operations per slice, and roughly Vk+βV_k+\beta51 INT32 operations per output for Vk+βV_k+\beta52. The reported B300 estimate is about Vk+βV_k+\beta53 ms at peak INT32 throughput and Vk+βV_k+\beta54–Vk+βV_k+\beta55 ms at realistic Vk+βV_k+\beta56–Vk+βV_k+\beta57 efficiency.

The resulting parity analysis is expressed as closed-form floors. For FFT, the operational intensity is

Vk+βV_k+\beta58

which for Vk+βV_k+\beta59 gives Vk+βV_k+\beta60, hence the native FP64 floor Vk+βV_k+\beta61. The naive Ozaki-Bailey FP64 floor is

Vk+βV_k+\beta62

which is Vk+βV_k+\beta63 for Vk+βV_k+\beta64. The Kulisch INT32 sub-floor is

Vk+βV_k+\beta65

with an overlap-optimized version reducing this to roughly Vk+βV_k+\beta66. The FP8 floor is Vk+βV_k+\beta67. The projected performance for a Vk+βV_k+\beta68 3-D FFT is then: memory roof Vk+βV_k+\beta69 ms, native B300 FP64 about Vk+βV_k+\beta70 ms, recursive Garner Ozaki-Bailey about Vk+βV_k+\beta71 ms, tensor-core Garner plus naive FP64 Phase B about Vk+βV_k+\beta72 ms, and tensor-core Garner plus Kulisch Phase B about Vk+βV_k+\beta73 ms. The paper is explicit that these are projections, not measured results.

6. Performance regimes, applications, and misconceptions

The various Ozaki-Bailey formulations share a common design logic, but they behave differently because different stages dominate in different regimes. In polynomial coefficient extraction, the FFT is only the final recovery step; the expensive part is the product evaluation

Vk+βV_k+\beta74

and the method is most effective for roots on or near circles (Thomann, 2016). In the binary-extension-field transform, the main gain comes from a basis and recursion that make FFT, IFFT, multiplication, division, and half-GCD compatible over Vk+βV_k+\beta75, allowing Reed-Solomon decoding complexity Vk+βV_k+\beta76 (Lin et al., 2015). In the lower-precision Bluestein scheme, exactness is transferred to the split cyclic convolutions, so performance is governed by NTT counts and NTT efficiency rather than by a conventional FFT kernel (Kawakami et al., 31 Mar 2026). In the GPU formulation, the central issue is not the Bailey decomposition itself but the per-output reconstruction latency: FFT lies in the Vk+βV_k+\beta77 regime, so Vk+βV_k+\beta78 binds unless Phase B is reformulated through Kulisch accumulation (Matsuoka, 28 May 2026).

Several common misconceptions are contradicted by these results. One is that FFT-based recovery is determined only by asymptotic complexity. The coefficient-from-roots paper states that algorithm quality is not determined only by condition number and emphasizes the role of the evaluation-point structure; circle-like distributions are favorable, whereas line-like distributions are much harder (Thomann, 2016). Another is that lower-precision subcomputations necessarily degrade accuracy. The Bluestein-NTT method obtains a double-precision FFT from 32-bit NTTs and reports reduced relative error compared with FFTW double precision and Triple-Single precision arithmetic, while the GPU Kulisch route is presented as preserving full FP64 accuracy through exact fixed-point accumulation with one final conversion (Kawakami et al., 31 Mar 2026, Matsuoka, 28 May 2026). A further misconception is that Cooley-Tukey is the only viable FFT template in coding applications. The binary-extension-field work explicitly constructs a true Vk+βV_k+\beta79 FFT over Vk+βV_k+\beta80 without requiring multiplicative roots of unity, precisely to avoid that restriction (Lin et al., 2015).

Taken together, these results indicate that “Ozaki-Bailey FFT” is best understood as a class of transform-centric reconstruction methods whose practicality depends on where the reformulation places the numerical and architectural burden. In some settings the decisive factor is node geometry and scaling; in others it is basis design over finite fields; in others it is exact modular convolution; and in current GPU work it is whether CRT reduction can be moved off the collapsed FP64 vector path.

Topic to Video (Beta)

No one has generated a video about this topic yet.

Whiteboard

No one has generated a whiteboard explanation for this topic yet.

Follow Topic

Get notified by email when new papers are published related to Ozaki-Bailey FFT.