Cyclotomic fast Fourier transform
The cyclotomic fast Fourier transform is a type of fast Fourier transform algorithm over finite fields.[1] This algorithm first decomposes a DFT into several circular convolutions, and then derives the DFT results from the circular convolution results. When applied to a DFT over [math]\displaystyle{ GF(2^m) }[/math], this algorithm has a very low multiplicative complexity. In practice, since there usually exist efficient algorithms for circular convolutions with specific lengths, this algorithm is very efficient.[2]
Background
The discrete Fourier transform over finite fields finds widespread application in the decoding of error-correcting codes such as BCH codes and Reed–Solomon codes. Generalized from the complex field, a discrete Fourier transform of a sequence [math]\displaystyle{ \{f_i\}_{0}^{N-1} }[/math] over a finite field GF(pm) is defined as
- [math]\displaystyle{ F_j=\sum_{i=0}^{N-1}f_i\alpha^{ij}, 0\le j\le N-1, }[/math]
where [math]\displaystyle{ \alpha }[/math] is the N-th primitive root of 1 in GF(pm). If we define the polynomial representation of [math]\displaystyle{ \{f_i\}_{0}^{N-1} }[/math] as
- [math]\displaystyle{ f(x) = f_0+f_1x+f_2x^2+\cdots+f_{N-1}x^{N-1}=\sum_{0}^{N-1}f_ix^i, }[/math]
it is easy to see that [math]\displaystyle{ F_j }[/math] is simply [math]\displaystyle{ f(\alpha^j) }[/math]. That is, the discrete Fourier transform of a sequence converts it to a polynomial evaluation problem.
Written in matrix format,
- [math]\displaystyle{ \mathbf{F}=\left[\begin{matrix}F_0\\F_1\\ \vdots \\ F_{N-1}\end{matrix}\right]= \left[\begin{matrix} \alpha^0&\alpha^0 &\cdots & \alpha^0\\ \alpha^0 & \alpha^1 &\cdots &\alpha^{N-1}\\ \vdots &\vdots & \ddots & \vdots \\ \alpha^{0} & \alpha^{N-1} &\cdots & \alpha^{(N-1)(N-1)} \end{matrix}\right] \left[\begin{matrix}f_0\\f_1\\\vdots\\f_{N-1}\end{matrix}\right]=\mathcal{F}\mathbf{f}. }[/math]
Direct evaluation of DFT has an [math]\displaystyle{ O(N^2) }[/math] complexity. Fast Fourier transforms are just efficient algorithms evaluating the above matrix-vector product.
Algorithm
First, we define a linearized polynomial over GF(pm) as
- [math]\displaystyle{ L(x) = \sum_{i} l_i x^{p^i}, l_i \in \mathrm{GF}(p^m). }[/math]
[math]\displaystyle{ L(x) }[/math] is called linearized because [math]\displaystyle{ L(x_1+x_2) = L(x_1) + L(x_2) }[/math], which comes from the fact that for elements [math]\displaystyle{ x_1,x_2 \in \mathrm{GF}(p^m), }[/math][math]\displaystyle{ (x_1+x_2)^p=x_1^p+x_2^p. }[/math]
Notice that [math]\displaystyle{ p }[/math] is invertible modulo [math]\displaystyle{ N }[/math] because [math]\displaystyle{ N }[/math] must divide the order [math]\displaystyle{ p^m-1 }[/math] of the multiplicative group of the field [math]\displaystyle{ \mathrm{GF}(p^m) }[/math]. So, the elements [math]\displaystyle{ \{0, 1, 2, \ldots, N-1\} }[/math] can be partitioned into [math]\displaystyle{ l+1 }[/math] cyclotomic cosets modulo [math]\displaystyle{ N }[/math]:
- [math]\displaystyle{ \{0\}, }[/math]
- [math]\displaystyle{ \{k_1, pk_1, p^2k_1, \ldots, p^{m_1-1}k_1\}, }[/math]
- [math]\displaystyle{ \ldots, }[/math]
- [math]\displaystyle{ \{k_l, pk_l, p^2k_l, \ldots, p^{m_l-1}k_l\}, }[/math]
where [math]\displaystyle{ k_i=p^{m_i}k_i \pmod{N} }[/math]. Therefore, the input to the Fourier transform can be rewritten as
- [math]\displaystyle{ f(x)=\sum_{i=0}^l L_i(x^{k_i}),\quad L_i(y) = \sum_{t=0}^{m_i-1}y^{p^t}f_{p^tk_i\bmod{N}}. }[/math]
In this way, the polynomial representation is decomposed into a sum of linear polynomials, and hence [math]\displaystyle{ F_j }[/math] is given by
- [math]\displaystyle{ F_j=f(\alpha^j)=\sum_{i=0}^lL_i(\alpha^{jk_i}) }[/math].
Expanding [math]\displaystyle{ \alpha^{jk_i} \in \mathrm{GF}(p^{m_i}) }[/math] with the proper basis [math]\displaystyle{ \{\beta_{i,0}, \beta_{i,1}, \ldots, \beta_{i,m_i-1}\} }[/math], we have [math]\displaystyle{ \alpha^{jk_i} = \sum_{s=0}^{m_i-1}a_{ijs}\beta_{i,s} }[/math] where [math]\displaystyle{ a_{ijs} \in \mathrm{GF}(p) }[/math], and by the property of the linearized polynomial [math]\displaystyle{ L_i(x) }[/math], we have
- [math]\displaystyle{ F_j=\sum_{i=0}^l\sum_{s=0}^{m_i-1}a_{ijs}\left(\sum_{t=0}^{m_i-1}\beta_{i,s}^{p^t}f_{p^{t}k_i\bmod{N}}\right) }[/math]
This equation can be rewritten in matrix form as [math]\displaystyle{ \mathbf{F}=\mathbf{AL\Pi f} }[/math], where [math]\displaystyle{ \mathbf{A} }[/math] is an [math]\displaystyle{ N\times N }[/math] matrix over GF(p) that contains the elements [math]\displaystyle{ a_{ijs} }[/math], [math]\displaystyle{ \mathbf{L} }[/math] is a block diagonal matrix, and [math]\displaystyle{ \mathbf{\Pi} }[/math] is a permutation matrix regrouping the elements in [math]\displaystyle{ \mathbf{f} }[/math] according to the cyclotomic coset index.
Note that if the normal basis [math]\displaystyle{ \{\gamma_i^{p^0}, \gamma_i^{p^1}, \cdots, \gamma_i^{p^{m_i-1}}\} }[/math] is used to expand the field elements of [math]\displaystyle{ \mathrm{GF}(p^{m_i}) }[/math], the i-th block of [math]\displaystyle{ \mathbf{L} }[/math] is given by:
- [math]\displaystyle{ \mathbf{L}_i= \begin{bmatrix} \gamma_i^{p^0} &\gamma_i^{p^1} &\cdots &\gamma_i^{p^{m_i-1}}\\ \gamma_i^{p^1} &\gamma_i^{p^2} &\cdots &\gamma_i^{p^{0}}\\ \vdots & \vdots & \ddots & \vdots\\ \gamma_i^{p^{m_i-1}} &\gamma_i^{p^0} &\cdots &\gamma_i^{p^{m_i-2}}\\ \end{bmatrix} }[/math]
which is a circulant matrix. It is well known that a circulant matrix-vector product can be efficiently computed by convolutions. Hence we successfully reduce the discrete Fourier transform into short convolutions.
Complexity
When applied to a characteristic-2 field GF(2m), the matrix [math]\displaystyle{ \mathbf{A} }[/math] is just a binary matrix. Only addition is used when calculating the matrix-vector product of [math]\displaystyle{ \mathrm{A} }[/math] and [math]\displaystyle{ \mathrm{L\Pi f} }[/math]. It has been shown that the multiplicative complexity of the cyclotomic algorithm is given by [math]\displaystyle{ O(n(\log_2n)^{\log_2\frac{3}{2}}) }[/math], and the additive complexity is given by [math]\displaystyle{ O(n^2/(\log_2 n)^{\log_2\frac{8}{3}}) }[/math].[2]
References
- ↑ S.V. Fedorenko and P.V. Trifonov, Fedorenko, S. V.; Trifonov, P. V.. (2003). "On Computing the Fast Fourier Transform over Finite Fields". Proceedings of International Workshop on Algebraic and Combinatorial Coding Theory: 108–111. http://dcn.ftk.spbstu.ru/~petert/papers/pushkin2.pdf.
- ↑ 2.0 2.1 Wu, Xuebin; Wang, Ying; Yan, Zhiyuan (2012). "On Algorithms and Complexities of Cyclotomic Fast Fourier Transforms Over Arbitrary Finite Fields". IEEE Transactions on Signal Processing 60 (3): 1149–1158. doi:10.1109/tsp.2011.2178844.
Original source: https://en.wikipedia.org/wiki/Cyclotomic fast Fourier transform.
Read more |