<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://en.formulasearchengine.com/index.php?action=history&amp;feed=atom&amp;title=Cyclic_subspace</id>
	<title>Cyclic subspace - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://en.formulasearchengine.com/index.php?action=history&amp;feed=atom&amp;title=Cyclic_subspace"/>
	<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/index.php?title=Cyclic_subspace&amp;action=history"/>
	<updated>2026-04-25T07:25:41Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0-wmf.28</generator>
	<entry>
		<id>https://en.formulasearchengine.com/index.php?title=Cyclic_subspace&amp;diff=315607&amp;oldid=prev</id>
		<title>en&gt;Mark viking: /* top */ Added wl</title>
		<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/index.php?title=Cyclic_subspace&amp;diff=315607&amp;oldid=prev"/>
		<updated>2014-09-28T22:30:49Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;top: &lt;/span&gt; Added wl&lt;/p&gt;
&lt;a href=&quot;https://en.formulasearchengine.com/index.php?title=Cyclic_subspace&amp;amp;diff=315607&amp;amp;oldid=30288&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>en&gt;Mark viking</name></author>
	</entry>
	<entry>
		<id>https://en.formulasearchengine.com/index.php?title=Cyclic_subspace&amp;diff=30288&amp;oldid=prev</id>
		<title>en&gt;Krishnachandranvn: /* See also */</title>
		<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/index.php?title=Cyclic_subspace&amp;diff=30288&amp;oldid=prev"/>
		<updated>2013-12-30T17:56:00Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;See also&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;The &amp;#039;&amp;#039;&amp;#039;cyclotomic fast Fourier transform&amp;#039;&amp;#039;&amp;#039; is a type of [[fast Fourier transform]] algorithm over [[finite field]]s.&amp;lt;ref&amp;gt;S.V. Fedorenko and P.V. Trifonov, {{cite journal |last=Fedorenko |first=S. V. |first2=P. V.. |last2=Trifonov |url=http://dcn.ftk.spbstu.ru/~petert/papers/pushkin2.pdf |title=On Computing the Fast Fourier Transform over Finite Fields |journal=Proceedings of International Workshop on Algebraic and Combinatorial Coding Theory |pages=108–111|year=2003}}&amp;lt;/ref&amp;gt; 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 GF(2&amp;lt;sup&amp;#039;&amp;#039;&amp;gt;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;lt;/sup&amp;gt;), 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.&amp;lt;ref name=&amp;quot;complexityAnalysis&amp;quot;&amp;gt;{{cite journal | last=Wu | first=Xuebin | last2=Wang | first2=Ying |last3=Yan | first3=Zhiyuan | title=On Algorithms and Complexities of Cyclotomic Fast Fourier Transforms Over Arbitrary Finite Fields| journal=IEEE Transactions on Signal Processing|volume=60|issue=3|year=2012|pages=1149–1158}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
The [[discrete Fourier transform]] over [[finite field]]s finds widespread application in the decoding of [[error-correcting code]]s such as [[BCH codes]] and [[Reed–Solomon error correction|Reed–Solomon codes]]. Generalized from the [[complex number|complex field]], a discrete Fourier transform of a sequence &amp;lt;math&amp;gt;\{f_i\}_{0}^{N-1}&amp;lt;/math&amp;gt; over a finite field GF(&amp;#039;&amp;#039;p&amp;#039;&amp;#039;&amp;lt;sup&amp;gt;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;lt;/sup&amp;gt;) is defined as&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;F_j=\sum_{i=0}^{N-1}f_i\alpha^{ij}, 0\le j\le N-1, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; is the &amp;#039;&amp;#039;N&amp;#039;&amp;#039;-th [[primitive root]] of 1 in GF(&amp;#039;&amp;#039;p&amp;#039;&amp;#039;&amp;lt;sup&amp;gt;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;lt;/sup&amp;gt;). If we define the polynomial representation of &amp;lt;math&amp;gt;\{f_i\}_{0}^{N-1}&amp;lt;/math&amp;gt; as&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;f(x) = f_0+f_1x+f_2x^2+\cdots+f_{N-1}x^{N-1}=\sum_{0}^{N-1}f_ix^i,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
it is easy to see that &amp;lt;math&amp;gt;F_j&amp;lt;/math&amp;gt; is simply &amp;lt;math&amp;gt;f(\alpha^j)&amp;lt;/math&amp;gt;. That is, the discrete Fourier transform of a sequence converts it to a polynomial evaluation problem. &lt;br /&gt;
&lt;br /&gt;
Written in matrix format, &lt;br /&gt;
:&amp;lt;math&amp;gt;\mathbf{F}=\left[\begin{matrix}F_0\\F_1\\ \vdots \\ F_{N-1}\end{matrix}\right]=&lt;br /&gt;
\left[\begin{matrix}&lt;br /&gt;
\alpha^0&amp;amp;\alpha^0 &amp;amp;\cdots &amp;amp; \alpha^0\\&lt;br /&gt;
\alpha^0 &amp;amp; \alpha^1 &amp;amp;\cdots &amp;amp;\alpha^{N-1}\\&lt;br /&gt;
\vdots &amp;amp;\vdots &amp;amp; \ddots &amp;amp; \vdots \\&lt;br /&gt;
\alpha^{0} &amp;amp; \alpha^{N-1} &amp;amp;\cdots &amp;amp; \alpha^{(N-1)(N-1)}&lt;br /&gt;
\end{matrix}\right]&lt;br /&gt;
\left[\begin{matrix}f_0\\f_1\\\vdots\\f_{N-1}\end{matrix}\right]=\mathcal{F}\mathbf{f}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Direct evaluation of DFT has an &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; complexity. Fast Fourier transforms are just efficient algorithms evaluating the above matrix-vector product.&lt;br /&gt;
&lt;br /&gt;
== Algorithm ==&lt;br /&gt;
&lt;br /&gt;
First, we define a [[linearized polynomial]] over GF(p&amp;lt;sup&amp;gt;m&amp;lt;/sup&amp;gt;) as &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;L(x) = \sum_{i} l_i x^{p^i}, l_i \in \mathrm{GF}(p^m).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;L(x)&amp;lt;/math&amp;gt; is called linearized because &amp;lt;math&amp;gt;L(x_1+x_2) = L(x_1) + L(x_2)&amp;lt;/math&amp;gt;, which comes from the fact that for elements &amp;lt;math&amp;gt;x_1,x_2 \in \mathrm{GF}(p^m),&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt;(x_1+x_2)^p=x_1^p+x_2^p.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The elements &amp;lt;math&amp;gt;\{0, 1, 2, \ldots, N-1\}&amp;lt;/math&amp;gt; can be partitioned into &amp;lt;math&amp;gt;l+1&amp;lt;/math&amp;gt; cyclotomic cosets modulo &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt;\{0\},&amp;lt;/math&amp;gt; &lt;br /&gt;
:&amp;lt;math&amp;gt;\{k_1, pk_1, p^2k_1, \ldots, p^{m_1-1}k_1\},&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\ldots,&amp;lt;/math&amp;gt; &lt;br /&gt;
:&amp;lt;math&amp;gt;\{k_l, pk_l, p^2k_l, \ldots, p^{m_l-1}k_l\},&amp;lt;/math&amp;gt;&lt;br /&gt;
and &amp;lt;math&amp;gt;k_i=p^{m_i}k_i \pmod{N}&amp;lt;/math&amp;gt;. Therefore, the Fourier transform can be rewritten as &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;f(x)=\sum_{i=0}^l L_i(x^{k_i}), L_i(y) = \sum_{j=0}^{m_j-1}f_{p^jk_i\bmod{N}}y^{p^j},&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this way, the polynomial representation is decomposed into a sum of linear polynomials, and hence &amp;lt;math&amp;gt;F_j&amp;lt;/math&amp;gt; is given by &lt;br /&gt;
:&amp;lt;math&amp;gt;F_j=f(\alpha^j)=\sum_{i=0}^lL_i(\alpha^{jk_i})&amp;lt;/math&amp;gt;. &lt;br /&gt;
Expanding &amp;lt;math&amp;gt;\alpha^{jk_i} \in \mathrm{GF}(p^{m_i})&amp;lt;/math&amp;gt; with the proper basis &amp;lt;math&amp;gt;\{\beta_{i,0}, \beta_{i,1}, \ldots, \beta_{i,m_i-1}\}&amp;lt;/math&amp;gt;, we have &amp;lt;math&amp;gt;\alpha^{jk_i} = \sum_{s=0}^{m_i-1}a_{ijs}\beta_{i,s}&amp;lt;/math&amp;gt; where &amp;lt;math&amp;gt;a_{ijs} \in \mathrm{GF}(p)&amp;lt;/math&amp;gt;, and by the property of the linearized polynomial &amp;lt;math&amp;gt;L_i(x)&amp;lt;/math&amp;gt;, we have&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;F_j=\sum_{i=0}^l\sum_{s=0}^{m_i-1}a_{ijs}\left(\sum_{t=0}^{m_i-1}\beta_{i,t}^{p^t}f_{p^{t}k_i\bmod{N}}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This equation can be rewritten in matrix form as &amp;lt;math&amp;gt;\mathbf{F}=\mathbf{AL\Pi f}&amp;lt;/math&amp;gt;, where &amp;lt;math&amp;gt;\mathbf{A}&amp;lt;/math&amp;gt; is an &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; matrix over GF(&amp;#039;&amp;#039;p&amp;#039;&amp;#039;) that contains the elements &amp;lt;math&amp;gt;a_{ijs}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\mathbf{L}&amp;lt;/math&amp;gt; is a block diagonal matrix, and &amp;lt;math&amp;gt;\mathbf{\Pi}&amp;lt;/math&amp;gt; is a permutation matrix regrouping the elements in &amp;lt;math&amp;gt;\mathbf{f}&amp;lt;/math&amp;gt; according to the cyclotomic coset index. &lt;br /&gt;
&lt;br /&gt;
Note that if the [[normal basis]] &amp;lt;math&amp;gt;\{\gamma_i^{p^0}, \gamma_i^{p^1}, \cdots, \gamma_i^{p^{m_i-1}}\} &amp;lt;/math&amp;gt; is used to expand the field elements of &amp;lt;math&amp;gt;\mathrm{GF}(p^{m_i})&amp;lt;/math&amp;gt;,  the i-th block of &amp;lt;math&amp;gt;\mathbf{L}&amp;lt;/math&amp;gt; is given by: &lt;br /&gt;
:&amp;lt;math&amp;gt;\mathbf{L}_i=&lt;br /&gt;
\begin{bmatrix}&lt;br /&gt;
  \gamma_i^{p^0}  &amp;amp;\gamma_i^{p^1}  &amp;amp;\cdots  &amp;amp;\gamma_i^{p^{m_i-1}}\\&lt;br /&gt;
  \gamma_i^{p^1}  &amp;amp;\gamma_i^{p^2}  &amp;amp;\cdots  &amp;amp;\gamma_i^{p^{0}}\\&lt;br /&gt;
  \vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
  \gamma_i^{p^{m_i-1}}  &amp;amp;\gamma_i^{p^0}  &amp;amp;\cdots  &amp;amp;\gamma_i^{p^{m_i-2}}\\&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
which is a [[circulant matrix]]. It is well known that a circulant matrix-vector product can be efficiently computed by [[convolution]]s. Hence we successfully reduce the discrete Fourier transform into short convolutions. &lt;br /&gt;
&lt;br /&gt;
== Complexity ==&lt;br /&gt;
&lt;br /&gt;
When applied to a [[Characteristic (algebra)|characteristc]]-2 field GF(2&amp;lt;sup&amp;gt;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;lt;/sup&amp;gt;), the matrix &amp;lt;math&amp;gt;\mathbf{A}&amp;lt;/math&amp;gt; is just a binary matrix. Only addition is used when calculating the matrix-vector product of &amp;lt;math&amp;gt;\mathrm{A}&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\mathrm{L\Pi f}&amp;lt;/math&amp;gt;. It has been shown that the multiplicative complexity of the cyclotomic algorithm is given by &amp;lt;math&amp;gt;O(n(\log_2n)^{\log_2\frac{3}{2}})&amp;lt;/math&amp;gt;, and the additive complexity is given by &amp;lt;math&amp;gt;O(n^2/(\log_2 n)^{\log_2\frac{8}{3}})&amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;complexityAnalysis&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Discrete transforms]]&lt;br /&gt;
[[Category:FFT algorithms]]&lt;/div&gt;</summary>
		<author><name>en&gt;Krishnachandranvn</name></author>
	</entry>
</feed>