The vector-radix FFT algorithm, is a multidimensional fast Fourier transform (FFT) algorithm, which is a generalization of the ordinary Cooley–Tukey FFT algorithm that divides the transform dimensions by arbitrary radices. It breaks a multidimensional (MD) discrete Fourier transform (DFT) down into successively smaller MD DFTs until, ultimately, only trivial MD DFTs need to be evaluated.[1]
The most common multidimensional FFT algorithm is the row-column algorithm, which means transforming the array first in one index and then in the other, see more in FFT. Then a radix-2 direct 2-D FFT has been developed,[2] and it can eliminate 25% of the multiplies as compared to the conventional row-column approach. And this algorithm has been extended to rectangular arrays and arbitrary radices,[3] which is the general vector-radix algorithm.
Vector-radix FFT algorithm can reduce the number of complex multiplications significantly, compared to row-vector algorithm. For example, for a N M {\displaystyle N^{M}} element matrix (M dimensions, and size N on each dimension), the number of complex multiples of vector-radix FFT algorithm for radix-2 is 2 M − 1 2 M N M log 2 N {\displaystyle {\frac {2^{M}-1}{2^{M}}}N^{M}\log _{2}N} , meanwhile, for row-column algorithm, it is M N M 2 log 2 N {\displaystyle {\frac {MN^{M}}{2}}\log _{2}N} . And generally, even larger savings in multiplies are obtained when this algorithm is operated on larger radices and on higher dimensional arrays.[3]
Overall, the vector-radix algorithm significantly reduces the structural complexity of the traditional DFT having a better indexing scheme, at the expense of a slight increase in arithmetic operations. So this algorithm is widely used for many applications in engineering, science, and mathematics, for example, implementations in image processing,[4] and high speed FFT processor designing.[5]
As with the Cooley–Tukey FFT algorithm, the two dimensional vector-radix FFT is derived by decomposing the regular 2-D DFT into sums of smaller DFT's multiplied by "twiddle" factors.
A decimation-in-time (DIT) algorithm means the decomposition is based on time domain x {\displaystyle x} , see more in Cooley–Tukey FFT algorithm.
We suppose the 2-D DFT is defined
where k 1 = 0 , … , N 1 − 1 {\displaystyle k_{1}=0,\dots ,N_{1}-1} ,and k 2 = 0 , … , N 2 − 1 {\displaystyle k_{2}=0,\dots ,N_{2}-1} , and x [ n 1 , n 2 ] {\displaystyle x[n_{1},n_{2}]} is an N 1 × N 2 {\displaystyle N_{1}\times N_{2}} matrix, and W N = exp ( − j 2 π / N ) {\displaystyle W_{N}=\exp(-j2\pi /N)} .
For simplicity, let us assume that N 1 = N 2 = N {\displaystyle N_{1}=N_{2}=N} , and the radix- ( r × r ) {\displaystyle (r\times r)} is such that N / r {\displaystyle N/r} is an integer.
Using the change of variables:
where i = 1 {\displaystyle i=1} or 2 {\displaystyle 2} , then the two dimensional DFT can be written as:[6]
The equation above defines the basic structure of the 2-D DIT radix- ( r × r ) {\displaystyle (r\times r)} "butterfly". (See 1-D "butterfly" in Cooley–Tukey FFT algorithm)
When r = 2 {\displaystyle r=2} , the equation can be broken into four summations, and this leads to:[1]
where S i j ( k 1 , k 2 ) = ∑ n 1 = 0 N / 2 − 1 ∑ n 2 = 0 N / 2 − 1 x [ 2 n 1 + i , 2 n 2 + j ] ⋅ W N / 2 n 1 k 1 W N / 2 n 2 k 2 {\displaystyle S_{ij}(k_{1},k_{2})=\sum _{n_{1}=0}^{N/2-1}\sum _{n_{2}=0}^{N/2-1}x[2n_{1}+i,2n_{2}+j]\cdot W_{N/2}^{n_{1}k_{1}}W_{N/2}^{n_{2}k_{2}}} .
The S i j {\displaystyle S_{ij}} can be viewed as the N / 2 {\displaystyle N/2} -dimensional DFT, each over a subset of the original sample:
Thanks to the periodicity of the complex exponential, we can obtain the following additional identities, valid for 0 ≤ k 1 , k 2 < N 2 {\displaystyle 0\leq k_{1},k_{2}<{\frac {N}{2}}} :
Similarly, a decimation-in-frequency (DIF, also called the Sande–Tukey algorithm) algorithm means the decomposition is based on frequency domain X {\displaystyle X} , see more in Cooley–Tukey FFT algorithm.
where i = 1 {\displaystyle i=1} or 2 {\displaystyle 2} , and the DFT equation can be written as:[6]
The split-radix FFT algorithm has been proved to be a useful method for 1-D DFT. And this method has been applied to the vector-radix FFT to obtain a split vector-radix FFT.[6][7]
In conventional 2-D vector-radix algorithm, we decompose the indices k 1 , k 2 {\displaystyle k_{1},k_{2}} into 4 groups:
By the split vector-radix algorithm, the first three groups remain unchanged, the fourth odd-odd group is further decomposed into another four sub-groups, and seven groups in total:
That means the fourth term in 2-D DIT radix- ( 2 × 2 ) {\displaystyle (2\times 2)} equation, S 11 ( k 1 , k 2 ) W N k 1 + k 2 {\displaystyle S_{11}(k_{1},k_{2})W_{N}^{k_{1}+k_{2}}} becomes:[8]
where A i j ( k 1 , k 2 ) = ∑ n 1 = 0 N / 4 − 1 ∑ n 2 = 0 N / 4 − 1 x [ 4 n 1 + i , 4 n 2 + j ] ⋅ W N / 4 n 1 k 1 W N / 4 n 2 k 2 {\displaystyle A_{ij}(k_{1},k_{2})=\sum _{n_{1}=0}^{N/4-1}\sum _{n_{2}=0}^{N/4-1}x[4n_{1}+i,4n_{2}+j]\cdot W_{N/4}^{n_{1}k_{1}}W_{N/4}^{n_{2}k_{2}}}
The 2-D N by N DFT is then obtained by successive use of the above decomposition, up to the last stage.
It has been shown that the split vector radix algorithm has saved about 30% of the complex multiplications and about the same number of the complex additions for typical 1024 × 1024 {\displaystyle 1024\times 1024} array, compared with the vector-radix algorithm.[7]