<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE document PUBLIC "-//CNX//DTD CNXML 0.5 plus MathML//EN" "http://cnx.rice.edu/cnxml/0.5/DTD/cnxml_mathml.dtd">
<document xmlns="http://cnx.rice.edu/cnxml" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" xmlns:md="http://cnx.rice.edu/mdml/0.4" id="id2255528">
  <name>DFT and FFT: An Algebraic View</name>
  <metadata>
  <md:version>1.9</md:version>
  <md:created>2008/05/27 09:58:50 GMT-5</md:created>
  <md:revised>2008/09/11 16:47:12.933 GMT-5</md:revised>
  <md:authorlist>
      <md:author id="pueschel">
      <md:firstname>Markus</md:firstname>
      
      <md:surname>Pueschel</md:surname>
      <md:email>pueschel@ece.cmu.edu</md:email>
    </md:author>
  </md:authorlist>

  <md:maintainerlist>
    <md:maintainer id="pueschel">
      <md:firstname>Markus</md:firstname>
      
      <md:surname>Pueschel</md:surname>
      <md:email>pueschel@ece.cmu.edu</md:email>
    </md:maintainer>
    <md:maintainer id="cburrus">
      <md:firstname>C.</md:firstname>
      <md:othername>Sidney</md:othername>
      <md:surname>Burrus</md:surname>
      <md:email>csb@rice.edu</md:email>
    </md:maintainer>
    <md:maintainer id="dcwill">
      <md:firstname>Daniel</md:firstname>
      <md:othername>Collins</md:othername>
      <md:surname>Williamson</md:surname>
      <md:email>dwilliamson1285@gmail.com</md:email>
    </md:maintainer>
  </md:maintainerlist>
  
  

  <md:abstract/>
</metadata>
  <content>
    <para id="element-874">by Markus Pueschel, Carnegie Mellon University</para><para id="id2255547">In infinite, or non-periodic, discrete-time signal processing, there
is a strong connection between the <m:math overflow="scroll"><m:mi>z</m:mi></m:math>-transform, Laurent series,
convolution, and the discrete-time Fourier transform (DTFT)
<cnxn target="bid0"/>. As one may expect, a similar connection exists
for the DFT but bears surprises. Namely, it turns out that the proper
framework for the DFT requires modulo operations of polynomials, which
means working with so-called polynomial algebras
<cnxn target="bid1"/>. Associated with polynomial algebras is the Chinese
remainder theorem, which describes the DFT algebraically and can be
used as a tool to concisely derive various FFTs as well as convolution
algorithms <cnxn target="bid2"/>, <cnxn target="bid3"/>, <cnxn target="bid4"/>, <cnxn target="bid5"/>
(see also Chapter <cnxn document="m16333">Winograd’s Short DFT Algorithms</cnxn>). The polynomial algebra
framework was fully developed for signal processing as part of the
algebraic signal processing theory (ASP). ASP identifies the structure
underlying many transforms used in signal processing, provides deep
insight into their properties, and enables the derivation of their
fast algorithms
<cnxn target="bid6"/>, <cnxn target="bid7"/>, <cnxn target="bid8"/>, <cnxn target="bid9"/>. Here we
focus on the algebraic description of the DFT and on the algebraic
derivation of the general-radix Cooley-Tukey FFT from 
<cnxn document="m16330">Factoring the Signal Processing Operators</cnxn>. The derivation will make use of and extend the
<cnxn document="m16327">Polynomial Description of Signals</cnxn>.

We start with motivating the appearance
of modulo operations.</para>
    <para id="id2255640">The <m:math overflow="scroll"><m:mi>z</m:mi></m:math>-transform associates with infinite discrete signals <m:math overflow="scroll"><m:mrow><m:mi>X</m:mi><m:mo>=</m:mo><m:mo>(</m:mo><m:mo>⋯</m:mo><m:mo>,</m:mo><m:mi>x</m:mi><m:mo>(</m:mo><m:mo>-</m:mo><m:mn>1</m:mn><m:mo>)</m:mo><m:mo>,</m:mo><m:mi>x</m:mi><m:mo>(</m:mo><m:mn>0</m:mn><m:mo>)</m:mo><m:mo>,</m:mo><m:mi>x</m:mi><m:mo>(</m:mo><m:mn>1</m:mn><m:mo>)</m:mo><m:mo>,</m:mo><m:mo>⋯</m:mo><m:mo>)</m:mo></m:mrow></m:math> a Laurent series:</para>
    <equation id="uid1">
      <m:math mode="display" overflow="scroll">
        <m:mrow>
          <m:mi>X</m:mi>
          <m:mo>↦</m:mo>
          <m:mi>X</m:mi>
          <m:mrow>
            <m:mo>(</m:mo>
            <m:mi>s</m:mi>
            <m:mo>)</m:mo>
          </m:mrow>
          <m:mo>=</m:mo>
          <m:munder>
            <m:mo>∑</m:mo>
            <m:mrow>
              <m:mi>n</m:mi>
              <m:mo>∈</m:mo>
              <m:mi mathvariant="double-struck">Z</m:mi>
            </m:mrow>
          </m:munder>
          <m:mi>x</m:mi>
          <m:mrow>
            <m:mo>(</m:mo>
            <m:mi>n</m:mi>
            <m:mo>)</m:mo>
          </m:mrow>
          <m:msup>
            <m:mi>s</m:mi>
            <m:mi>n</m:mi>
          </m:msup>
          <m:mo>.</m:mo>
        </m:mrow>
      </m:math>
    </equation>
    <para id="id2256014">Here we used <m:math overflow="scroll"><m:mrow><m:mi>s</m:mi><m:mo>=</m:mo><m:msup><m:mi>z</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup></m:mrow></m:math> to simplify the notation in the following.
The DTFT of <m:math overflow="scroll"><m:mi>X</m:mi></m:math> is the evaluation of <m:math overflow="scroll"><m:mrow><m:mi>X</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math> on the unit circle</para>
    <equation id="uid2">
      <m:math mode="display" overflow="scroll">
        <m:mrow>
          <m:mi>X</m:mi>
          <m:mo>(</m:mo>
          <m:msup>
            <m:mi>e</m:mi>
            <m:mrow>
              <m:mo>-</m:mo>
              <m:mi>j</m:mi>
              <m:mi>ω</m:mi>
            </m:mrow>
          </m:msup>
          <m:mo>)</m:mo>
          <m:mo>,</m:mo>
          <m:mspace width="1.em"/>
          <m:mo>-</m:mo>
          <m:mi>π</m:mi>
          <m:mo>&lt;</m:mo>
          <m:mi>ω</m:mi>
          <m:mo>≤</m:mo>
          <m:mi>π</m:mi>
          <m:mo>.</m:mo>
        </m:mrow>
      </m:math>
    </equation>
    <para id="id2256119">Finally, filtering or (linear) convolution is simply the multiplication
of Laurent series,</para>
    <equation id="uid3">
      <m:math mode="display" overflow="scroll">
        <m:mrow>
          <m:mi>H</m:mi>
          <m:mo>*</m:mo>
          <m:mi>X</m:mi>
          <m:mo>↔</m:mo>
          <m:mi>H</m:mi>
          <m:mo>(</m:mo>
          <m:mi>s</m:mi>
          <m:mo>)</m:mo>
          <m:mi>X</m:mi>
          <m:mo>(</m:mo>
          <m:mi>s</m:mi>
          <m:mo>)</m:mo>
          <m:mo>.</m:mo>
        </m:mrow>
      </m:math>
    </equation>
    <para id="id2256165">For finite signals <m:math overflow="scroll"><m:mrow><m:mi>X</m:mi><m:mo>=</m:mo><m:mo>(</m:mo><m:mi>x</m:mi><m:mo>(</m:mo><m:mn>0</m:mn><m:mo>)</m:mo><m:mo>,</m:mo><m:mo>⋯</m:mo><m:mo>,</m:mo><m:mi>x</m:mi><m:mo>(</m:mo><m:mi>N</m:mi><m:mo>-</m:mo><m:mn>1</m:mn><m:mo>)</m:mo><m:mo>)</m:mo></m:mrow></m:math> one expects that the
equivalent of <cnxn target="uid1"/> becomes a mapping to polynomials of
degree <m:math overflow="scroll"><m:mrow><m:mi>N</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:math>,</para>
    <equation id="uid4">
      <m:math mode="display" overflow="scroll">
        <m:mrow>
          <m:mi>X</m:mi>
          <m:mo>↦</m:mo>
          <m:mi>X</m:mi>
          <m:mrow>
            <m:mo>(</m:mo>
            <m:mi>s</m:mi>
            <m:mo>)</m:mo>
          </m:mrow>
          <m:mo>=</m:mo>
          <m:munderover>
            <m:mo>∑</m:mo>
            <m:mrow>
              <m:mi>n</m:mi>
              <m:mo>=</m:mo>
              <m:mn>0</m:mn>
            </m:mrow>
            <m:mrow>
              <m:mi>N</m:mi>
              <m:mo>-</m:mo>
              <m:mn>1</m:mn>
            </m:mrow>
          </m:munderover>
          <m:mi>x</m:mi>
          <m:mrow>
            <m:mo>(</m:mo>
            <m:mi>n</m:mi>
            <m:mo>)</m:mo>
          </m:mrow>
          <m:msup>
            <m:mi>s</m:mi>
            <m:mi>n</m:mi>
          </m:msup>
          <m:mo>,</m:mo>
        </m:mrow>
      </m:math>
    </equation>
    <para id="id2256301">and that the DFT is an evaluation of these polynomials. Indeed, the
definition of the DFT in <cnxn document="m16333">Winograd’s Short DFT Algorithms</cnxn> shows that</para>
    <equation id="uid5">
      <m:math mode="display" overflow="scroll">
        <m:mrow>
          <m:mi>C</m:mi>
          <m:mrow>
            <m:mo>(</m:mo>
            <m:mi>k</m:mi>
            <m:mo>)</m:mo>
          </m:mrow>
          <m:mo>=</m:mo>
          <m:mi>X</m:mi>
          <m:mrow>
            <m:mo>(</m:mo>
            <m:msubsup>
              <m:mi>W</m:mi>
              <m:mi>N</m:mi>
              <m:mi>k</m:mi>
            </m:msubsup>
            <m:mo>)</m:mo>
          </m:mrow>
          <m:mo>=</m:mo>
          <m:mi>X</m:mi>
          <m:mrow>
            <m:mo>(</m:mo>
            <m:msup>
              <m:mi>e</m:mi>
              <m:mrow>
                <m:mo>-</m:mo>
                <m:mi>j</m:mi>
                <m:mfrac>
                  <m:mrow>
                    <m:mn>2</m:mn>
                    <m:mi>π</m:mi>
                    <m:mi>k</m:mi>
                  </m:mrow>
                  <m:mi>N</m:mi>
                </m:mfrac>
              </m:mrow>
            </m:msup>
            <m:mo>)</m:mo>
          </m:mrow>
          <m:mo>,</m:mo>
          <m:mspace width="1.em"/>
          <m:mn>0</m:mn>
          <m:mo>≤</m:mo>
          <m:mi>k</m:mi>
          <m:mo>&lt;</m:mo>
          <m:mi>N</m:mi>
          <m:mo>,</m:mo>
        </m:mrow>
      </m:math>
    </equation>
    <para id="id2256403">i.e., the DFT computes the evaluations of the polynomial <m:math overflow="scroll"><m:mrow><m:mi>X</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math>
at the <m:math overflow="scroll"><m:mi>n</m:mi></m:math>th roots of unity.</para>
    <para id="id2256443">The problem arises with the equivalent of <cnxn target="uid3"/>,
since the multiplication <m:math overflow="scroll"><m:mrow><m:mi>H</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo><m:mi>X</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math> of two polynomials of degree <m:math overflow="scroll"><m:mrow><m:mi>N</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:math>
yields one of degree <m:math overflow="scroll"><m:mrow><m:mn>2</m:mn><m:mi>N</m:mi><m:mo>-</m:mo><m:mn>2</m:mn></m:mrow></m:math>. Also, it does not coincide with the
circular convolution known to be associated with the DFT. The solution
to both problems is to reduce the product modulo <m:math overflow="scroll"><m:mrow><m:msup><m:mi>s</m:mi><m:mi>n</m:mi></m:msup><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:math>:</para>
    <equation id="uid6">
      <m:math mode="display" overflow="scroll">
        <m:mrow>
          <m:mi>H</m:mi>
          <m:msub>
            <m:mo>*</m:mo>
            <m:mtext>circ</m:mtext>
          </m:msub>
          <m:mi>X</m:mi>
          <m:mo>↔</m:mo>
          <m:mi>H</m:mi>
          <m:mrow>
            <m:mo>(</m:mo>
            <m:mi>s</m:mi>
            <m:mo>)</m:mo>
          </m:mrow>
          <m:mi>X</m:mi>
          <m:mrow>
            <m:mo>(</m:mo>
            <m:mi>s</m:mi>
            <m:mo>)</m:mo>
          </m:mrow>
          <m:mspace width="4.pt"/>
          <m:mtext>mod</m:mtext>
          <m:mspace width="4.pt"/>
          <m:mrow>
            <m:mo>(</m:mo>
            <m:msup>
              <m:mi>s</m:mi>
              <m:mi>n</m:mi>
            </m:msup>
            <m:mo>-</m:mo>
            <m:mn>1</m:mn>
            <m:mo>)</m:mo>
          </m:mrow>
          <m:mo>.</m:mo>
        </m:mrow>
      </m:math>
    </equation>
    <figure id="element-748"><table id="element-865">
<tgroup cols="3"><tbody>
  <row>
    <entry>Concept</entry>
    <entry>Infinite Time</entry>
    <entry>Finite Time</entry>
  </row>
  <row>
    <entry>Signal</entry>
    <entry><m:math overflow="scroll">
        <m:mrow>
          <m:mi>X</m:mi>
          <m:mrow>
            <m:mo>(</m:mo>
            <m:mi>s</m:mi>
            <m:mo>)</m:mo>
          </m:mrow>
          <m:mo>=</m:mo>
          <m:msub>
            <m:mo>∑</m:mo>
            <m:mrow>
              <m:mi>n</m:mi>
              <m:mo>∈</m:mo>
              <m:mi mathvariant="double-struck">Z</m:mi>
            </m:mrow>
          </m:msub>
          <m:mi>x</m:mi>
          <m:mrow>
            <m:mo>(</m:mo>
            <m:mi>n</m:mi>
            <m:mo>)</m:mo>
          </m:mrow>
          <m:msup>
            <m:mi>s</m:mi>
            <m:mi>n</m:mi>
          </m:msup>
        </m:mrow>
      </m:math>
    </entry>
    <entry> <m:math overflow="scroll">
        <m:mrow>
          <m:msubsup>
            <m:mo>∑</m:mo>
            <m:mrow>
              <m:mi>n</m:mi>
              <m:mo>=</m:mo>
              <m:mn>0</m:mn>
            </m:mrow>
            <m:mrow>
              <m:mi>N</m:mi>
              <m:mo>-</m:mo>
              <m:mn>1</m:mn>
            </m:mrow>
          </m:msubsup>
          <m:mi>x</m:mi>
          <m:mrow>
            <m:mo>(</m:mo>
            <m:mi>n</m:mi>
            <m:mo>)</m:mo>
          </m:mrow>
          <m:msup>
            <m:mi>s</m:mi>
            <m:mi>n</m:mi>
          </m:msup>
        </m:mrow>
      </m:math>
    </entry>
  </row>
  <row>
    <entry>Filter</entry>
    <entry> <m:math overflow="scroll">
        <m:mrow>
          <m:mi>H</m:mi>
          <m:mrow>
            <m:mo>(</m:mo>
            <m:mi>s</m:mi>
            <m:mo>)</m:mo>
          </m:mrow>
          <m:mo>=</m:mo>
          <m:msub>
            <m:mo>∑</m:mo>
            <m:mrow>
              <m:mi>n</m:mi>
              <m:mo>∈</m:mo>
              <m:mi mathvariant="double-struck">Z</m:mi>
            </m:mrow>
          </m:msub>
          <m:mi>h</m:mi>
          <m:mrow>
            <m:mo>(</m:mo>
            <m:mi>n</m:mi>
            <m:mo>)</m:mo>
          </m:mrow>
          <m:msup>
            <m:mi>s</m:mi>
            <m:mi>n</m:mi>
          </m:msup>
        </m:mrow>
      </m:math></entry>
    <entry><m:math overflow="scroll">
        <m:mrow>
          <m:msubsup>
            <m:mo>∑</m:mo>
            <m:mrow>
              <m:mi>n</m:mi>
              <m:mo>=</m:mo>
              <m:mn>0</m:mn>
            </m:mrow>
            <m:mrow>
              <m:mi>N</m:mi>
              <m:mo>-</m:mo>
              <m:mn>1</m:mn>
            </m:mrow>
          </m:msubsup>
          <m:mi>h</m:mi>
          <m:mrow>
            <m:mo>(</m:mo>
            <m:mi>n</m:mi>
            <m:mo>)</m:mo>
          </m:mrow>
          <m:msup>
            <m:mi>s</m:mi>
            <m:mi>n</m:mi>
          </m:msup>
        </m:mrow>
      </m:math></entry>
  </row>
  <row>
    <entry>Convolution</entry>
    <entry> <m:math overflow="scroll">
        <m:mrow>
          <m:mi>H</m:mi>
          <m:mo>(</m:mo>
          <m:mi>s</m:mi>
          <m:mo>)</m:mo>
          <m:mi>X</m:mi>
          <m:mo>(</m:mo>
          <m:mi>s</m:mi>
          <m:mo>)</m:mo>
        </m:mrow>
      </m:math></entry>
    <entry>
      <m:math overflow="scroll">
        <m:mrow>
          <m:mi>H</m:mi>
          <m:mrow>
            <m:mo>(</m:mo>
            <m:mi>s</m:mi>
            <m:mo>)</m:mo>
          </m:mrow>
          <m:mi>X</m:mi>
          <m:mrow>
            <m:mo>(</m:mo>
            <m:mi>s</m:mi>
            <m:mo>)</m:mo>
          </m:mrow>
          <m:mtext>mod</m:mtext>
          <m:mrow>
            <m:mo>(</m:mo>
            <m:msup>
              <m:mi>s</m:mi>
              <m:mi>n</m:mi>
            </m:msup>
            <m:mo>-</m:mo>
            <m:mn>1</m:mn>
            <m:mo>)</m:mo>
          </m:mrow>
        </m:mrow>
      </m:math>
    </entry>
  </row>
  <row>
    <entry>Fourier transform</entry>
    <entry><m:math overflow="scroll">
        <m:mrow>
          <m:mtext>DTFT:</m:mtext>
          <m:mspace width="4.pt"/>
          <m:mi>X</m:mi>
          <m:mo>(</m:mo>
          <m:msup>
            <m:mi>e</m:mi>
            <m:mrow>
              <m:mo>-</m:mo>
              <m:mi>j</m:mi>
              <m:mi>ω</m:mi>
            </m:mrow>
          </m:msup>
          <m:mo>)</m:mo>
          <m:mo>,</m:mo>
          <m:mspace width="1.em"/>
          <m:mo>-</m:mo>
          <m:mi>π</m:mi>
          <m:mo>&lt;</m:mo>
          <m:mi>ω</m:mi>
          <m:mo>≤</m:mo>
          <m:mi>π</m:mi>
        </m:mrow>
      </m:math></entry>
    <entry><m:math overflow="scroll">
        <m:mrow>
          <m:mtext>DFT:</m:mtext>
          <m:mspace width="4.pt"/>
          <m:mi>X</m:mi>
          <m:mo>(</m:mo>
          <m:msup>
            <m:mi>e</m:mi>
            <m:mrow>
              <m:mo>-</m:mo>
              <m:mi>j</m:mi>
              <m:mfrac>
                <m:mrow>
                  <m:mn>2</m:mn>
                  <m:mi>π</m:mi>
                  <m:mi>k</m:mi>
                </m:mrow>
                <m:mi>n</m:mi>
              </m:mfrac>
            </m:mrow>
          </m:msup>
          <m:mo>)</m:mo>
          <m:mo>,</m:mo>
          <m:mspace width="1.em"/>
          <m:mn>0</m:mn>
          <m:mo>≤</m:mo>
          <m:mi>k</m:mi>
          <m:mo>&lt;</m:mo>
          <m:mi>n</m:mi>
        </m:mrow>
      </m:math></entry>
  </row>
</tbody>







</tgroup>
<caption>Infinite and finite discrete time signal processing.</caption>
</table></figure><para id="id2256601">The resulting polynomial then has again degree <m:math overflow="scroll"><m:mrow><m:mi>N</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:math> and this form of
convolution becomes equivalent to circular convolution of the
polynomial coefficients. We also observe that the evaluation points in
<cnxn target="uid5"/> are precisely the roots of <m:math overflow="scroll"><m:mrow><m:msup><m:mi>s</m:mi><m:mi>n</m:mi></m:msup><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:math>. This connection will
become clear in this chapter.</para>
    <para id="id2256649">The discussion is summarized in <cnxn target="element-748"/>.</para>
    <para id="id2256656">The proper framework to describe the multiplication of polynomials
modulo a fixed polynomial are polynomial algebras. Together with the
Chinese remainder theorem, they provide the theoretical underpinning
for the DFT and the Cooley-Tukey FFT.</para>
    <para id="id2256663">In this chapter, the DFT will naturally arise as a linear mapping with
respect to chosen bases, i.e., as a matrix. Indeed, the definition
shows that if all input and outputs are collected into
vectors <m:math overflow="scroll"><m:mrow><m:mi>X</m:mi><m:mo>=</m:mo><m:mo>(</m:mo><m:mi>X</m:mi><m:mo>(</m:mo><m:mn>0</m:mn><m:mo>)</m:mo><m:mo>,</m:mo><m:mo>⋯</m:mo><m:mo>,</m:mo><m:mi>X</m:mi><m:mo>(</m:mo><m:mi>N</m:mi><m:mo>-</m:mo><m:mn>1</m:mn><m:mo>)</m:mo><m:mo>)</m:mo></m:mrow></m:math> and <m:math overflow="scroll"><m:mrow><m:mi>C</m:mi><m:mo>=</m:mo><m:mo>(</m:mo><m:mi>C</m:mi><m:mo>(</m:mo><m:mn>0</m:mn><m:mo>)</m:mo><m:mo>,</m:mo><m:mo>⋯</m:mo><m:mi>C</m:mi><m:mo>(</m:mo><m:mi>N</m:mi><m:mo>-</m:mo><m:mn>1</m:mn><m:mo>)</m:mo><m:mo>)</m:mo></m:mrow></m:math>, then
<cnxn target=""/> is equivalent to</para>
    <equation id="uid7">
      <m:math mode="display" overflow="scroll">
        <m:mrow>
          <m:mi>C</m:mi>
          <m:mo>=</m:mo>
          <m:msub>
            <m:mo form="prefix">DFT</m:mo>
            <m:mi>N</m:mi>
          </m:msub>
          <m:mi>X</m:mi>
          <m:mo>,</m:mo>
        </m:mrow>
      </m:math>
    </equation>
    <para id="id2256787">where</para>
    <equation id="uid8">
      <m:math mode="display" overflow="scroll">
        <m:mrow>
          <m:msub>
            <m:mo form="prefix">DFT</m:mo>
            <m:mi>N</m:mi>
          </m:msub>
          <m:mo>=</m:mo>
          <m:msub>
            <m:mrow>
              <m:mo>[</m:mo>
              <m:msubsup>
                <m:mi>W</m:mi>
                <m:mi>N</m:mi>
                <m:mrow>
                  <m:mi>k</m:mi>
                  <m:mi>n</m:mi>
                </m:mrow>
              </m:msubsup>
              <m:mo>]</m:mo>
            </m:mrow>
            <m:mrow>
              <m:mn>0</m:mn>
              <m:mo>≤</m:mo>
              <m:mi>k</m:mi>
              <m:mo>,</m:mo>
              <m:mi>n</m:mi>
              <m:mo>&lt;</m:mo>
              <m:mi>N</m:mi>
            </m:mrow>
          </m:msub>
          <m:mo>.</m:mo>
        </m:mrow>
      </m:math>
    </equation>
    <para id="id2256856">The matrix point of view is adopted in the FFT books
<cnxn target="bid10"/>, <cnxn target="bid11"/>.</para>
    <section id="uid9">
      <name>Polynomial Algebras and the DFT</name>
      <para id="id2256880">In this section we introduce polynomial algebras and explain how they
are associated to transforms. Then we identify this connection for the
DFT. Later we use polynomial algebras to derive the Cooley-Tukey FFT.</para>
      <para id="id2256887">For further background on the mathematics in this section and
polynomial algebras in particular, we refer to <cnxn target="bid1"/>.</para>
      <section id="uid10">
        <name>Polynomial Algebra</name>
        <para id="id2256904">An algebra <m:math overflow="scroll"><m:mi mathvariant="script">A</m:mi></m:math> is a vector space that also provides a
multiplication of its elements such that the distributivity law holds
(see <cnxn target="bid1"/> for a complete definition). Examples include
the sets of complex or real numbers <m:math overflow="scroll"><m:mi mathvariant="double-struck">C</m:mi></m:math> or <m:math overflow="scroll"><m:mi mathvariant="double-struck">R</m:mi></m:math>, and the sets of
complex or real polynomials in the variable <m:math overflow="scroll"><m:mi>s</m:mi></m:math>: <m:math overflow="scroll"><m:mrow><m:mi mathvariant="double-struck">C</m:mi><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo></m:mrow></m:math> or <m:math overflow="scroll"><m:mrow><m:mi mathvariant="double-struck">R</m:mi><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo></m:mrow></m:math>.</para>
        <para id="id2256996">The key player in this chapter is the <emphasis>polynomial algebra</emphasis>. Given
a fixed polynomial <m:math overflow="scroll"><m:mrow><m:mi>P</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math> of degree <m:math overflow="scroll"><m:mrow><m:mo form="prefix">deg</m:mo><m:mo>(</m:mo><m:mi>P</m:mi><m:mo>)</m:mo><m:mo>=</m:mo><m:mi>N</m:mi></m:mrow></m:math>, we define a
polynomial algebra as the set</para>
        <equation id="id2257045">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mi mathvariant="double-struck">C</m:mi>
              <m:mo>[</m:mo>
              <m:mi>s</m:mi>
              <m:mo>]</m:mo>
              <m:mo>/</m:mo>
              <m:mi>P</m:mi>
              <m:mo>(</m:mo>
              <m:mi>s</m:mi>
              <m:mo>)</m:mo>
              <m:mo>=</m:mo>
              <m:mo>{</m:mo>
              <m:mi>X</m:mi>
              <m:mo>(</m:mo>
              <m:mi>s</m:mi>
              <m:mo>)</m:mo>
              <m:mo>∣</m:mo>
              <m:mo form="prefix">deg</m:mo>
              <m:mo>(</m:mo>
              <m:mi>X</m:mi>
              <m:mo>)</m:mo>
              <m:mo>&lt;</m:mo>
              <m:mo form="prefix">deg</m:mo>
              <m:mo>(</m:mo>
              <m:mi>P</m:mi>
              <m:mo>)</m:mo>
              <m:mo>}</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2257116">of polynomials of degree smaller than <m:math overflow="scroll"><m:mi>N</m:mi></m:math> with addition and
multiplication modulo <m:math overflow="scroll"><m:mi>P</m:mi></m:math>. Viewed as a vector space, <m:math overflow="scroll"><m:mrow><m:mi mathvariant="double-struck">C</m:mi><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo><m:mo>/</m:mo><m:mi>P</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math>
hence has dimension <m:math overflow="scroll"><m:mi>N</m:mi></m:math>.</para>
        <para id="id2257180">Every polynomial <m:math overflow="scroll"><m:mrow><m:mi>X</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo><m:mo>∈</m:mo><m:mi mathvariant="double-struck">C</m:mi><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo></m:mrow></m:math> is reduced to a unique polynomial
<m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math> modulo <m:math overflow="scroll"><m:mrow><m:mi>P</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math> of degree smaller than <m:math overflow="scroll"><m:mi>N</m:mi></m:math>. <m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math> is computed
using division with rest, namely</para>
        <equation id="id2257271">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mi>X</m:mi>
              <m:mo>(</m:mo>
              <m:mi>s</m:mi>
              <m:mo>)</m:mo>
              <m:mo>=</m:mo>
              <m:mi>Q</m:mi>
              <m:mo>(</m:mo>
              <m:mi>s</m:mi>
              <m:mo>)</m:mo>
              <m:mi>P</m:mi>
              <m:mo>(</m:mo>
              <m:mi>s</m:mi>
              <m:mo>)</m:mo>
              <m:mo>+</m:mo>
              <m:mi>R</m:mi>
              <m:mo>(</m:mo>
              <m:mi>s</m:mi>
              <m:mo>)</m:mo>
              <m:mo>,</m:mo>
              <m:mspace width="1.em"/>
              <m:mo form="prefix">deg</m:mo>
              <m:mo>(</m:mo>
              <m:mi>R</m:mi>
              <m:mo>)</m:mo>
              <m:mo>&lt;</m:mo>
              <m:mo form="prefix">deg</m:mo>
              <m:mo>(</m:mo>
              <m:mi>P</m:mi>
              <m:mo>)</m:mo>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2257350">Regarding this equation modulo <m:math overflow="scroll"><m:mi>P</m:mi></m:math>, <m:math overflow="scroll"><m:mrow><m:mi>P</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math> becomes zero, and we get</para>
        <equation id="id2257381">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mi>X</m:mi>
              <m:mo>(</m:mo>
              <m:mi>s</m:mi>
              <m:mo>)</m:mo>
              <m:mo>≡</m:mo>
              <m:mi>R</m:mi>
              <m:mo>(</m:mo>
              <m:mi>s</m:mi>
              <m:mo>)</m:mo>
              <m:mspace width="4.pt"/>
              <m:mtext>mod</m:mtext>
              <m:mspace width="4.pt"/>
              <m:mi>P</m:mi>
              <m:mo>(</m:mo>
              <m:mi>s</m:mi>
              <m:mo>)</m:mo>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2257429">We read this equation as “<m:math overflow="scroll"><m:mrow><m:mi>X</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math> is congruent (or equal) <m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math>
modulo <m:math overflow="scroll"><m:mrow><m:mi>P</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math>.” We will also write <m:math overflow="scroll"><m:mrow><m:mi>X</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo><m:mspace width="4.pt"/><m:mtext>mod</m:mtext><m:mspace width="4.pt"/><m:mi>P</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math> to denote
that <m:math overflow="scroll"><m:mrow><m:mi>X</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math> is reduced modulo <m:math overflow="scroll"><m:mrow><m:mi>P</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math>. Obviously,</para>
        <equation id="id2257550">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mi>P</m:mi>
              <m:mo>(</m:mo>
              <m:mi>s</m:mi>
              <m:mo>)</m:mo>
              <m:mo>≡</m:mo>
              <m:mn>0</m:mn>
              <m:mspace width="4.pt"/>
              <m:mtext>mod</m:mtext>
              <m:mspace width="4.pt"/>
              <m:mi>P</m:mi>
              <m:mo>(</m:mo>
              <m:mi>s</m:mi>
              <m:mo>)</m:mo>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2257592">As a simple example we consider <m:math overflow="scroll"><m:mrow><m:mi mathvariant="script">A</m:mi><m:mo>=</m:mo><m:mi mathvariant="double-struck">C</m:mi><m:mrow><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo></m:mrow><m:mo>/</m:mo><m:mrow><m:mo>(</m:mo><m:msup><m:mi>s</m:mi><m:mn>2</m:mn></m:msup><m:mo>-</m:mo><m:mn>1</m:mn><m:mo>)</m:mo></m:mrow></m:mrow></m:math>, which has
dimension 2. A possible basis is <m:math overflow="scroll"><m:mrow><m:mi>b</m:mi><m:mo>=</m:mo><m:mo>(</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math>. In <m:math overflow="scroll"><m:mi mathvariant="script">A</m:mi></m:math>, for example,
<m:math overflow="scroll"><m:mrow><m:mi>s</m:mi><m:mo>·</m:mo><m:mrow><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>+</m:mo><m:mn>1</m:mn><m:mo>)</m:mo></m:mrow><m:mo>=</m:mo><m:msup><m:mi>s</m:mi><m:mn>2</m:mn></m:msup><m:mo>+</m:mo><m:mi>s</m:mi><m:mo>≡</m:mo><m:mi>s</m:mi><m:mo>+</m:mo><m:mn>1</m:mn><m:mspace width="4.pt"/><m:mtext>mod</m:mtext><m:mspace width="4.pt"/><m:mrow><m:mo>(</m:mo><m:msup><m:mi>s</m:mi><m:mn>2</m:mn></m:msup><m:mo>-</m:mo><m:mn>1</m:mn><m:mo>)</m:mo></m:mrow></m:mrow></m:math>, obtained
through division with rest</para>
        <equation id="id2257749">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msup>
                <m:mi>s</m:mi>
                <m:mn>2</m:mn>
              </m:msup>
              <m:mo>+</m:mo>
              <m:mi>s</m:mi>
              <m:mo>=</m:mo>
              <m:mn>1</m:mn>
              <m:mo>·</m:mo>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:msup>
                  <m:mi>s</m:mi>
                  <m:mn>2</m:mn>
                </m:msup>
                <m:mo>-</m:mo>
                <m:mn>1</m:mn>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mo>+</m:mo>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:mi>s</m:mi>
                <m:mo>+</m:mo>
                <m:mn>1</m:mn>
                <m:mo>)</m:mo>
              </m:mrow>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2257809">or simply by replacing <m:math overflow="scroll"><m:msup><m:mi>s</m:mi><m:mn>2</m:mn></m:msup></m:math> with 1 (since <m:math overflow="scroll"><m:mrow><m:msup><m:mi>s</m:mi><m:mn>2</m:mn></m:msup><m:mo>-</m:mo><m:mn>1</m:mn><m:mo>=</m:mo><m:mn>0</m:mn></m:mrow></m:math> implies <m:math overflow="scroll"><m:mrow><m:msup><m:mi>s</m:mi><m:mn>2</m:mn></m:msup><m:mo>=</m:mo><m:mn>1</m:mn></m:mrow></m:math>).</para>
      </section>
      <section id="uid11">
        <name>Chinese Remainder Theorem (CRT)</name>
        <para id="id2257881">Assume <m:math overflow="scroll"><m:mrow><m:mi>P</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo><m:mo>=</m:mo><m:mi>Q</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo><m:mi>R</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math> factors into two coprime (no common factors)
polynomials <m:math overflow="scroll"><m:mi>Q</m:mi></m:math> and <m:math overflow="scroll"><m:mi>R</m:mi></m:math>. Then the Chinese remainder theorem (CRT) for
polynomials is the linear mapping<note type="footnote">More precisely, isomorphism
of algebras or isomorphism of <m:math overflow="scroll"><m:mi mathvariant="script">A</m:mi></m:math>-modules.</note></para>
        <equation id="id2257960">
          <m:math mode="display" overflow="scroll">
            <m:mtable>
              <m:mtr>
                <m:mtd columnalign="right">
                  <m:mrow>
                    <m:mi>Δ</m:mi>
                    <m:mo>:</m:mo>
                    <m:mspace width="4pt"/>
                    <m:mi mathvariant="double-struck">C</m:mi>
                    <m:mo>[</m:mo>
                    <m:mi>s</m:mi>
                    <m:mo>]</m:mo>
                    <m:mo>/</m:mo>
                    <m:mi>P</m:mi>
                    <m:mo>(</m:mo>
                    <m:mi>s</m:mi>
                    <m:mo>)</m:mo>
                  </m:mrow>
                </m:mtd>
                <m:mtd>
                  <m:mo>→</m:mo>
                </m:mtd>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:mi mathvariant="double-struck">C</m:mi>
                    <m:mo>[</m:mo>
                    <m:mi>s</m:mi>
                    <m:mo>]</m:mo>
                    <m:mo>/</m:mo>
                    <m:mi>Q</m:mi>
                    <m:mo>(</m:mo>
                    <m:mi>s</m:mi>
                    <m:mo>)</m:mo>
                    <m:mo>⊕</m:mo>
                    <m:mi mathvariant="double-struck">C</m:mi>
                    <m:mo>[</m:mo>
                    <m:mi>s</m:mi>
                    <m:mo>]</m:mo>
                    <m:mo>/</m:mo>
                    <m:mi>R</m:mi>
                    <m:mo>(</m:mo>
                    <m:mi>s</m:mi>
                    <m:mo>)</m:mo>
                    <m:mo>,</m:mo>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
              <m:mtr>
                <m:mtd columnalign="right">
                  <m:mrow>
                    <m:mi>X</m:mi>
                    <m:mo>(</m:mo>
                    <m:mi>s</m:mi>
                    <m:mo>)</m:mo>
                  </m:mrow>
                </m:mtd>
                <m:mtd>
                  <m:mo>↦</m:mo>
                </m:mtd>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:mo>(</m:mo>
                    <m:mi>X</m:mi>
                    <m:mo>(</m:mo>
                    <m:mi>s</m:mi>
                    <m:mo>)</m:mo>
                    <m:mspace width="4.pt"/>
                    <m:mtext>mod</m:mtext>
                    <m:mspace width="4.pt"/>
                    <m:mi>Q</m:mi>
                    <m:mo>(</m:mo>
                    <m:mi>s</m:mi>
                    <m:mo>)</m:mo>
                    <m:mo>,</m:mo>
                    <m:mi>X</m:mi>
                    <m:mo>(</m:mo>
                    <m:mi>s</m:mi>
                    <m:mo>)</m:mo>
                    <m:mspace width="4.pt"/>
                    <m:mtext>mod</m:mtext>
                    <m:mspace width="4.pt"/>
                    <m:mi>R</m:mi>
                    <m:mo>(</m:mo>
                    <m:mi>s</m:mi>
                    <m:mo>)</m:mo>
                    <m:mo>)</m:mo>
                    <m:mo>.</m:mo>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
            </m:mtable>
          </m:math>
        </equation>
        <para id="id2258142">Here, <m:math overflow="scroll"><m:mo>⊕</m:mo></m:math> is the Cartesian product of vector spaces with
elementwise operation (also called outer direct sum). In words, the CRT
asserts that computing (addition, multiplication, scalar
multiplication) in <m:math overflow="scroll"><m:mrow><m:mi mathvariant="double-struck">C</m:mi><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo><m:mo>/</m:mo><m:mi>P</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math> is equivalent to computing in parallel
in <m:math overflow="scroll"><m:mrow><m:mi mathvariant="double-struck">C</m:mi><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo><m:mo>/</m:mo><m:mi>Q</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math> and <m:math overflow="scroll"><m:mrow><m:mi mathvariant="double-struck">C</m:mi><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo><m:mo>/</m:mo><m:mi>R</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math>.</para>
        <para id="id2258249">If we choose bases <m:math overflow="scroll"><m:mrow><m:mi>b</m:mi><m:mo>,</m:mo><m:mi>c</m:mi><m:mo>,</m:mo><m:mi>d</m:mi></m:mrow></m:math> in the three polynomial algebras, then
<m:math overflow="scroll"><m:mi>Δ</m:mi></m:math> can be expressed as a matrix. As usual with linear mappings,
this matrix is obtained by mapping every element of <m:math overflow="scroll"><m:mi>b</m:mi></m:math> with <m:math overflow="scroll"><m:mi>Δ</m:mi></m:math>,
expressing it in the concatenation <m:math overflow="scroll"><m:mrow><m:mi>c</m:mi><m:mo>∪</m:mo><m:mi>d</m:mi></m:mrow></m:math> of the bases <m:math overflow="scroll"><m:mi>c</m:mi></m:math> and <m:math overflow="scroll"><m:mi>d</m:mi></m:math>,
and writing the results into the columns of the matrix.</para>
        <para id="id2258336">As an example, we consider again the polynomial <m:math overflow="scroll"><m:mrow><m:mi>P</m:mi><m:mrow><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow><m:mo>=</m:mo><m:msup><m:mi>s</m:mi><m:mn>2</m:mn></m:msup><m:mo>-</m:mo><m:mn>1</m:mn><m:mo>=</m:mo><m:mrow><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>-</m:mo><m:mn>1</m:mn><m:mo>)</m:mo></m:mrow><m:mrow><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>+</m:mo><m:mn>1</m:mn><m:mo>)</m:mo></m:mrow></m:mrow></m:math> and the CRT decomposition</para>
        <equation id="id2258398">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mi>Δ</m:mi>
              <m:mo>:</m:mo>
              <m:mspace width="4pt"/>
              <m:mi mathvariant="double-struck">C</m:mi>
              <m:mrow>
                <m:mo>[</m:mo>
                <m:mi>s</m:mi>
                <m:mo>]</m:mo>
              </m:mrow>
              <m:mo>/</m:mo>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:msup>
                  <m:mi>s</m:mi>
                  <m:mn>2</m:mn>
                </m:msup>
                <m:mo>-</m:mo>
                <m:mn>1</m:mn>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mo>→</m:mo>
              <m:mi mathvariant="double-struck">C</m:mi>
              <m:mrow>
                <m:mo>[</m:mo>
                <m:mi>s</m:mi>
                <m:mo>]</m:mo>
              </m:mrow>
              <m:mo>/</m:mo>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:mi>x</m:mi>
                <m:mo>-</m:mo>
                <m:mn>1</m:mn>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mo>⊕</m:mo>
              <m:mi mathvariant="double-struck">C</m:mi>
              <m:mrow>
                <m:mo>[</m:mo>
                <m:mi>s</m:mi>
                <m:mo>]</m:mo>
              </m:mrow>
              <m:mo>/</m:mo>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:mi>x</m:mi>
                <m:mo>+</m:mo>
                <m:mn>1</m:mn>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2258504">As bases, we choose <m:math overflow="scroll"><m:mrow><m:mi>b</m:mi><m:mo>=</m:mo><m:mo>(</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mi>x</m:mi><m:mo>)</m:mo><m:mo>,</m:mo><m:mspace width="4pt"/><m:mi>c</m:mi><m:mo>=</m:mo><m:mo>(</m:mo><m:mn>1</m:mn><m:mo>)</m:mo><m:mo>,</m:mo><m:mspace width="4pt"/><m:mi>d</m:mi><m:mo>=</m:mo><m:mo>(</m:mo><m:mn>1</m:mn><m:mo>)</m:mo></m:mrow></m:math>. <m:math overflow="scroll"><m:mrow><m:mi>Δ</m:mi><m:mo>(</m:mo><m:mn>1</m:mn><m:mo>)</m:mo><m:mo>=</m:mo><m:mo>(</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>)</m:mo></m:mrow></m:math> with the same coordinate vector in <m:math overflow="scroll"><m:mrow><m:mi>c</m:mi><m:mo>∪</m:mo><m:mi>d</m:mi><m:mo>=</m:mo><m:mo>(</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>)</m:mo></m:mrow></m:math>. Further,
because of <m:math overflow="scroll"><m:mrow><m:mi>x</m:mi><m:mo>≡</m:mo><m:mn>1</m:mn><m:mspace width="4.pt"/><m:mtext>mod</m:mtext><m:mspace width="4.pt"/><m:mo>(</m:mo><m:mi>x</m:mi><m:mo>-</m:mo><m:mn>1</m:mn><m:mo>)</m:mo></m:mrow></m:math> and <m:math overflow="scroll"><m:mrow><m:mi>x</m:mi><m:mo>≡</m:mo><m:mo>-</m:mo><m:mn>1</m:mn><m:mspace width="4.pt"/><m:mtext>mod</m:mtext><m:mspace width="4.pt"/><m:mo>(</m:mo><m:mi>x</m:mi><m:mo>+</m:mo><m:mn>1</m:mn><m:mo>)</m:mo></m:mrow></m:math>, <m:math overflow="scroll"><m:mrow><m:mi>Δ</m:mi><m:mo>(</m:mo><m:mi>x</m:mi><m:mo>)</m:mo><m:mo>=</m:mo><m:mo>(</m:mo><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>x</m:mi><m:mo>)</m:mo><m:mo>≡</m:mo><m:mo>(</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mo>-</m:mo><m:mn>1</m:mn><m:mo>)</m:mo></m:mrow></m:math> with the same coordinate
vector. Thus, <m:math overflow="scroll"><m:mi>Δ</m:mi></m:math> in matrix form is the so-called butterfly
matrix, which is a DFT of size 2: <m:math overflow="scroll"><m:mrow><m:msub><m:mo form="prefix">DFT</m:mo><m:mn>2</m:mn></m:msub><m:mo>=</m:mo><m:mrow><m:mo>[</m:mo>
<m:mtable>
<m:mtr><m:mtd><m:mn>1</m:mn></m:mtd> <m:mtd><m:mn>1</m:mn></m:mtd></m:mtr>
<m:mtr><m:mtd><m:mn>1</m:mn></m:mtd> <m:mtd><m:mn>-1</m:mn></m:mtd></m:mtr>
</m:mtable>
<m:mo>]</m:mo></m:mrow></m:mrow></m:math>.</para>
      </section>
      <section id="uid13">
        <name>Polynomial Transforms</name>
        <para id="id2258793">Assume <m:math overflow="scroll"><m:mrow><m:mi>P</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo><m:mo>∈</m:mo><m:mi mathvariant="double-struck">C</m:mi><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo></m:mrow></m:math> has pairwise distinct
zeros <m:math overflow="scroll"><m:mrow><m:mi>α</m:mi><m:mo>=</m:mo><m:mo>(</m:mo><m:msub><m:mi>α</m:mi><m:mn>0</m:mn></m:msub><m:mo>,</m:mo><m:mo>⋯</m:mo><m:mo>,</m:mo><m:msub><m:mi>α</m:mi><m:mrow><m:mi>N</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msub><m:mo>)</m:mo></m:mrow></m:math>. Then the CRT
can be used to completely
decompose <m:math overflow="scroll"><m:mrow><m:mi mathvariant="double-struck">C</m:mi><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo><m:mo>/</m:mo><m:mi>P</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math> into its <emphasis>spectrum</emphasis>:</para>
        <equation id="uid14">
          <m:math mode="display" overflow="scroll">
            <m:mtable>
              <m:mtr>
                <m:mtd columnalign="right">
                  <m:mrow>
                    <m:mi>Δ</m:mi>
                    <m:mo>:</m:mo>
                    <m:mspace width="4pt"/>
                    <m:mi mathvariant="double-struck">C</m:mi>
                    <m:mo>[</m:mo>
                    <m:mi>s</m:mi>
                    <m:mo>]</m:mo>
                    <m:mo>/</m:mo>
                    <m:mi>P</m:mi>
                    <m:mo>(</m:mo>
                    <m:mi>s</m:mi>
                    <m:mo>)</m:mo>
                  </m:mrow>
                </m:mtd>
                <m:mtd columnalign="right">
                  <m:mo>→</m:mo>
                </m:mtd>
                <m:mtd columnalign="right">
                  <m:mrow>
                    <m:mi mathvariant="double-struck">C</m:mi>
                    <m:mrow>
                      <m:mo>[</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>]</m:mo>
                    </m:mrow>
                    <m:mo>/</m:mo>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>-</m:mo>
                      <m:msub>
                        <m:mi>α</m:mi>
                        <m:mn>0</m:mn>
                      </m:msub>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>⊕</m:mo>
                    <m:mo>⋯</m:mo>
                    <m:mo>⊕</m:mo>
                    <m:mi mathvariant="double-struck">C</m:mi>
                    <m:mrow>
                      <m:mo>[</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>]</m:mo>
                    </m:mrow>
                    <m:mo>/</m:mo>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>-</m:mo>
                      <m:msub>
                        <m:mi>α</m:mi>
                        <m:mrow>
                          <m:mi>N</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                        </m:mrow>
                      </m:msub>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>,</m:mo>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
              <m:mtr>
                <m:mtd columnalign="right">
                  <m:mrow>
                    <m:mi>X</m:mi>
                    <m:mo>(</m:mo>
                    <m:mi>s</m:mi>
                    <m:mo>)</m:mo>
                  </m:mrow>
                </m:mtd>
                <m:mtd columnalign="right">
                  <m:mo>↦</m:mo>
                </m:mtd>
                <m:mtd columnalign="right">
                  <m:mrow>
                    <m:mo>(</m:mo>
                    <m:mi>X</m:mi>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mspace width="4.pt"/>
                    <m:mtext>mod</m:mtext>
                    <m:mspace width="4.pt"/>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>-</m:mo>
                      <m:msub>
                        <m:mi>α</m:mi>
                        <m:mn>0</m:mn>
                      </m:msub>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>,</m:mo>
                    <m:mo>⋯</m:mo>
                    <m:mo>,</m:mo>
                    <m:mi>X</m:mi>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mspace width="4.pt"/>
                    <m:mtext>mod</m:mtext>
                    <m:mspace width="4.pt"/>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>-</m:mo>
                      <m:msub>
                        <m:mi>α</m:mi>
                        <m:mrow>
                          <m:mi>N</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                        </m:mrow>
                      </m:msub>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>)</m:mo>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
              <m:mtr>
                <m:mtd/>
                <m:mtd/>
                <m:mtd columnalign="right">
                  <m:mrow>
                    <m:mo>=</m:mo>
                    <m:mo>(</m:mo>
                    <m:mi>s</m:mi>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:msub>
                        <m:mi>α</m:mi>
                        <m:mn>0</m:mn>
                      </m:msub>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>,</m:mo>
                    <m:mo>⋯</m:mo>
                    <m:mo>,</m:mo>
                    <m:mi>s</m:mi>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:msub>
                        <m:mi>α</m:mi>
                        <m:mrow>
                          <m:mi>N</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                        </m:mrow>
                      </m:msub>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>)</m:mo>
                    <m:mo>.</m:mo>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
            </m:mtable>
          </m:math>
        </equation>
        <para id="id2259214">If we choose a basis <m:math overflow="scroll"><m:mrow><m:mi>b</m:mi><m:mo>=</m:mo><m:mo>(</m:mo><m:msub><m:mi>P</m:mi><m:mn>0</m:mn></m:msub><m:mrow><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow><m:mo>,</m:mo><m:mo>⋯</m:mo><m:mo>,</m:mo><m:msub><m:mi>P</m:mi><m:mrow><m:mi>N</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msub><m:mrow><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow><m:mo>)</m:mo></m:mrow></m:math> in <m:math overflow="scroll"><m:mrow><m:mi mathvariant="double-struck">C</m:mi><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo><m:mo>/</m:mo><m:mi>P</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math> and
bases <m:math overflow="scroll"><m:mrow><m:msub><m:mi>b</m:mi><m:mi>i</m:mi></m:msub><m:mo>=</m:mo><m:mrow><m:mo>(</m:mo><m:mn>1</m:mn><m:mo>)</m:mo></m:mrow></m:mrow></m:math> in each <m:math overflow="scroll"><m:mrow><m:mi mathvariant="double-struck">C</m:mi><m:mrow><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo></m:mrow><m:mo>/</m:mo><m:mrow><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>-</m:mo><m:msub><m:mi>α</m:mi><m:mi>i</m:mi></m:msub><m:mo>)</m:mo></m:mrow></m:mrow></m:math>, then <m:math overflow="scroll"><m:mi>Δ</m:mi></m:math>, as a linear
mapping, is represented by a matrix. The matrix is obtained by mapping
every basis element <m:math overflow="scroll"><m:msub><m:mi>P</m:mi><m:mi>n</m:mi></m:msub></m:math>, <m:math overflow="scroll"><m:mrow><m:mn>0</m:mn><m:mo>≤</m:mo><m:mi>n</m:mi><m:mo>&lt;</m:mo><m:mi>N</m:mi></m:mrow></m:math>, and collecting the results in
the columns of the matrix. The result is</para>
        <equation id="id2259419">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msub>
                <m:mi mathvariant="script">P</m:mi>
                <m:mrow>
                  <m:mi>b</m:mi>
                  <m:mo>,</m:mo>
                  <m:mi>α</m:mi>
                </m:mrow>
              </m:msub>
              <m:mo>=</m:mo>
              <m:msub>
                <m:mrow>
                  <m:mo>[</m:mo>
                  <m:msub>
                    <m:mi>P</m:mi>
                    <m:mi>n</m:mi>
                  </m:msub>
                  <m:mrow>
                    <m:mo>(</m:mo>
                    <m:msub>
                      <m:mi>α</m:mi>
                      <m:mi>k</m:mi>
                    </m:msub>
                    <m:mo>)</m:mo>
                  </m:mrow>
                  <m:mo>]</m:mo>
                </m:mrow>
                <m:mrow>
                  <m:mn>0</m:mn>
                  <m:mo>≤</m:mo>
                  <m:mi>k</m:mi>
                  <m:mo>,</m:mo>
                  <m:mi>n</m:mi>
                  <m:mo>&lt;</m:mo>
                  <m:mi>N</m:mi>
                </m:mrow>
              </m:msub>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2259492">and is called the <emphasis>polynomial transform</emphasis>
for <m:math overflow="scroll"><m:mrow><m:mi mathvariant="script">A</m:mi><m:mo>=</m:mo><m:mi mathvariant="double-struck">C</m:mi><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo><m:mo>/</m:mo><m:mi>P</m:mi><m:mo>(</m:mo><m:mi>s</m:mi><m:mo>)</m:mo></m:mrow></m:math> with basis <m:math overflow="scroll"><m:mi>b</m:mi></m:math>.</para>
        <para id="id2259549">If, in general, we choose <m:math overflow="scroll"><m:mrow><m:msub><m:mi>b</m:mi><m:mi>i</m:mi></m:msub><m:mo>=</m:mo><m:mrow><m:mo>(</m:mo><m:msub><m:mi>β</m:mi><m:mi>i</m:mi></m:msub><m:mo>)</m:mo></m:mrow></m:mrow></m:math> as spectral basis, then the
matrix corresponding to the decomposition <cnxn target="uid14"/> is the <emphasis>scaled
polynomial transform</emphasis></para>
        <equation id="id2259595">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msub>
                <m:mo form="prefix">diag</m:mo>
                <m:mrow>
                  <m:mn>0</m:mn>
                  <m:mo>≤</m:mo>
                  <m:mi>k</m:mi>
                  <m:mo>&lt;</m:mo>
                  <m:mi>N</m:mi>
                </m:mrow>
              </m:msub>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:mn>1</m:mn>
                <m:mo>/</m:mo>
                <m:msub>
                  <m:mi>β</m:mi>
                  <m:mi>n</m:mi>
                </m:msub>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:msub>
                <m:mi mathvariant="script">P</m:mi>
                <m:mrow>
                  <m:mi>b</m:mi>
                  <m:mo>,</m:mo>
                  <m:mi>α</m:mi>
                </m:mrow>
              </m:msub>
              <m:mo>,</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2259660">where <m:math overflow="scroll"><m:mrow><m:msub><m:mo form="prefix">diag</m:mo><m:mrow><m:mn>0</m:mn><m:mo>≤</m:mo><m:mi>n</m:mi><m:mo>&lt;</m:mo><m:mi>N</m:mi></m:mrow></m:msub><m:mrow><m:mo>(</m:mo><m:msub><m:mi>γ</m:mi><m:mi>n</m:mi></m:msub><m:mo>)</m:mo></m:mrow></m:mrow></m:math> denotes a diagonal matrix
with diagonal entries <m:math overflow="scroll"><m:msub><m:mi>γ</m:mi><m:mi>n</m:mi></m:msub></m:math>.</para>
        <para id="id2259722">We jointly refer to polynomial transforms, scaled or not, as Fourier
transforms.</para>
      </section>
      <section id="uid15">
        <name>DFT as a Polynomial Transform</name>
        <para id="id2259735">We show that the <m:math overflow="scroll"><m:msub><m:mo form="prefix">DFT</m:mo><m:mi>N</m:mi></m:msub></m:math> is a polynomial transform for <m:math overflow="scroll"><m:mrow><m:mi mathvariant="script">A</m:mi><m:mo>=</m:mo><m:mi mathvariant="double-struck">C</m:mi><m:mrow><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo></m:mrow><m:mo>/</m:mo><m:mrow><m:mo>(</m:mo><m:msup><m:mi>s</m:mi><m:mi>N</m:mi></m:msup><m:mo>-</m:mo><m:mn>1</m:mn><m:mo>)</m:mo></m:mrow></m:mrow></m:math> with basis <m:math overflow="scroll"><m:mrow><m:mi>b</m:mi><m:mo>=</m:mo><m:mo>(</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mi>s</m:mi><m:mo>,</m:mo><m:mo>⋯</m:mo><m:mo>,</m:mo><m:msup><m:mi>s</m:mi><m:mrow><m:mi>N</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup><m:mo>)</m:mo></m:mrow></m:math>. Namely,</para>
        <equation id="id2259844">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msup>
                <m:mi>s</m:mi>
                <m:mi>N</m:mi>
              </m:msup>
              <m:mo>-</m:mo>
              <m:mn>1</m:mn>
              <m:mo>=</m:mo>
              <m:munder>
                <m:mo>∏</m:mo>
                <m:mrow>
                  <m:mn>0</m:mn>
                  <m:mo>≤</m:mo>
                  <m:mi>k</m:mi>
                  <m:mo>&lt;</m:mo>
                  <m:mi>N</m:mi>
                </m:mrow>
              </m:munder>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:mi>x</m:mi>
                <m:mo>-</m:mo>
                <m:msubsup>
                  <m:mi>W</m:mi>
                  <m:mi>N</m:mi>
                  <m:mi>k</m:mi>
                </m:msubsup>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mo>,</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2259908">which means that <m:math overflow="scroll"><m:mi>Δ</m:mi></m:math> takes the form</para>
        <equation id="uid16">
          <m:math mode="display" overflow="scroll">
            <m:mtable>
              <m:mtr>
                <m:mtd columnalign="right">
                  <m:mrow>
                    <m:mi>Δ</m:mi>
                    <m:mo>:</m:mo>
                    <m:mspace width="4pt"/>
                    <m:mi mathvariant="double-struck">C</m:mi>
                    <m:mrow>
                      <m:mo>[</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>]</m:mo>
                    </m:mrow>
                    <m:mo>/</m:mo>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:msup>
                        <m:mi>s</m:mi>
                        <m:mi>N</m:mi>
                      </m:msup>
                      <m:mo>-</m:mo>
                      <m:mn>1</m:mn>
                      <m:mo>)</m:mo>
                    </m:mrow>
                  </m:mrow>
                </m:mtd>
                <m:mtd columnalign="right">
                  <m:mo>→</m:mo>
                </m:mtd>
                <m:mtd columnalign="right">
                  <m:mrow>
                    <m:mi mathvariant="double-struck">C</m:mi>
                    <m:mrow>
                      <m:mo>[</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>]</m:mo>
                    </m:mrow>
                    <m:mo>/</m:mo>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>-</m:mo>
                      <m:msubsup>
                        <m:mi>W</m:mi>
                        <m:mi>N</m:mi>
                        <m:mn>0</m:mn>
                      </m:msubsup>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>⊕</m:mo>
                    <m:mo>⋯</m:mo>
                    <m:mo>⊕</m:mo>
                    <m:mi mathvariant="double-struck">C</m:mi>
                    <m:mrow>
                      <m:mo>[</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>]</m:mo>
                    </m:mrow>
                    <m:mo>/</m:mo>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>-</m:mo>
                      <m:msubsup>
                        <m:mi>W</m:mi>
                        <m:mi>N</m:mi>
                        <m:mrow>
                          <m:mi>N</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                        </m:mrow>
                      </m:msubsup>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>,</m:mo>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
              <m:mtr>
                <m:mtd columnalign="right">
                  <m:mrow>
                    <m:mi>X</m:mi>
                    <m:mo>(</m:mo>
                    <m:mi>s</m:mi>
                    <m:mo>)</m:mo>
                  </m:mrow>
                </m:mtd>
                <m:mtd columnalign="right">
                  <m:mo>↦</m:mo>
                </m:mtd>
                <m:mtd columnalign="right">
                  <m:mrow>
                    <m:mo>(</m:mo>
                    <m:mi>X</m:mi>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mspace width="4.pt"/>
                    <m:mtext>mod</m:mtext>
                    <m:mspace width="4.pt"/>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>-</m:mo>
                      <m:msubsup>
                        <m:mi>W</m:mi>
                        <m:mi>N</m:mi>
                        <m:mn>0</m:mn>
                      </m:msubsup>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>,</m:mo>
                    <m:mo>⋯</m:mo>
                    <m:mo>,</m:mo>
                    <m:mi>X</m:mi>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mspace width="4.pt"/>
                    <m:mtext>mod</m:mtext>
                    <m:mspace width="4.pt"/>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>-</m:mo>
                      <m:msubsup>
                        <m:mi>W</m:mi>
                        <m:mi>N</m:mi>
                        <m:mrow>
                          <m:mi>N</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                        </m:mrow>
                      </m:msubsup>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>)</m:mo>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
              <m:mtr>
                <m:mtd/>
                <m:mtd/>
                <m:mtd columnalign="right">
                  <m:mrow>
                    <m:mo>=</m:mo>
                    <m:mo>(</m:mo>
                    <m:mi>X</m:mi>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:msubsup>
                        <m:mi>W</m:mi>
                        <m:mi>N</m:mi>
                        <m:mn>0</m:mn>
                      </m:msubsup>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>,</m:mo>
                    <m:mo>⋯</m:mo>
                    <m:mo>,</m:mo>
                    <m:mi>X</m:mi>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:msubsup>
                        <m:mi>W</m:mi>
                        <m:mi>N</m:mi>
                        <m:mrow>
                          <m:mi>N</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                        </m:mrow>
                      </m:msubsup>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>)</m:mo>
                    <m:mo>.</m:mo>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
            </m:mtable>
          </m:math>
        </equation>
        <para id="id2260253">The associated polynomial transform hence becomes</para>
        <equation id="id2260259">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msub>
                <m:mi mathvariant="script">P</m:mi>
                <m:mrow>
                  <m:mi>b</m:mi>
                  <m:mo>,</m:mo>
                  <m:mi>α</m:mi>
                </m:mrow>
              </m:msub>
              <m:mo>=</m:mo>
              <m:msub>
                <m:mrow>
                  <m:mo>[</m:mo>
                  <m:msubsup>
                    <m:mi>W</m:mi>
                    <m:mi>N</m:mi>
                    <m:mrow>
                      <m:mi>k</m:mi>
                      <m:mi>n</m:mi>
                    </m:mrow>
                  </m:msubsup>
                  <m:mo>]</m:mo>
                </m:mrow>
                <m:mrow>
                  <m:mn>0</m:mn>
                  <m:mo>≤</m:mo>
                  <m:mi>k</m:mi>
                  <m:mo>,</m:mo>
                  <m:mi>n</m:mi>
                  <m:mo>&lt;</m:mo>
                  <m:mi>N</m:mi>
                </m:mrow>
              </m:msub>
              <m:mo>=</m:mo>
              <m:msub>
                <m:mo form="prefix">DFT</m:mo>
                <m:mi>N</m:mi>
              </m:msub>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2260341">This interpretation of the DFT has been known at least since
<cnxn target="bid3"/>, <cnxn target="bid2"/> and clarifies the connection between
the evaluation points in <cnxn target="uid5"/> and the circular convolution in
<cnxn target="uid6"/>.</para>
        <para id="id2260369">In <cnxn target="bid12"/>, DFTs of types 1–4 are defined, with type 1
being the standard DFT. In the algebraic framework, type 3 is obtained
by choosing <m:math overflow="scroll"><m:mrow><m:mi mathvariant="script">A</m:mi><m:mo>=</m:mo><m:mi mathvariant="double-struck">C</m:mi><m:mrow><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo></m:mrow><m:mo>/</m:mo><m:mrow><m:mo>(</m:mo><m:msup><m:mi>s</m:mi><m:mi>N</m:mi></m:msup><m:mo>+</m:mo><m:mn>1</m:mn><m:mo>)</m:mo></m:mrow></m:mrow></m:math> as algebra with the same basis as
before:</para>
        <equation id="uid17">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msub>
                <m:mi mathvariant="script">P</m:mi>
                <m:mrow>
                  <m:mi>b</m:mi>
                  <m:mo>,</m:mo>
                  <m:mi>α</m:mi>
                </m:mrow>
              </m:msub>
              <m:mo>=</m:mo>
              <m:msub>
                <m:mrow>
                  <m:mo>[</m:mo>
                  <m:msubsup>
                    <m:mi>W</m:mi>
                    <m:mi>N</m:mi>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:mi>k</m:mi>
                      <m:mo>+</m:mo>
                      <m:mn>1</m:mn>
                      <m:mo>/</m:mo>
                      <m:mn>2</m:mn>
                      <m:mo>)</m:mo>
                      <m:mi>n</m:mi>
                    </m:mrow>
                  </m:msubsup>
                  <m:mo>]</m:mo>
                </m:mrow>
                <m:mrow>
                  <m:mn>0</m:mn>
                  <m:mo>≤</m:mo>
                  <m:mi>k</m:mi>
                  <m:mo>,</m:mo>
                  <m:mi>n</m:mi>
                  <m:mo>&lt;</m:mo>
                  <m:mi>N</m:mi>
                </m:mrow>
              </m:msub>
              <m:mo>=</m:mo>
              <m:msub>
                <m:mrow>
                  <m:mo form="prefix">DFT</m:mo>
                  <m:mtext>-3</m:mtext>
                </m:mrow>
                <m:mi>N</m:mi>
              </m:msub>
              <m:mo>,</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2260527">The DFTs of type 2 and 4 are scaled polynomial
transforms <cnxn target="bid6"/>.</para>
      </section>
    </section>
    <section id="uid18">
      <name>Algebraic Derivation of the Cooley-Tukey FFT</name>
      <para id="id2260548">Knowing the polynomial algebra underlying the DFT enables us to derive
the Cooley-Tukey FFT <emphasis>algebraically</emphasis>. This means that instead of
manipulating the DFT definition, we manipulate the polynomial algebra
<m:math overflow="scroll"><m:mrow><m:mi mathvariant="double-struck">C</m:mi><m:mrow><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo></m:mrow><m:mo>/</m:mo><m:mrow><m:mo>(</m:mo><m:msup><m:mi>s</m:mi><m:mi>N</m:mi></m:msup><m:mo>-</m:mo><m:mn>1</m:mn><m:mo>)</m:mo></m:mrow></m:mrow></m:math>. The basic idea is intuitive. We showed that the DFT
is the matrix representation of the complete decomposition
<cnxn target="uid16"/>. The Cooley-Tukey FFT is now derived be performing this
decomposition <emphasis>in steps</emphasis> as shown in <cnxn target="uid19"/>. Each
step yields a sparse matrix; hence, the <m:math overflow="scroll"><m:msub><m:mo form="prefix">DFT</m:mo><m:mi>N</m:mi></m:msub></m:math> is factorized into a
product of sparse matrices, which will be the matrix representation of
the Cooley-Tukey FFT.</para>
      <figure id="uid19" orient="horizontal"><media type="image/png" src="figure1.png">
<param name="print-width" value="3in"/>
<!-- NOTE: width parameter changes size of image online (pixels). original width is 361. --><param name="width" value="500"/></media><caption>Basic idea behind the algebraic derivation of Cooley-Tukey
type algorithms</caption></figure>
      <para id="id2260645">This stepwise decomposition can be formulated generically for
polynomial transforms <cnxn target="bid13"/>, <cnxn target="bid9"/>. Here, we
consider only the DFT.</para>
      <para id="id2260662">We first introduce the matrix notation we will use and in particular
the Kronecker product formalism that became mainstream for FFTs in
in <cnxn target="bid10"/>, <cnxn target="bid11"/>.</para>
      <para id="id2260678">Then we first derive the radix-2 FFT using a <emphasis>factorization</emphasis> of
<m:math overflow="scroll"><m:mrow><m:msup><m:mi>s</m:mi><m:mi>N</m:mi></m:msup><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:math>. Subsequently, we obtain the general-radix FFT using a <emphasis>decomposition</emphasis> of <m:math overflow="scroll"><m:mrow><m:msup><m:mi>s</m:mi><m:mi>N</m:mi></m:msup><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:math>.</para>
      <section id="uid20">
        <name>Matrix Notation</name>
        <para id="id2260741">We denote the <m:math overflow="scroll"><m:mrow><m:mi>N</m:mi><m:mo>×</m:mo><m:mi>N</m:mi></m:mrow></m:math> identity matrix with <m:math overflow="scroll"><m:msub><m:mi>I</m:mi><m:mi>N</m:mi></m:msub></m:math>, and diagonal
matrices with</para>
        <equation id="id2260775">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msub>
                <m:mo form="prefix">diag</m:mo>
                <m:mrow>
                  <m:mn>0</m:mn>
                  <m:mo>≤</m:mo>
                  <m:mi>k</m:mi>
                  <m:mo>&lt;</m:mo>
                  <m:mi>N</m:mi>
                </m:mrow>
              </m:msub>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:msub>
                  <m:mi>γ</m:mi>
                  <m:mi>k</m:mi>
                </m:msub>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mo>=</m:mo>
              <m:mfenced open="[" close="]">
                <m:mtable>
                  <m:mtr>
                    <m:mtd>
                      <m:msub>
                        <m:mi>γ</m:mi>
                        <m:mn>0</m:mn>
                      </m:msub>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd/>
                    <m:mtd>
                      <m:mo>⋱</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd/>
                    <m:mtd/>
                    <m:mtd>
                      <m:msub>
                        <m:mi>γ</m:mi>
                        <m:mrow>
                          <m:mi>N</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                        </m:mrow>
                      </m:msub>
                    </m:mtd>
                  </m:mtr>
                </m:mtable>
              </m:mfenced>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2260861">The <m:math overflow="scroll"><m:mrow><m:mi>N</m:mi><m:mo>×</m:mo><m:mi>N</m:mi></m:mrow></m:math> <emphasis>stride
permutation</emphasis> matrix is defined for <m:math overflow="scroll"><m:mrow><m:mi>N</m:mi><m:mo>=</m:mo><m:mi>K</m:mi><m:mi>M</m:mi></m:mrow></m:math> by the permutation</para>
        <equation id="uid21">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msubsup>
                <m:mi>L</m:mi>
                <m:mi>M</m:mi>
                <m:mi>N</m:mi>
              </m:msubsup>
              <m:mo>:</m:mo>
              <m:mspace width="4pt"/>
              <m:mi>i</m:mi>
              <m:mi>K</m:mi>
              <m:mo>+</m:mo>
              <m:mi>j</m:mi>
              <m:mo>↦</m:mo>
              <m:mi>j</m:mi>
              <m:mi>M</m:mi>
              <m:mo>+</m:mo>
              <m:mi>i</m:mi>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2260953">for <m:math overflow="scroll"><m:mrow><m:mn>0</m:mn><m:mo>≤</m:mo><m:mi>i</m:mi><m:mo>&lt;</m:mo><m:mi>K</m:mi><m:mo>,</m:mo><m:mspace width="4pt"/><m:mn>0</m:mn><m:mo>≤</m:mo><m:mi>j</m:mi><m:mo>&lt;</m:mo><m:mi>M</m:mi></m:mrow></m:math>. This definition shows that <m:math overflow="scroll"><m:msubsup><m:mi>L</m:mi><m:mi>M</m:mi><m:mi>N</m:mi></m:msubsup></m:math>
transposes a <m:math overflow="scroll"><m:mrow><m:mi>K</m:mi><m:mo>×</m:mo><m:mi>M</m:mi></m:mrow></m:math> matrix stored in row-major order.
Alternatively, we can write</para>
        <equation id="id2261028"><m:math>
<m:msubsup>
<m:mi>L</m:mi>
<m:mi>M</m:mi>
<m:mi>N</m:mi>
</m:msubsup>
<m:mspace width="3pt"/>
<m:mtext>:</m:mtext>
<m:mspace width="3pt"/>
<m:mi>i</m:mi>
<m:mspace width="3pt"/>
<m:mo>↦</m:mo>
<m:mspace width="3pt"/>
<m:mi>iM</m:mi>
<m:mspace width="3pt"/>
<m:mtext>mod</m:mtext>
<m:mspace width="3pt"/>
<m:mi>N</m:mi>
<m:mo>-</m:mo>
<m:mn>1</m:mn>
<m:mo>,</m:mo>
<m:mspace width="5pt"/>
<m:mtext>for</m:mtext>
<m:mspace width="3pt"/>
<m:mn>0</m:mn>
<m:mo>≤</m:mo>
<m:mi>i</m:mi>
<m:mo>&lt;</m:mo>
<m:mi>N</m:mi>
<m:mo>-</m:mo>
<m:mn>1</m:mn>
<m:mo>,</m:mo>
<m:mspace width="5pt"/>
<m:mi>N</m:mi>
<m:mo>-</m:mo>
<m:mn>1</m:mn>
<m:mspace width="3pt"/>
<m:mo>↦</m:mo>
<m:mspace width="3pt"/>
<m:mi>N</m:mi>
<m:mo>-</m:mo>
<m:mn>1</m:mn>
<m:mo>.</m:mo>
</m:math></equation>
        <para id="id2261140">For example (<m:math overflow="scroll"><m:mo>·</m:mo></m:math> means 0),</para>
        <equation id="id2261155">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msubsup>
                <m:mi>L</m:mi>
                <m:mn>2</m:mn>
                <m:mn>6</m:mn>
              </m:msubsup>
              <m:mo>=</m:mo>
              <m:mfenced separators="" open="[" close="]">
                <m:mtable>
                  <m:mtr>
                    <m:mtd>
                      <m:mn>1</m:mn>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mn>1</m:mn>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mn>1</m:mn>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mn>1</m:mn>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mn>1</m:mn>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>·</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mn>1</m:mn>
                    </m:mtd>
                  </m:mtr>
                </m:mtable>
              </m:mfenced>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2261318"><m:math overflow="scroll"><m:msubsup><m:mi>L</m:mi><m:mrow><m:mi>N</m:mi><m:mo>/</m:mo><m:mn>2</m:mn></m:mrow><m:mi>N</m:mi></m:msubsup></m:math> is sometimes called the perfect shuffle.</para>
        <para id="id2261346">Further, we use matrix operators; namely the direct sum</para>
        <equation id="id2261350">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mi>A</m:mi>
              <m:mo>⊕</m:mo>
              <m:mi>B</m:mi>
              <m:mo>=</m:mo>
              <m:mfenced open="[" close="]">
                <m:mtable>
                  <m:mtr>
                    <m:mtd>
                      <m:mi>A</m:mi>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd/>
                    <m:mtd>
                      <m:mi>B</m:mi>
                    </m:mtd>
                  </m:mtr>
                </m:mtable>
              </m:mfenced>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2261385">and the Kronecker or tensor product</para>
        <equation id="id2261391">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mi>A</m:mi>
              <m:mo>⊗</m:mo>
              <m:mi>B</m:mi>
              <m:mo>=</m:mo>
              <m:msub>
                <m:mrow>
                  <m:mo>[</m:mo>
                  <m:msub>
                    <m:mi>a</m:mi>
                    <m:mrow>
                      <m:mi>k</m:mi>
                      <m:mo>,</m:mo>
                      <m:mi>ℓ</m:mi>
                    </m:mrow>
                  </m:msub>
                  <m:mi>B</m:mi>
                  <m:mo>]</m:mo>
                </m:mrow>
                <m:mrow>
                  <m:mi>k</m:mi>
                  <m:mo>,</m:mo>
                  <m:mi>ℓ</m:mi>
                </m:mrow>
              </m:msub>
              <m:mo>,</m:mo>
              <m:mspace width="1.em"/>
              <m:mtext>for</m:mtext>
              <m:mspace width="4.pt"/>
              <m:mi>A</m:mi>
              <m:mo>=</m:mo>
              <m:mrow>
                <m:mo>[</m:mo>
                <m:msub>
                  <m:mi>a</m:mi>
                  <m:mrow>
                    <m:mi>k</m:mi>
                    <m:mo>,</m:mo>
                    <m:mi>ℓ</m:mi>
                  </m:mrow>
                </m:msub>
                <m:mo>]</m:mo>
              </m:mrow>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2261477">In particular,</para>
        <equation id="id2261483">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msub>
                <m:mi>I</m:mi>
                <m:mi>n</m:mi>
              </m:msub>
              <m:mo>⊗</m:mo>
              <m:mi>A</m:mi>
              <m:mo>=</m:mo>
              <m:mi>A</m:mi>
              <m:mo>⊕</m:mo>
              <m:mo>⋯</m:mo>
              <m:mo>⊕</m:mo>
              <m:mi>A</m:mi>
              <m:mo>=</m:mo>
              <m:mfenced open="[" close="]">
                <m:mtable>
                  <m:mtr>
                    <m:mtd>
                      <m:mi>A</m:mi>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd/>
                    <m:mtd>
                      <m:mo>⋱</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd/>
                    <m:mtd/>
                    <m:mtd>
                      <m:mi>A</m:mi>
                    </m:mtd>
                  </m:mtr>
                </m:mtable>
              </m:mfenced>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2261544">is block-diagonal.</para>
        <para id="id2261549">We may also construct a larger matrix as a matrix of
matrices, e.g.,</para>
        <equation id="id2261554">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mfenced separators="" open="[" close="]">
                <m:mtable>
                  <m:mtr>
                    <m:mtd>
                      <m:mi>A</m:mi>
                    </m:mtd>
                    <m:mtd>
                      <m:mi>B</m:mi>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mi>B</m:mi>
                    </m:mtd>
                    <m:mtd>
                      <m:mi>A</m:mi>
                    </m:mtd>
                  </m:mtr>
                </m:mtable>
              </m:mfenced>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2261589">If an algorithm for a transform is given as a product of sparse matrices
built from the constructs above, then an algorithm for the transpose or
inverse of the transform can be readily derived using mathematical
properties including</para>
        <equation id="uid22">
          <m:math mode="display" overflow="scroll">
            <m:mtable>
              <m:mtr>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:msup>
                      <m:mrow>
                        <m:mo>(</m:mo>
                        <m:mi>A</m:mi>
                        <m:mi>B</m:mi>
                        <m:mo>)</m:mo>
                      </m:mrow>
                      <m:mi>T</m:mi>
                    </m:msup>
                    <m:mo>=</m:mo>
                    <m:msup>
                      <m:mi>B</m:mi>
                      <m:mi>T</m:mi>
                    </m:msup>
                    <m:msup>
                      <m:mi>A</m:mi>
                      <m:mi>T</m:mi>
                    </m:msup>
                    <m:mo>,</m:mo>
                  </m:mrow>
                </m:mtd>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:msup>
                      <m:mrow>
                        <m:mo>(</m:mo>
                        <m:mi>A</m:mi>
                        <m:mi>B</m:mi>
                        <m:mo>)</m:mo>
                      </m:mrow>
                      <m:mrow>
                        <m:mo>-</m:mo>
                        <m:mn>1</m:mn>
                      </m:mrow>
                    </m:msup>
                    <m:mo>=</m:mo>
                    <m:msup>
                      <m:mi>B</m:mi>
                      <m:mrow>
                        <m:mo>-</m:mo>
                        <m:mn>1</m:mn>
                      </m:mrow>
                    </m:msup>
                    <m:msup>
                      <m:mi>A</m:mi>
                      <m:mrow>
                        <m:mo>-</m:mo>
                        <m:mn>1</m:mn>
                      </m:mrow>
                    </m:msup>
                    <m:mo>,</m:mo>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
              <m:mtr>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:msup>
                      <m:mrow>
                        <m:mo>(</m:mo>
                        <m:mi>A</m:mi>
                        <m:mo>⊕</m:mo>
                        <m:mi>B</m:mi>
                        <m:mo>)</m:mo>
                      </m:mrow>
                      <m:mi>T</m:mi>
                    </m:msup>
                    <m:mo>=</m:mo>
                    <m:msup>
                      <m:mi>A</m:mi>
                      <m:mi>T</m:mi>
                    </m:msup>
                    <m:mo>⊕</m:mo>
                    <m:msup>
                      <m:mi>B</m:mi>
                      <m:mi>T</m:mi>
                    </m:msup>
                    <m:mo>,</m:mo>
                  </m:mrow>
                </m:mtd>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:msup>
                      <m:mrow>
                        <m:mo>(</m:mo>
                        <m:mi>A</m:mi>
                        <m:mo>⊕</m:mo>
                        <m:mi>B</m:mi>
                        <m:mo>)</m:mo>
                      </m:mrow>
                      <m:mrow>
                        <m:mo>-</m:mo>
                        <m:mn>1</m:mn>
                      </m:mrow>
                    </m:msup>
                    <m:mo>=</m:mo>
                    <m:msup>
                      <m:mi>A</m:mi>
                      <m:mrow>
                        <m:mo>-</m:mo>
                        <m:mn>1</m:mn>
                      </m:mrow>
                    </m:msup>
                    <m:mo>⊕</m:mo>
                    <m:msup>
                      <m:mi>B</m:mi>
                      <m:mrow>
                        <m:mo>-</m:mo>
                        <m:mn>1</m:mn>
                      </m:mrow>
                    </m:msup>
                    <m:mo>,</m:mo>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
              <m:mtr>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:msup>
                      <m:mrow>
                        <m:mo>(</m:mo>
                        <m:mi>A</m:mi>
                        <m:mo>⊗</m:mo>
                        <m:mi>B</m:mi>
                        <m:mo>)</m:mo>
                      </m:mrow>
                      <m:mi>T</m:mi>
                    </m:msup>
                    <m:mo>=</m:mo>
                    <m:msup>
                      <m:mi>A</m:mi>
                      <m:mi>T</m:mi>
                    </m:msup>
                    <m:mo>⊗</m:mo>
                    <m:msup>
                      <m:mi>B</m:mi>
                      <m:mi>T</m:mi>
                    </m:msup>
                    <m:mo>,</m:mo>
                  </m:mrow>
                </m:mtd>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:msup>
                      <m:mrow>
                        <m:mo>(</m:mo>
                        <m:mi>A</m:mi>
                        <m:mo>⊗</m:mo>
                        <m:mi>B</m:mi>
                        <m:mo>)</m:mo>
                      </m:mrow>
                      <m:mrow>
                        <m:mo>-</m:mo>
                        <m:mn>1</m:mn>
                      </m:mrow>
                    </m:msup>
                    <m:mo>=</m:mo>
                    <m:msup>
                      <m:mi>A</m:mi>
                      <m:mrow>
                        <m:mo>-</m:mo>
                        <m:mn>1</m:mn>
                      </m:mrow>
                    </m:msup>
                    <m:mo>⊗</m:mo>
                    <m:msup>
                      <m:mi>B</m:mi>
                      <m:mrow>
                        <m:mo>-</m:mo>
                        <m:mn>1</m:mn>
                      </m:mrow>
                    </m:msup>
                    <m:mo>.</m:mo>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
            </m:mtable>
          </m:math>
        </equation>
        <para id="id2261891">Permutation matrices are orthogonal, i.e., <m:math overflow="scroll"><m:mrow><m:msup><m:mi>P</m:mi><m:mi>T</m:mi></m:msup><m:mo>=</m:mo><m:msup><m:mi>P</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup></m:mrow></m:math>. The
transposition or inversion of diagonal matrices is obvious.</para>
      </section>
      <section id="uid23">
        <name>Radix-2 FFT</name>
        <para id="id2261934">The DFT decomposes <m:math overflow="scroll"><m:mrow><m:mi mathvariant="script">A</m:mi><m:mo>=</m:mo><m:mi mathvariant="double-struck">C</m:mi><m:mrow><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo></m:mrow><m:mo>/</m:mo><m:mrow><m:mo>(</m:mo><m:msup><m:mi>s</m:mi><m:mi>N</m:mi></m:msup><m:mo>-</m:mo><m:mn>1</m:mn><m:mo>)</m:mo></m:mrow></m:mrow></m:math> with basis <m:math overflow="scroll"><m:mrow><m:mi>b</m:mi><m:mo>=</m:mo><m:mo>(</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mi>s</m:mi><m:mo>,</m:mo><m:mo>⋯</m:mo><m:mo>,</m:mo><m:msup><m:mi>s</m:mi><m:mrow><m:mi>N</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup><m:mo>)</m:mo></m:mrow></m:math> as shown in <cnxn target="uid16"/>. We assume <m:math overflow="scroll"><m:mrow><m:mi>N</m:mi><m:mo>=</m:mo><m:mn>2</m:mn><m:mi>M</m:mi></m:mrow></m:math>.
Then</para>
        <equation id="id2262048">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msup>
                <m:mi>s</m:mi>
                <m:mrow>
                  <m:mn>2</m:mn>
                  <m:mi>M</m:mi>
                </m:mrow>
              </m:msup>
              <m:mo>-</m:mo>
              <m:mn>1</m:mn>
              <m:mo>=</m:mo>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:msup>
                  <m:mi>s</m:mi>
                  <m:mi>M</m:mi>
                </m:msup>
                <m:mo>-</m:mo>
                <m:mn>1</m:mn>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:msup>
                  <m:mi>s</m:mi>
                  <m:mi>M</m:mi>
                </m:msup>
                <m:mo>+</m:mo>
                <m:mn>1</m:mn>
                <m:mo>)</m:mo>
              </m:mrow>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2262109">factors and we can apply the CRT in
the following steps:</para>
        <equation id="uid24"><m:math mode="display" overflow="scroll">
            <m:mtable displaystyle="true">
              <m:mtr>
                <m:mtd/>
                <m:mtd/>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:mi mathvariant="double-struck">C</m:mi>
                    <m:mrow>
                      <m:mo>[</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>]</m:mo>
                    </m:mrow>
                    <m:mo>/</m:mo>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:msup>
                        <m:mi>s</m:mi>
                        <m:mi>N</m:mi>
                      </m:msup>
                      <m:mo>-</m:mo>
                      <m:mn>1</m:mn>
                      <m:mo>)</m:mo>
                    </m:mrow>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
              <m:mtr>
                <m:mtd/>
                <m:mtd>
                  <m:mo>→</m:mo>
                </m:mtd>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:mi mathvariant="double-struck">C</m:mi>
                    <m:mrow>
                      <m:mo>[</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>]</m:mo>
                    </m:mrow>
                    <m:mo>/</m:mo>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:msup>
                        <m:mi>s</m:mi>
                        <m:mi>M</m:mi>
                      </m:msup>
                      <m:mo>-</m:mo>
                      <m:mn>1</m:mn>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>⊕</m:mo>
                    <m:mi mathvariant="double-struck">C</m:mi>
                    <m:mrow>
                      <m:mo>[</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>]</m:mo>
                    </m:mrow>
                    <m:mo>/</m:mo>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:msup>
                        <m:mi>s</m:mi>
                        <m:mi>M</m:mi>
                      </m:msup>
                      <m:mo>+</m:mo>
                      <m:mn>1</m:mn>
                      <m:mo>)</m:mo>
                    </m:mrow>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
             
            </m:mtable>
          </m:math>
        </equation>
        <equation id="element-559"><m:math mode="display" overflow="scroll">
            <m:mtable displaystyle="true">
 <m:mtr>
                <m:mtd/>
                <m:mtd>
                  <m:mo>→</m:mo>
                </m:mtd>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:munder>
                      <m:mo>⊕</m:mo>
                      <m:mrow>
                        <m:mn>0</m:mn>
                        <m:mo>≤</m:mo>
                        <m:mi>i</m:mi>
                        <m:mo>&lt;</m:mo>
                        <m:mi>M</m:mi>
                      </m:mrow>
                    </m:munder>
                    <m:mi mathvariant="double-struck">C</m:mi>
                    <m:mrow>
                      <m:mo>[</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>]</m:mo>
                    </m:mrow>
                    <m:mo>/</m:mo>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:mi>x</m:mi>
                      <m:mo>-</m:mo>
                      <m:msubsup>
                        <m:mi>W</m:mi>
                        <m:mi>N</m:mi>
                        <m:mrow>
                          <m:mn>2</m:mn>
                          <m:mi>i</m:mi>
                        </m:mrow>
                      </m:msubsup>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>⊕</m:mo>
                    <m:munder>
                      <m:mo>⊕</m:mo>
                      <m:mrow>
                        <m:mn>0</m:mn>
                        <m:mo>≤</m:mo>
                        <m:mi>i</m:mi>
                        <m:mo>&lt;</m:mo>
                        <m:mi>M</m:mi>
                      </m:mrow>
                    </m:munder>
                    <m:mi mathvariant="double-struck">C</m:mi>
                    <m:mrow>
                      <m:mo>[</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>]</m:mo>
                    </m:mrow>
                    <m:mo>/</m:mo>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:mi>x</m:mi>
                      <m:mo>-</m:mo>
                      <m:msubsup>
                        <m:mi>W</m:mi>
                        <m:mi>M</m:mi>
                        <m:mrow>
                          <m:mn>2</m:mn>
                          <m:mi>i</m:mi>
                          <m:mo>+</m:mo>
                          <m:mn>1</m:mn>
                        </m:mrow>
                      </m:msubsup>
                      <m:mo>)</m:mo>
                    </m:mrow>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
 </m:mtable>
          </m:math></equation><equation id="element-872"><m:math mode="display" overflow="scroll">
            <m:mtable displaystyle="true">
 <m:mtr>
                <m:mtd/>
                <m:mtd>
                  <m:mo>→</m:mo>
                </m:mtd>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:munder>
                      <m:mo>⊕</m:mo>
                      <m:mrow>
                        <m:mn>0</m:mn>
                        <m:mo>≤</m:mo>
                        <m:mi>i</m:mi>
                        <m:mo>&lt;</m:mo>
                        <m:mi>N</m:mi>
                      </m:mrow>
                    </m:munder>
                    <m:mi mathvariant="double-struck">C</m:mi>
                    <m:mrow>
                      <m:mo>[</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>]</m:mo>
                    </m:mrow>
                    <m:mo>/</m:mo>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:mi>x</m:mi>
                      <m:mo>-</m:mo>
                      <m:msubsup>
                        <m:mi>W</m:mi>
                        <m:mi>N</m:mi>
                        <m:mi>i</m:mi>
                      </m:msubsup>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>.</m:mo>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
 </m:mtable>
          </m:math></equation><para id="id2262434">As bases in the smaller algebras <m:math overflow="scroll"><m:mrow><m:mi mathvariant="double-struck">C</m:mi><m:mrow><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo></m:mrow><m:mo>/</m:mo><m:mrow><m:mo>(</m:mo><m:msup><m:mi>s</m:mi><m:mi>M</m:mi></m:msup><m:mo>-</m:mo><m:mn>1</m:mn><m:mo>)</m:mo></m:mrow></m:mrow></m:math> and <m:math overflow="scroll"><m:mrow><m:mi mathvariant="double-struck">C</m:mi><m:mrow><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo></m:mrow><m:mo>/</m:mo><m:mrow><m:mo>(</m:mo><m:msup><m:mi>s</m:mi><m:mi>M</m:mi></m:msup><m:mo>+</m:mo><m:mn>1</m:mn><m:mo>)</m:mo></m:mrow></m:mrow></m:math>,
we choose <m:math overflow="scroll"><m:mrow><m:mi>c</m:mi><m:mo>=</m:mo><m:mi>d</m:mi><m:mo>=</m:mo><m:mo>(</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mi>s</m:mi><m:mo>,</m:mo><m:mo>⋯</m:mo><m:mo>,</m:mo><m:msup><m:mi>s</m:mi><m:mrow><m:mi>M</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup><m:mo>)</m:mo></m:mrow></m:math>. The derivation of an
algorithm for <m:math overflow="scroll"><m:msub><m:mo form="prefix">DFT</m:mo><m:mi>N</m:mi></m:msub></m:math> based on <cnxn target="uid24"/>-<cnxn target="element-872"/> is now
completely mechanical by reading off the matrix for each of the three
decomposition steps. The product of these matrices is equal to
the <m:math overflow="scroll"><m:msub><m:mo form="prefix">DFT</m:mo><m:mi>N</m:mi></m:msub></m:math>.</para>
        <para id="id2262610">First, we derive the base change matrix <m:math overflow="scroll"><m:mi>B</m:mi></m:math> corresponding to
<cnxn target="uid24"/>. To do so, we have to express the base elements
<m:math overflow="scroll"><m:mrow><m:msup><m:mi>s</m:mi><m:mi>n</m:mi></m:msup><m:mo>∈</m:mo><m:mi>b</m:mi></m:mrow></m:math> in the basis <m:math overflow="scroll"><m:mrow><m:mi>c</m:mi><m:mo>∪</m:mo><m:mi>d</m:mi></m:mrow></m:math>; the coordinate
vectors are the columns of <m:math overflow="scroll"><m:mi>B</m:mi></m:math>. For <m:math overflow="scroll"><m:mrow><m:mn>0</m:mn><m:mo>≤</m:mo><m:mi>n</m:mi><m:mo>&lt;</m:mo><m:mi>M</m:mi></m:mrow></m:math>, <m:math overflow="scroll"><m:msup><m:mi>s</m:mi><m:mi>n</m:mi></m:msup></m:math> is actually
contained in <m:math overflow="scroll"><m:mi>c</m:mi></m:math> and <m:math overflow="scroll"><m:mi>d</m:mi></m:math>, so the first <m:math overflow="scroll"><m:mi>M</m:mi></m:math> columns of <m:math overflow="scroll"><m:mi>B</m:mi></m:math> are</para>
        <equation id="id2262743">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mi>B</m:mi>
              <m:mo>=</m:mo>
              <m:mfenced open="[" close="]">
                <m:mtable>
                  <m:mtr>
                    <m:mtd>
                      <m:msub>
                        <m:mi>I</m:mi>
                        <m:mi>M</m:mi>
                      </m:msub>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>*</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:msub>
                        <m:mi>I</m:mi>
                        <m:mi>M</m:mi>
                      </m:msub>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>*</m:mo>
                    </m:mtd>
                  </m:mtr>
                </m:mtable>
              </m:mfenced>
              <m:mo>,</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2262791">where the entries <m:math overflow="scroll"><m:mo>*</m:mo></m:math> are determined next.
For the base elements <m:math overflow="scroll"><m:msup><m:mi>s</m:mi><m:mrow><m:mi>M</m:mi><m:mo>+</m:mo><m:mi>n</m:mi></m:mrow></m:msup></m:math>, <m:math overflow="scroll"><m:mrow><m:mn>0</m:mn><m:mo>≤</m:mo><m:mi>n</m:mi><m:mo>&lt;</m:mo><m:mi>M</m:mi></m:mrow></m:math>, we have</para>
        <equation id="id2262846">
          <m:math mode="display" overflow="scroll">
            <m:mtable displaystyle="true">
              <m:mtr>
                <m:mtd columnalign="right">
                  <m:msup>
                    <m:mi>s</m:mi>
                    <m:mrow>
                      <m:mi>M</m:mi>
                      <m:mo>+</m:mo>
                      <m:mi>n</m:mi>
                    </m:mrow>
                  </m:msup>
                </m:mtd>
                <m:mtd>
                  <m:mo>≡</m:mo>
                </m:mtd>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:msup>
                      <m:mi>s</m:mi>
                      <m:mi>n</m:mi>
                    </m:msup>
                    <m:mspace width="4.pt"/>
                    <m:mtext>mod</m:mtext>
                    <m:mspace width="4.pt"/>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:msup>
                        <m:mi>s</m:mi>
                        <m:mi>M</m:mi>
                      </m:msup>
                      <m:mo>-</m:mo>
                      <m:mn>1</m:mn>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>,</m:mo>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
              <m:mtr>
                <m:mtd columnalign="right">
                  <m:msup>
                    <m:mi>s</m:mi>
                    <m:mrow>
                      <m:mi>M</m:mi>
                      <m:mo>+</m:mo>
                      <m:mi>n</m:mi>
                    </m:mrow>
                  </m:msup>
                </m:mtd>
                <m:mtd>
                  <m:mo>≡</m:mo>
                </m:mtd>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:mo>-</m:mo>
                    <m:msup>
                      <m:mi>s</m:mi>
                      <m:mi>n</m:mi>
                    </m:msup>
                    <m:mspace width="4.pt"/>
                    <m:mtext>mod</m:mtext>
                    <m:mspace width="4.pt"/>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:msup>
                        <m:mi>s</m:mi>
                        <m:mi>M</m:mi>
                      </m:msup>
                      <m:mo>+</m:mo>
                      <m:mn>1</m:mn>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>,</m:mo>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
            </m:mtable>
          </m:math>
        </equation>
        <para id="id2262981">which yields the final result</para>
        <equation id="id2262988">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mi>B</m:mi>
              <m:mo>=</m:mo>
              <m:mfenced open="[" close="]">
                <m:mtable>
                  <m:mtr>
                    <m:mtd>
                      <m:msub>
                        <m:mi>I</m:mi>
                        <m:mi>M</m:mi>
                      </m:msub>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mphantom>
                          <m:mo>-</m:mo>
                        </m:mphantom>
                        <m:msub>
                          <m:mi>I</m:mi>
                          <m:mi>M</m:mi>
                        </m:msub>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:msub>
                        <m:mi>I</m:mi>
                        <m:mi>M</m:mi>
                      </m:msub>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo>-</m:mo>
                        <m:msub>
                          <m:mi>I</m:mi>
                          <m:mi>M</m:mi>
                        </m:msub>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                </m:mtable>
              </m:mfenced>
              <m:mo>=</m:mo>
              <m:msub>
                <m:mo form="prefix">DFT</m:mo>
                <m:mn>2</m:mn>
              </m:msub>
              <m:mo>⊗</m:mo>
              <m:msub>
                <m:mi>I</m:mi>
                <m:mi>M</m:mi>
              </m:msub>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2263076">Next, we consider step <cnxn target="element-559"/>. <m:math overflow="scroll"><m:mrow><m:mi mathvariant="double-struck">C</m:mi><m:mrow><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo></m:mrow><m:mo>/</m:mo><m:mrow><m:mo>(</m:mo><m:msup><m:mi>s</m:mi><m:mi>M</m:mi></m:msup><m:mo>-</m:mo><m:mn>1</m:mn><m:mo>)</m:mo></m:mrow></m:mrow></m:math> is decomposed
by <m:math overflow="scroll"><m:msub><m:mo form="prefix">DFT</m:mo><m:mi>M</m:mi></m:msub></m:math> and <m:math overflow="scroll"><m:mrow><m:mi mathvariant="double-struck">C</m:mi><m:mrow><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo></m:mrow><m:mo>/</m:mo><m:mrow><m:mo>(</m:mo><m:msup><m:mi>s</m:mi><m:mi>M</m:mi></m:msup><m:mo>+</m:mo><m:mn>1</m:mn><m:mo>)</m:mo></m:mrow></m:mrow></m:math> by <m:math overflow="scroll"><m:msub><m:mrow><m:mo form="prefix">DFT</m:mo><m:mtext>-3</m:mtext></m:mrow><m:mi>M</m:mi></m:msub></m:math> in <cnxn target="uid17"/>.</para>
        <para id="id2263201">Finally, the permutation in step <cnxn target="element-872"/> is the perfect
shuffle <m:math overflow="scroll"><m:msubsup><m:mi>L</m:mi><m:mi>M</m:mi><m:mi>N</m:mi></m:msubsup></m:math>, which interleaves the even and odd spectral
components (even and odd exponents of <m:math overflow="scroll"><m:msub><m:mi>W</m:mi><m:mi>N</m:mi></m:msub></m:math>).</para>
        <para id="id2263241">The final algorithm obtained is</para>
        <equation id="id2263245">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msub>
                <m:mo form="prefix">DFT</m:mo>
                <m:mrow>
                  <m:mn>2</m:mn>
                  <m:mi>M</m:mi>
                </m:mrow>
              </m:msub>
              <m:mo>=</m:mo>
              <m:msubsup>
                <m:mi>L</m:mi>
                <m:mi>M</m:mi>
                <m:mi>N</m:mi>
              </m:msubsup>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:msub>
                  <m:mo form="prefix">DFT</m:mo>
                  <m:mi>M</m:mi>
                </m:msub>
                <m:mo>⊕</m:mo>
                <m:msub>
                  <m:mrow>
                    <m:mo form="prefix">DFT</m:mo>
                    <m:mtext>-3</m:mtext>
                  </m:mrow>
                  <m:mi>M</m:mi>
                </m:msub>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:msub>
                  <m:mo form="prefix">DFT</m:mo>
                  <m:mn>2</m:mn>
                </m:msub>
                <m:mo>⊗</m:mo>
                <m:msub>
                  <m:mi>I</m:mi>
                  <m:mi>M</m:mi>
                </m:msub>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2263338">To obtain a better known form, we use <m:math overflow="scroll"><m:mrow><m:msub><m:mrow><m:mo form="prefix">DFT</m:mo><m:mtext>-3</m:mtext></m:mrow><m:mi>M</m:mi></m:msub><m:mo>=</m:mo><m:msub><m:mo form="prefix">DFT</m:mo><m:mi>M</m:mi></m:msub><m:msub><m:mi>D</m:mi><m:mi>M</m:mi></m:msub></m:mrow></m:math>,
with <m:math overflow="scroll"><m:mrow><m:msub><m:mi>D</m:mi><m:mi>M</m:mi></m:msub><m:mo>=</m:mo><m:msub><m:mo form="prefix">diag</m:mo><m:mrow><m:mn>0</m:mn><m:mo>≤</m:mo><m:mi>i</m:mi><m:mo>&lt;</m:mo><m:mi>M</m:mi></m:mrow></m:msub><m:mrow><m:mo>(</m:mo><m:msubsup><m:mi>W</m:mi><m:mi>N</m:mi><m:mi>i</m:mi></m:msubsup><m:mo>)</m:mo></m:mrow></m:mrow></m:math>, which is evident from
<cnxn target="uid17"/>. It yields</para>
        <equation id="id2263443">
          <m:math mode="display" overflow="scroll">
            <m:mtable displaystyle="true">
              <m:mtr>
                <m:mtd columnalign="right">
                  <m:msub>
                    <m:mo form="prefix">DFT</m:mo>
                    <m:mrow>
                      <m:mn>2</m:mn>
                      <m:mi>M</m:mi>
                    </m:mrow>
                  </m:msub>
                </m:mtd>
                <m:mtd>
                  <m:mo>=</m:mo>
                </m:mtd>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:msubsup>
                      <m:mi>L</m:mi>
                      <m:mi>M</m:mi>
                      <m:mi>N</m:mi>
                    </m:msubsup>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:msub>
                        <m:mo form="prefix">DFT</m:mo>
                        <m:mi>M</m:mi>
                      </m:msub>
                      <m:mo>⊕</m:mo>
                      <m:msub>
                        <m:mo form="prefix">DFT</m:mo>
                        <m:mi>M</m:mi>
                      </m:msub>
                      <m:msub>
                        <m:mi>D</m:mi>
                        <m:mi>M</m:mi>
                      </m:msub>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:msub>
                        <m:mo form="prefix">DFT</m:mo>
                        <m:mn>2</m:mn>
                      </m:msub>
                      <m:mo>⊗</m:mo>
                      <m:msub>
                        <m:mi>I</m:mi>
                        <m:mi>M</m:mi>
                      </m:msub>
                      <m:mo>)</m:mo>
                    </m:mrow>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
              <m:mtr>
                <m:mtd/>
                <m:mtd>
                  <m:mo>=</m:mo>
                </m:mtd>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:msubsup>
                      <m:mi>L</m:mi>
                      <m:mi>M</m:mi>
                      <m:mi>N</m:mi>
                    </m:msubsup>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:msub>
                        <m:mi>I</m:mi>
                        <m:mn>2</m:mn>
                      </m:msub>
                      <m:mo>⊗</m:mo>
                      <m:msub>
                        <m:mo form="prefix">DFT</m:mo>
                        <m:mi>M</m:mi>
                      </m:msub>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:msub>
                        <m:mi>I</m:mi>
                        <m:mi>M</m:mi>
                      </m:msub>
                      <m:mo>⊕</m:mo>
                      <m:msub>
                        <m:mi>D</m:mi>
                        <m:mi>M</m:mi>
                      </m:msub>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:msub>
                        <m:mo form="prefix">DFT</m:mo>
                        <m:mn>2</m:mn>
                      </m:msub>
                      <m:mo>⊗</m:mo>
                      <m:msub>
                        <m:mi>I</m:mi>
                        <m:mi>M</m:mi>
                      </m:msub>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>.</m:mo>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
            </m:mtable>
          </m:math>
        </equation>
        <para id="id2263646">The last expression is the radix-2 decimation-in-frequency
Cooley-Tukey FFT. The corresponding decimation-in-time version is
obtained by transposition using <cnxn target="uid22"/> and the symmetry of
the DFT:</para>
        <equation id="id2263659">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msub>
                <m:mo form="prefix">DFT</m:mo>
                <m:mrow>
                  <m:mn>2</m:mn>
                  <m:mi>M</m:mi>
                </m:mrow>
              </m:msub>
              <m:mo>=</m:mo>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:msub>
                  <m:mo form="prefix">DFT</m:mo>
                  <m:mn>2</m:mn>
                </m:msub>
                <m:mo>⊗</m:mo>
                <m:msub>
                  <m:mi>I</m:mi>
                  <m:mi>M</m:mi>
                </m:msub>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:msub>
                  <m:mi>I</m:mi>
                  <m:mi>M</m:mi>
                </m:msub>
                <m:mo>⊕</m:mo>
                <m:msub>
                  <m:mi>D</m:mi>
                  <m:mi>M</m:mi>
                </m:msub>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:msub>
                  <m:mi>I</m:mi>
                  <m:mn>2</m:mn>
                </m:msub>
                <m:mo>⊗</m:mo>
                <m:msub>
                  <m:mo form="prefix">DFT</m:mo>
                  <m:mi>M</m:mi>
                </m:msub>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:msubsup>
                <m:mi>L</m:mi>
                <m:mn>2</m:mn>
                <m:mi>N</m:mi>
              </m:msubsup>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2263770">The entries of the diagonal matrix <m:math overflow="scroll"><m:mrow><m:msub><m:mi>I</m:mi><m:mi>M</m:mi></m:msub><m:mo>⊕</m:mo><m:msub><m:mi>D</m:mi><m:mi>M</m:mi></m:msub></m:mrow></m:math> are
commonly called <emphasis>twiddle factors</emphasis>.</para>
        <para id="id2263807">The above method for deriving DFT algorithms is used extensively in
<cnxn target="bid2"/>.</para>
      </section>
      <section id="uid25">
        <name>General-radix FFT</name>
        <para id="id2263824">To algebraically derive the general-radix FFT, we use the <emphasis>decomposition property</emphasis> of <m:math overflow="scroll"><m:mrow><m:msup><m:mi>s</m:mi><m:mi>N</m:mi></m:msup><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:math>. Namely, if <m:math overflow="scroll"><m:mrow><m:mi>N</m:mi><m:mo>=</m:mo><m:mi>K</m:mi><m:mi>M</m:mi></m:mrow></m:math> then</para>
        <equation id="id2263872">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msup>
                <m:mi>s</m:mi>
                <m:mi>N</m:mi>
              </m:msup>
              <m:mo>-</m:mo>
              <m:mn>1</m:mn>
              <m:mo>=</m:mo>
              <m:msup>
                <m:mrow>
                  <m:mo>(</m:mo>
                  <m:msup>
                    <m:mi>s</m:mi>
                    <m:mi>M</m:mi>
                  </m:msup>
                  <m:mo>)</m:mo>
                </m:mrow>
                <m:mi>K</m:mi>
              </m:msup>
              <m:mo>-</m:mo>
              <m:mn>1</m:mn>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2263920">Decomposition means that the polynomial is written as the composition
of two polynomials: here, <m:math overflow="scroll"><m:msup><m:mi>s</m:mi><m:mi>M</m:mi></m:msup></m:math> is inserted into <m:math overflow="scroll"><m:mrow><m:msup><m:mi>s</m:mi><m:mi>K</m:mi></m:msup><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:math>.
Note that this is a special property: most polynomials do not decompose.</para>
        <para id="id2263963">Based on this polynomial decomposition, we obtain the following
stepwise decomposition of <m:math overflow="scroll"><m:mrow><m:mi mathvariant="double-struck">C</m:mi><m:mrow><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo></m:mrow><m:mo>/</m:mo><m:mrow><m:mo>(</m:mo><m:msup><m:mi>s</m:mi><m:mi>N</m:mi></m:msup><m:mo>-</m:mo><m:mn>1</m:mn><m:mo>)</m:mo></m:mrow></m:mrow></m:math>, which is more general than
the previous one in <cnxn target="uid24"/>–<cnxn target="element-872"/>. The basic idea
is to first decompose with respect to the outer polynomial <m:math overflow="scroll"><m:mrow><m:msup><m:mi>t</m:mi><m:mi>K</m:mi></m:msup><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:math>, <m:math overflow="scroll"><m:mrow><m:mi>t</m:mi><m:mo>=</m:mo><m:msup><m:mi>s</m:mi><m:mi>M</m:mi></m:msup></m:mrow></m:math>, and then completely <cnxn target="bid13"/>:</para>
        <equation id="uid26"><m:math mode="display" overflow="scroll">
            <m:mtable displaystyle="true">
              <m:mtr>
                <m:mtd/>
                <m:mtd/>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:mi mathvariant="double-struck">C</m:mi>
                    <m:mrow>
                      <m:mo>[</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>]</m:mo>
                    </m:mrow>
                    <m:mo>/</m:mo>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:msup>
                        <m:mi>s</m:mi>
                        <m:mi>N</m:mi>
                      </m:msup>
                      <m:mo>-</m:mo>
                      <m:mn>1</m:mn>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>=</m:mo>
                    <m:mi mathvariant="double-struck">C</m:mi>
                    <m:mrow>
                      <m:mo>[</m:mo>
                      <m:mi>x</m:mi>
                      <m:mo>]</m:mo>
                    </m:mrow>
                    <m:mo>/</m:mo>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:msup>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:msup>
                            <m:mi>s</m:mi>
                            <m:mi>M</m:mi>
                          </m:msup>
                          <m:mo>)</m:mo>
                        </m:mrow>
                        <m:mi>K</m:mi>
                      </m:msup>
                      <m:mo>-</m:mo>
                      <m:mn>1</m:mn>
                      <m:mo>)</m:mo>
                    </m:mrow>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
              <m:mtr>
                <m:mtd/>
                <m:mtd>
                  <m:mo>→</m:mo>
                </m:mtd>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:munder>
                      <m:mo>⊕</m:mo>
                      <m:mrow>
                        <m:mn>0</m:mn>
                        <m:mo>≤</m:mo>
                        <m:mi>i</m:mi>
                        <m:mo>&lt;</m:mo>
                        <m:mi>K</m:mi>
                      </m:mrow>
                    </m:munder>
                    <m:mi mathvariant="double-struck">C</m:mi>
                    <m:mrow>
                      <m:mo>[</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>]</m:mo>
                    </m:mrow>
                    <m:mo>/</m:mo>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:msup>
                        <m:mi>s</m:mi>
                        <m:mi>M</m:mi>
                      </m:msup>
                      <m:mo>-</m:mo>
                      <m:msubsup>
                        <m:mi>W</m:mi>
                        <m:mi>K</m:mi>
                        <m:mi>i</m:mi>
                      </m:msubsup>
                      <m:mo>)</m:mo>
                    </m:mrow>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
              
            </m:mtable>
          </m:math>
        </equation>
        <equation id="element-319"><m:math mode="display" overflow="scroll">
            <m:mtable displaystyle="true">
<m:mtr>
                <m:mtd/>
                <m:mtd>
                  <m:mo>→</m:mo>
                </m:mtd>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:munder>
                      <m:mo>⊕</m:mo>
                      <m:mrow>
                        <m:mn>0</m:mn>
                        <m:mo>≤</m:mo>
                        <m:mi>i</m:mi>
                        <m:mo>&lt;</m:mo>
                        <m:mi>K</m:mi>
                      </m:mrow>
                    </m:munder>
                    <m:munder>
                      <m:mo>⊕</m:mo>
                      <m:mrow>
                        <m:mn>0</m:mn>
                        <m:mo>≤</m:mo>
                        <m:mi>j</m:mi>
                        <m:mo>&lt;</m:mo>
                        <m:mi>M</m:mi>
                      </m:mrow>
                    </m:munder>
                    <m:mi mathvariant="double-struck">C</m:mi>
                    <m:mrow>
                      <m:mo>[</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>]</m:mo>
                    </m:mrow>
                    <m:mo>/</m:mo>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:mi>x</m:mi>
                      <m:mo>-</m:mo>
                      <m:msubsup>
                        <m:mi>W</m:mi>
                        <m:mi>N</m:mi>
                        <m:mrow>
                          <m:mi>j</m:mi>
                          <m:mi>K</m:mi>
                          <m:mo>+</m:mo>
                          <m:mi>i</m:mi>
                        </m:mrow>
                      </m:msubsup>
                      <m:mo>)</m:mo>
                    </m:mrow>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
  </m:mtable>
          </m:math>
</equation><equation id="element-149"><m:math mode="display" overflow="scroll">
            <m:mtable displaystyle="true">
<m:mtr>
                <m:mtd/>
                <m:mtd>
                  <m:mo>→</m:mo>
                </m:mtd>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:munder>
                      <m:mo>⊕</m:mo>
                      <m:mrow>
                        <m:mn>0</m:mn>
                        <m:mo>≤</m:mo>
                        <m:mi>i</m:mi>
                        <m:mo>&lt;</m:mo>
                        <m:mi>N</m:mi>
                      </m:mrow>
                    </m:munder>
                    <m:mi mathvariant="double-struck">C</m:mi>
                    <m:mrow>
                      <m:mo>[</m:mo>
                      <m:mi>s</m:mi>
                      <m:mo>]</m:mo>
                    </m:mrow>
                    <m:mo>/</m:mo>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:mi>x</m:mi>
                      <m:mo>-</m:mo>
                      <m:msubsup>
                        <m:mi>W</m:mi>
                        <m:mi>N</m:mi>
                        <m:mi>i</m:mi>
                      </m:msubsup>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>.</m:mo>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
          </m:mtable>
          </m:math>
</equation><para id="id2264377">As bases in the smaller algebras <m:math overflow="scroll"><m:mrow><m:mi mathvariant="double-struck">C</m:mi><m:mrow><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo></m:mrow><m:mo>/</m:mo><m:mrow><m:mo>(</m:mo><m:msup><m:mi>s</m:mi><m:mi>M</m:mi></m:msup><m:mo>-</m:mo><m:msubsup><m:mi>W</m:mi><m:mi>K</m:mi><m:mi>i</m:mi></m:msubsup><m:mo>)</m:mo></m:mrow></m:mrow></m:math> we choose
<m:math overflow="scroll"><m:mrow><m:msub><m:mi>c</m:mi><m:mi>i</m:mi></m:msub><m:mo>=</m:mo><m:mrow><m:mo>(</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mi>s</m:mi><m:mo>,</m:mo><m:mo>⋯</m:mo><m:mo>,</m:mo><m:msup><m:mi>s</m:mi><m:mrow><m:mi>M</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup><m:mo>)</m:mo></m:mrow></m:mrow></m:math>. As before, the derivation is completely
mechanical from here: only the three matrices corresponding to
<cnxn target="uid26"/>–<cnxn target="element-149"/> have to be read off.</para>
        <para id="id2264488">The first decomposition step requires us to compute <m:math overflow="scroll"><m:mrow><m:msup><m:mi>s</m:mi><m:mi>n</m:mi></m:msup><m:mspace width="4.pt"/><m:mtext>mod</m:mtext><m:mspace width="4.pt"/><m:mrow><m:mo>(</m:mo><m:msup><m:mi>s</m:mi><m:mi>M</m:mi></m:msup><m:mo>-</m:mo><m:msubsup><m:mi>W</m:mi><m:mi>K</m:mi><m:mi>i</m:mi></m:msubsup><m:mo>)</m:mo></m:mrow></m:mrow></m:math>, <m:math overflow="scroll"><m:mrow><m:mn>0</m:mn><m:mo>≤</m:mo><m:mi>n</m:mi><m:mo>&lt;</m:mo><m:mi>N</m:mi></m:mrow></m:math>. To do so, we decompose the index
<m:math overflow="scroll"><m:mi>n</m:mi></m:math> as <m:math overflow="scroll"><m:mrow><m:mi>n</m:mi><m:mo>=</m:mo><m:mi>ℓ</m:mi><m:mi>M</m:mi><m:mo>+</m:mo><m:mi>m</m:mi></m:mrow></m:math> and compute</para>
        <equation id="id2264593">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msup>
                <m:mi>s</m:mi>
                <m:mi>n</m:mi>
              </m:msup>
              <m:mo>=</m:mo>
              <m:msup>
                <m:mi>s</m:mi>
                <m:mrow>
                  <m:mi>ℓ</m:mi>
                  <m:mi>M</m:mi>
                  <m:mo>+</m:mo>
                  <m:mi>m</m:mi>
                </m:mrow>
              </m:msup>
              <m:mo>=</m:mo>
              <m:msup>
                <m:mrow>
                  <m:mo>(</m:mo>
                  <m:msup>
                    <m:mi>s</m:mi>
                    <m:mi>M</m:mi>
                  </m:msup>
                  <m:mo>)</m:mo>
                </m:mrow>
                <m:mi>ℓ</m:mi>
              </m:msup>
              <m:msup>
                <m:mi>s</m:mi>
                <m:mi>m</m:mi>
              </m:msup>
              <m:mo>≡</m:mo>
              <m:msubsup>
                <m:mi>W</m:mi>
                <m:mi>k</m:mi>
                <m:mrow>
                  <m:mi>ℓ</m:mi>
                  <m:mi>m</m:mi>
                </m:mrow>
              </m:msubsup>
              <m:msup>
                <m:mi>s</m:mi>
                <m:mi>m</m:mi>
              </m:msup>
              <m:mspace width="4.pt"/>
              <m:mtext>mod</m:mtext>
              <m:mspace width="4.pt"/>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:msup>
                  <m:mi>s</m:mi>
                  <m:mi>M</m:mi>
                </m:msup>
                <m:mo>-</m:mo>
                <m:msubsup>
                  <m:mi>W</m:mi>
                  <m:mi>K</m:mi>
                  <m:mi>i</m:mi>
                </m:msubsup>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2264717">This shows that the matrix for <cnxn target="uid26"/>
is given by <m:math overflow="scroll"><m:mrow><m:msub><m:mo form="prefix">DFT</m:mo><m:mi>K</m:mi></m:msub><m:mo>⊗</m:mo><m:msub><m:mi>I</m:mi><m:mi>M</m:mi></m:msub></m:mrow></m:math>.</para>
        <para id="id2264755">In step <cnxn target="element-319"/>, each <m:math overflow="scroll"><m:mrow><m:mi mathvariant="double-struck">C</m:mi><m:mrow><m:mo>[</m:mo><m:mi>s</m:mi><m:mo>]</m:mo></m:mrow><m:mo>/</m:mo><m:mrow><m:mo>(</m:mo><m:msup><m:mi>s</m:mi><m:mi>M</m:mi></m:msup><m:mo>-</m:mo><m:msubsup><m:mi>W</m:mi><m:mi>K</m:mi><m:mi>i</m:mi></m:msubsup><m:mo>)</m:mo></m:mrow></m:mrow></m:math> is completely
decomposed by its polynomial transform</para>
        <equation id="id2264810">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msub>
                <m:mo form="prefix">DFT</m:mo>
                <m:mi>M</m:mi>
              </m:msub>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:mi>i</m:mi>
                <m:mo>,</m:mo>
                <m:mi>K</m:mi>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mo>=</m:mo>
              <m:msub>
                <m:mo form="prefix">DFT</m:mo>
          