<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!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:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="Module.2004-05-24.4005">
  <name xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">FFTs of prime length and Rader's conversion</name>
  <metadata xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">
  <md:version xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">1.3</md:version>
  <md:created xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">2004/05/24 16:40:05 GMT-5</md:created>
  <md:revised xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">2006/09/24 08:38:41.648 GMT-5</md:revised>
  <md:authorlist xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">
      <md:author xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="dljones">
      <md:firstname xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Douglas</md:firstname>
      <md:othername xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">L.</md:othername>
      <md:surname xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Jones</md:surname>
      <md:email xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">dl-jones@uiuc.edu</md:email>
    </md:author>
  </md:authorlist>

  <md:maintainerlist xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">
    <md:maintainer xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="dljones">
      <md:firstname xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Douglas</md:firstname>
      <md:othername xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">L.</md:othername>
      <md:surname xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Jones</md:surname>
      <md:email xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">dl-jones@uiuc.edu</md:email>
    </md:maintainer>
    <md:maintainer xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="kclarks">
      <md:firstname xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Kyle</md:firstname>
      <md:othername xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Evan</md:othername>
      <md:surname xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Clarkson</md:surname>
      <md:email xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">kclarks@rice.edu</md:email>
    </md:maintainer>
  </md:maintainerlist>
  
  <md:keywordlist xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">
    <md:keyword xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">chirp z-transform</md:keyword>
    <md:keyword xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">index map</md:keyword>
    <md:keyword xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">prime factor algorithm</md:keyword>
    <md:keyword xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">prime length FFTs</md:keyword>
    <md:keyword xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Rader's conversion</md:keyword>
    <md:keyword xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">WFTA</md:keyword>
    <md:keyword xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Winograd</md:keyword>
    <md:keyword xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Winograd Fourier Transform Algorithm</md:keyword>
  </md:keywordlist>

  <md:abstract xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">FFTs of prime length can be computed efficiently via Rader's conversion, via the chirp z-transform, or by use of Winograd methods.</md:abstract>
</metadata>

  <content xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">
    <para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="element-953">The <cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" document="m12059">power-of-two FFT algorithms</cnxn>, such as the <cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" document="m12016">radix-2</cnxn>
and <cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" document="m12027">radix-4</cnxn> FFTs, and the <cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" document="m12025">common-factor</cnxn>
and <cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" document="m12033">prime-factor</cnxn> FFTs, achieve great reductions in computational complexity
of the <cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" document="m12019">DFT</cnxn> when the length, <m:math><m:ci>N</m:ci></m:math>,
is a composite number.
DFTs of prime length are sometimes needed, however, particularly for the short-length DFTs in
common-factor or prime-factor algorithms.
The methods described here, along with the composite-length algorithms, allow fast computation
of DFTs of <emphasis xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">any</emphasis> length.</para><para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="element-326">There are two main ways of performing DFTs of prime length:
	<list xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="listq" type="enumerated"><name xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/"/>
          <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Rader's conversion, which is most efficient, and the</item>
	  <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/"><cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" document="m12013">Chirp-z transform</cnxn>, which is simpler and more general.</item>
	</list>
Oddly enough, both work by turning prime-length DFTs into convolution!
The resulting convolutions can then be computed efficiently by either
	<list xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="listN" type="enumerated">
	  <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/"><cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" document="m12022">fast convolution</cnxn> via composite-length FFTs (simpler) or by</item>
	  <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Winograd techniques (more efficient)</item>
	</list></para>
    
    <section xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="Radersconv">
      <name xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Rader's Conversion</name>
      <para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para4"><term xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Rader's conversion</term> is a one-dimensional <cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" document="m12025">index-mapping</cnxn> scheme that turns a
	length-<m:math><m:ci>N</m:ci></m:math> <cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" document="m12032" target="DFTequation">DFT</cnxn>
	(<m:math><m:ci>N</m:ci></m:math> prime) into a
	length-(
	<m:math>
	  <m:apply>
	    <m:minus/>
	    <m:ci>N</m:ci>
	    <m:cn>1</m:cn>
	  </m:apply>
	</m:math>) convolution and a few additions.
        Rader's conversion works <emphasis xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">only</emphasis> for prime-length <m:math><m:ci>N</m:ci></m:math>.
      </para>
      <para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para5">An <term xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">index map</term> simply rearranges the order of the sum operation in the
        <cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" document="m12019">DFT definition</cnxn>.
        Because addition is a commutative operation, the same mathematical result is produced
        from any order, as long as all of the same terms are added once and only once.  (This is
        the condition that defines an index map.)
	Unlike the <cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" document="m12025">multi-dimensional index maps</cnxn> used in deriving
        <cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" document="m12025">common factor</cnxn> and <cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" document="m12033">prime-factor FFTs</cnxn>,
        Rader's conversion uses a one-dimensional index map in a finite group of
        <m:math><m:ci>N</m:ci></m:math> integers:
	<m:math>
	  <m:apply>
	    <m:eq/>
	    <m:ci>k</m:ci>
	    <m:apply>
	      <m:rem/>
	      <m:apply>
		<m:power/>
		<m:ci>r</m:ci>
		<m:ci>m</m:ci>
	      </m:apply>
	      <m:ci>N</m:ci>
	    </m:apply>
	  </m:apply>
	</m:math>
      </para>
      <section xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">
	<name xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Fact from number theory</name>
	<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para6">
	  If <m:math><m:ci>N</m:ci></m:math> is prime, there exists an
	  integer "<m:math><m:ci>r</m:ci></m:math>" called a
	  <term xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">primitive root</term>, such that the index map
	  <m:math>
	    <m:apply>
	      <m:eq/>
	      <m:ci>k</m:ci>
	      <m:apply>
		<m:rem/>
		<m:apply>
		  <m:power/>
		  <m:ci>r</m:ci>
		  <m:ci>m</m:ci>
		</m:apply>
		<m:ci>N</m:ci>
	      </m:apply>
	    </m:apply>
	  </m:math>, 
	  <m:math>
	    <m:apply>
	      <m:eq/>
	      <m:ci>m</m:ci>
	      <m:list>
		<m:cn>0</m:cn>
		<m:cn>1</m:cn>
		<m:cn>2</m:cn>
		<m:ci>…</m:ci>
		<m:apply>
		  <m:minus/>
		  <m:ci>N</m:ci>
		  <m:cn>2</m:cn>
		</m:apply>
	      </m:list>
	    </m:apply>
	  </m:math>, uniquely generates all elements 
	  <m:math>
	    <m:apply>
	      <m:eq/>
	      <m:ci>k</m:ci>
	      <m:list>
		<m:cn>1</m:cn>
		<m:cn>2</m:cn>
		<m:cn>3</m:cn>
		<m:ci>…</m:ci>
		<m:apply>
		  <m:minus/>
		  <m:ci>N</m:ci>
		  <m:cn>1</m:cn>
		</m:apply>
	      </m:list>
	    </m:apply>
	  </m:math>
	</para>
	<example xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="exam1">
	  <para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para7">
	    <m:math>
	      <m:apply>
		<m:eq/>
		<m:ci>N</m:ci>
		<m:cn>5</m:cn>
	      </m:apply>
	    </m:math>, 
	    <m:math>
	      <m:apply>
		<m:eq/>
		<m:ci>r</m:ci>
		<m:cn>2</m:cn>
	      </m:apply>
	    </m:math>
	    <m:math display="block">
	      <m:apply>
		<m:eq/>
		<m:apply>
		  <m:rem/>
		  <m:apply>
		    <m:power/>
		    <m:cn>2</m:cn>
		    <m:cn>0</m:cn>
		  </m:apply>
		  <m:cn>5</m:cn>
		</m:apply>
		<m:cn>1</m:cn>
	      </m:apply>
	    </m:math>
	    <m:math display="block">
	      <m:apply>
		<m:eq/>
		<m:apply>
		  <m:rem/>
		  <m:apply>
		    <m:power/>
		    <m:cn>2</m:cn>
		    <m:cn>1</m:cn>
		  </m:apply>
		  <m:cn>5</m:cn>
		</m:apply>
		<m:cn>2</m:cn>
	      </m:apply>
	    </m:math> 
	    <m:math display="block">
	      <m:apply>
		<m:eq/>
		<m:apply>
		  <m:rem/>
		  <m:apply>
		    <m:power/>
		    <m:cn>2</m:cn>
		    <m:cn>2</m:cn>
		  </m:apply>
		  <m:cn>5</m:cn>
		</m:apply>
		<m:cn>4</m:cn>
	      </m:apply>
	    </m:math>
	    <m:math display="block">
	      <m:apply>
		<m:eq/>
		<m:apply>
		  <m:rem/>
		  <m:apply>
		    <m:power/>
		    <m:cn>2</m:cn>
		    <m:cn>3</m:cn>
		  </m:apply>
		  <m:cn>5</m:cn>
		</m:apply>
		<m:cn>3</m:cn>
	      </m:apply>
	    </m:math>
	  </para>
	</example>
      </section>
      <section xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">
	<name xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Another fact from number theory</name>
	<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para8">
	  For <m:math><m:ci>N</m:ci></m:math> prime, the inverse of
	  <m:math><m:ci>r</m:ci></m:math> (i.e.
	  <m:math>
	    <m:apply>
	      <m:eq/>
	      <m:apply>
		<m:rem/>
		<m:apply>
		  <m:times/>
		  <m:apply>
		    <m:inverse/>
		    <m:ci>r</m:ci>
		  </m:apply>
		  <m:ci>r</m:ci>
		</m:apply>
		<m:ci>N</m:ci>
	      </m:apply>
	      <m:cn>1</m:cn>
	    </m:apply>
	  </m:math> is also a primitive root (call it
	  <m:math>
	    <m:apply>
	      <m:inverse/>
	      <m:ci>r</m:ci>
	    </m:apply>
	  </m:math>).
	</para>
	<example xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="exam2">
	  <para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para9"><m:math>
	      <m:apply>
		<m:eq/>
		<m:ci>N</m:ci>
		<m:cn>5</m:cn>
	      </m:apply>
	    </m:math>,
	    <m:math>
	      <m:apply>
		<m:eq/>
		<m:ci>r</m:ci>
		<m:cn>2</m:cn>
	      </m:apply>
	    </m:math>
	    <m:math>
	      <m:apply>
		<m:eq/>
		<m:apply>
		  <m:inverse/>
		  <m:ci>r</m:ci>
		</m:apply>
		<m:cn>3</m:cn>
	      </m:apply>
	    </m:math>
	    <m:math display="block">
	      <m:apply>
		<m:eq/>
		<m:apply>
		  <m:rem/>
		  <m:apply>
		    <m:times/>
		    <m:cn>2</m:cn>
		    <m:cn>3</m:cn>
		  </m:apply>
		  <m:cn>5</m:cn>
		</m:apply>
		<m:cn>1</m:cn>
	      </m:apply>
	    </m:math>
	    <m:math display="block">
	      <m:apply>
		<m:eq/>
		<m:apply>
		  <m:rem/>
		  <m:apply>
		    <m:power/>
		    <m:cn>3</m:cn>
		    <m:cn>0</m:cn>
		  </m:apply>
		  <m:cn>5</m:cn>
		</m:apply>
		<m:cn>1</m:cn>
	      </m:apply>
	    </m:math>
	    <m:math display="block">
	      <m:apply>
		<m:eq/>
		<m:apply>
		  <m:rem/>
		  <m:apply>
		    <m:power/>
		    <m:cn>3</m:cn>
		    <m:cn>1</m:cn>
		  </m:apply>
		  <m:cn>5</m:cn>
		</m:apply>
		<m:cn>3</m:cn>
	      </m:apply>
	    </m:math>
	    <m:math display="block">
	      <m:apply>
		<m:eq/>
		<m:apply>
		  <m:rem/>
		  <m:apply>
		    <m:power/>
		    <m:cn>3</m:cn>
		    <m:cn>2</m:cn>
		  </m:apply>
		  <m:cn>5</m:cn>
		</m:apply>
		<m:cn>4</m:cn>
	      </m:apply>
	    </m:math>
	    <m:math display="block">
	      <m:apply>
		<m:eq/>
		<m:apply>
		  <m:rem/>
		  <m:apply>
		    <m:power/>
		    <m:cn>3</m:cn>
		    <m:cn>3</m:cn>
		  </m:apply>
		  <m:cn>5</m:cn>
		</m:apply>
		<m:cn>2</m:cn>
	      </m:apply>
	    </m:math>
	  </para>
	</example>
	<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para9a">So why do we care?  Because we can use these facts to turn a
	  <cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" document="m12032" target="DFTequation">DFT</cnxn> into a convolution!
	</para>
      </section>
      <section xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">
	<name xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Rader's Conversion</name>
	<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para10">Let
	  <m:math>
	    <m:apply>
	      <m:forall/>
	      <m:bvar>
		<m:ci>m</m:ci>
		<m:ci>n</m:ci>
	      </m:bvar>
	      <m:condition>
		<m:apply>
		  <m:and/>
		  <m:apply>
		    <m:eq/>
		    <m:ci>m</m:ci>
		    <m:list>
		      <m:cn>0</m:cn>
		      <m:cn>1</m:cn>
		      <m:ci>…</m:ci>
		      <m:apply>
			<m:minus/>
			<m:ci>N</m:ci>
			<m:cn>2</m:cn>
		      </m:apply>
		    </m:list>
		  </m:apply>
		  <m:apply>
		    <m:in/>
		    <m:ci>n</m:ci>
		    <m:list>
		      <m:cn>1</m:cn>
		      <m:cn>2</m:cn>
		      <m:ci>…</m:ci>
		      <m:apply>
			<m:minus/>
			<m:ci>N</m:ci>
			<m:cn>1</m:cn>
		      </m:apply>
		    </m:list>
		  </m:apply>
		</m:apply>
	      </m:condition>
	      <m:apply>
		<m:eq/>
		<m:ci>n</m:ci>
		<m:apply>
		  <m:rem/>
		  <m:apply>
		    <m:power/>
		    <m:ci>r</m:ci>
		    <m:apply>
		      <m:minus/>
		      <m:ci>m</m:ci>
		    </m:apply>
		  </m:apply>
		  <m:ci>N</m:ci>
		</m:apply>
	      </m:apply>
	    </m:apply>
	  </m:math>,
	  <m:math>
	    <m:apply>
	      <m:forall/>
	      <m:bvar>
		<m:ci>p</m:ci>
		<m:ci>k</m:ci>
	      </m:bvar>
	      <m:condition>
		<m:apply>
		  <m:and/>
		  <m:apply>
		    <m:eq/>
		    <m:ci>p</m:ci>
		    <m:list>
		      <m:cn>0</m:cn>
		      <m:cn>1</m:cn>
		      <m:ci>…</m:ci>
		      <m:apply>
			<m:minus/>
			<m:ci>N</m:ci>
			<m:cn>2</m:cn>
		      </m:apply>
		    </m:list>
		  </m:apply>
		  <m:apply>
		    <m:in/>
		    <m:ci>k</m:ci>
		    <m:list>
		      <m:cn>1</m:cn>
		      <m:cn>2</m:cn>
		      <m:ci>…</m:ci>
		      <m:apply>
			<m:minus/>
			<m:ci>N</m:ci>
			<m:cn>1</m:cn>
		      </m:apply>
		    </m:list>
		  </m:apply>
		</m:apply>
	      </m:condition>
	      <m:apply>
		<m:eq/>
		<m:ci>k</m:ci>
		<m:apply>
		  <m:rem/>
		  <m:apply>
		    <m:power/>
		    <m:ci>r</m:ci>
		    <m:ci>p</m:ci>
		  </m:apply>
		  <m:ci>N</m:ci>
		</m:apply>
	      </m:apply>
	    </m:apply>
	  </m:math>
	  <m:math display="block">
	    <m:apply>
	      <m:eq/>
	      <m:apply>
		<m:ci type="fn">X</m:ci>
		<m:ci>k</m:ci>
	      </m:apply>
	      <m:apply>
		<m:sum/>
		<m:bvar>
		  <m:ci>n</m:ci>
		</m:bvar>
		<m:uplimit>
		  <m:apply>
		    <m:minus/>
		    <m:ci>N</m:ci>
		    <m:cn>1</m:cn>
		  </m:apply>
		</m:uplimit>
		<m:lowlimit>
		  <m:cn>0</m:cn>
		</m:lowlimit>
		<m:apply>
		  <m:times/>
		  <m:apply>
		    <m:ci type="fn">x</m:ci>
		    <m:cn>n</m:cn>
		  </m:apply>
		  <m:ci>
		    <m:msubsup>
		      <m:mi>W</m:mi>
		      <m:mi>N</m:mi>
		      <m:mrow>
			<m:mi>n</m:mi>
			<m:mi>k</m:mi>
		      </m:mrow>
		    </m:msubsup>
		  </m:ci>
		</m:apply>
	      </m:apply>
	      <m:apply>
		<m:piecewise>
		  <m:piece>
		    <m:apply>
		      <m:plus/>
		      <m:apply>
			<m:ci type="fn">x</m:ci>
			<m:cn>0</m:cn>
		      </m:apply>
		      <m:apply>
			<m:sum/>
			<m:bvar>
			  <m:ci>n</m:ci>
			</m:bvar>
			<m:uplimit>
			  <m:apply>
			    <m:minus/>
			    <m:ci>N</m:ci>
			    <m:cn>1</m:cn>
			  </m:apply>
			</m:uplimit>
			<m:lowlimit>
			  <m:cn>1</m:cn>
			</m:lowlimit>
			<m:apply>
			  <m:times/>
			  <m:apply>
			    <m:ci type="fn">x</m:ci>
			    <m:ci>n</m:ci>
			  </m:apply>
			  <m:ci>
			    <m:msubsup>
			      <m:mi>W</m:mi>
			      <m:mi>N</m:mi>
			      <m:mrow>
				<m:mi>n</m:mi>
				<m:mi>k</m:mi>
			      </m:mrow>
			    </m:msubsup>
			  </m:ci>
			</m:apply>
		      </m:apply>
		    </m:apply>
		    <m:apply>
		      <m:neq/>
		      <m:ci>k</m:ci>
		      <m:cn>0</m:cn>
		    </m:apply>
		  </m:piece>
		  <m:piece>
		    <m:apply>
		      <m:sum/>
		      <m:bvar>
			<m:ci>n</m:ci>
		      </m:bvar>
		      <m:uplimit>
			<m:apply>
			  <m:minus/>
			  <m:ci>N</m:ci>
			  <m:cn>1</m:cn>
			</m:apply>
		      </m:uplimit>
		      <m:lowlimit>
			<m:cn>0</m:cn>
		      </m:lowlimit>
		      <m:apply>
			<m:ci type="fn">x</m:ci>
			<m:ci>n</m:ci>
		      </m:apply>
		    </m:apply>
		    <m:apply>
		      <m:eq/>
		      <m:ci>k</m:ci>
		      <m:cn>0</m:cn>
		    </m:apply>
		  </m:piece>
		</m:piecewise>
	      </m:apply>
	    </m:apply>
	  </m:math>
          where for convenience
<m:math>
  <m:apply>
    <m:eq/>
      <m:ci>
	<m:msubsup>
	  <m:mi>W</m:mi>
	  <m:mi>N</m:mi>
          <m:apply>
          <m:times/>
            <m:mi>n</m:mi>
	    <m:mi>k</m:mi>
          </m:apply>
	</m:msubsup>
      </m:ci>
      <m:apply>
	<m:exp/>
	  <m:apply>
	    <m:minus/>
              <m:apply>
	        <m:times/>
		  <m:imaginaryi/>
		    <m:apply>
		      <m:divide/>
		       <m:apply>
			<m:times/>
			<m:cn>2</m:cn>
			<m:pi/>
                        <m:ci>n</m:ci>
			<m:ci>k</m:ci>
		       </m:apply>
		     <m:ci>N</m:ci>
		    </m:apply>
		  </m:apply>
		</m:apply>
	      </m:apply>
        </m:apply>
	</m:math>
        in the DFT equation.
	  For
	  <m:math>
	    <m:apply>
	      <m:neq/>
	      <m:ci>k</m:ci>
	      <m:cn>0</m:cn>
	    </m:apply>
	  </m:math>
	  <equation xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="eq2">
	    <m:math>
	      <m:apply>
		<m:eq/>
		<m:apply>
		  <m:ci type="fn">X</m:ci>
		  <m:apply>
		    <m:rem/>
		    <m:apply>
		      <m:power/>
		      <m:ci>r</m:ci>
		      <m:ci>p</m:ci>
		    </m:apply>
		    <m:ci>N</m:ci>
		  </m:apply>
		</m:apply>
		<m:apply>
		  <m:plus/>
		  <m:apply>
		    <m:sum/>
		    <m:bvar>
		      <m:ci>m</m:ci>
		    </m:bvar>
		    <m:uplimit>
		      <m:apply>
			<m:minus/>
			<m:ci>N</m:ci>
			<m:cn>2</m:cn>
		      </m:apply>
		    </m:uplimit>
		    <m:lowlimit>
		      <m:cn>0</m:cn>
		    </m:lowlimit>
		    <m:apply>
		      <m:times/>
		      <m:apply>
			<m:ci type="fn">x</m:ci>
			<m:apply>
			  <m:rem/>
			  <m:apply>
			    <m:power/>
			    <m:ci>r</m:ci>
			    <m:apply>
			      <m:minus/>
			      <m:ci>m</m:ci>
			    </m:apply>
			  </m:apply>
			  <m:ci>N</m:ci>
			</m:apply>
		      </m:apply>
		      <m:ci>
			<m:msup>
			  <m:mi>W</m:mi>
			  <m:mrow>
			    <m:msup>
			      <m:mi>r</m:mi>
			      <m:mi>p</m:mi>
			    </m:msup>
			    <m:msup>
			      <m:mi>r</m:mi>
			      <m:mrow>
				<m:mo>-</m:mo>
				<m:mi>m</m:mi>
			      </m:mrow>
			    </m:msup>
			  </m:mrow>
			</m:msup>
		      </m:ci>
		    </m:apply>
		  </m:apply>
		  <m:apply>
		    <m:ci type="fn">x</m:ci>
		    <m:cn>0</m:cn>
		  </m:apply>
		</m:apply>
		<m:apply>
		  <m:plus/>
		  <m:apply>
		    <m:sum/>
		    <m:bvar>
		      <m:ci>m</m:ci>
		    </m:bvar>
		    <m:uplimit>
		      <m:apply>
			<m:minus/>
			<m:ci>N</m:ci>
			<m:cn>2</m:cn>
		      </m:apply>
		    </m:uplimit>
		    <m:lowlimit>
		      <m:cn>0</m:cn>
		    </m:lowlimit>
		    <m:apply>
		      <m:times/>
		      <m:apply>
			<m:ci type="fn">x</m:ci>
			<m:apply>
			  <m:rem/>
			  <m:apply>
			    <m:power/>
			    <m:ci>r</m:ci>
			    <m:apply>
			      <m:minus/>
			      <m:ci>m</m:ci>
			    </m:apply>
			  </m:apply>
			  <m:ci>N</m:ci>
			</m:apply>
		      </m:apply>
		      <m:ci>
			<m:msup>
			  <m:mi>W</m:mi>
			  <m:msup>
			    <m:mi>r</m:mi>
			    <m:mrow>
			      <m:mi>p</m:mi>
			      <m:mo>-</m:mo>
			      <m:mi>m</m:mi>
			    </m:mrow>
			  </m:msup>
			</m:msup>
		      </m:ci>
		    </m:apply>
		  </m:apply>
		  <m:apply>
		    <m:ci type="fn">x</m:ci>
		    <m:cn>0</m:cn>
		  </m:apply>
		</m:apply>
		<m:apply>
		  <m:plus/>
		  <m:apply>
		    <m:ci type="fn">x</m:ci>
		    <m:cn>0</m:cn>
		  </m:apply>
		  <m:apply>
		    <m:csymbol definitionURL="http://cnx.rice.edu/cd/cnxmath.ocd#convolve"/>
		    <m:apply>
		      <m:ci type="fn">x</m:ci>
		      <m:apply>
			<m:rem/>
			<m:apply>
			  <m:power/>
			  <m:ci>r</m:ci>
			  <m:apply>
			    <m:minus/>
			    <m:ci>l</m:ci>
			  </m:apply>
			</m:apply>
			<m:ci>N</m:ci>
		      </m:apply>
		    </m:apply>
		    <m:ci>
		      <m:msup>
			<m:mi>W</m:mi>
			<m:msup>
			  <m:mi>r</m:mi>
			  <m:mi>l</m:mi>
			</m:msup>
		      </m:msup>
		    </m:ci>
		  </m:apply>
		</m:apply>
	      </m:apply>
	    </m:math>
	  </equation>
	  where 
	  <m:math>
	    <m:apply>
	      <m:eq/>
	      <m:ci>l</m:ci>
	      <m:list>
		<m:cn>0</m:cn>
		<m:cn>1</m:cn>
		<m:ci>…</m:ci>
		<m:apply>
		  <m:minus/>
		  <m:ci>N</m:ci>
		  <m:cn>2</m:cn>
		</m:apply>
	      </m:list>
	    </m:apply>
	  </m:math>  
	</para>
	<example xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="exam4">
	  <para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para77"><m:math>
	      <m:apply>
		<m:eq/>
		<m:ci>N</m:ci>
		<m:cn>5</m:cn>
	      </m:apply>
	    </m:math>,
	    <m:math>
	      <m:apply>
		<m:eq/>
		<m:ci>r</m:ci>
		<m:cn>2</m:cn>
	      </m:apply>
	    </m:math>,
	    <m:math>
	      <m:apply>
		<m:eq/>
		<m:apply>
		  <m:inverse/>
		  <m:ci>r</m:ci>
		</m:apply>
		<m:cn>3</m:cn>
	      </m:apply>
	    </m:math>
	    <m:math display="block">
	      <m:apply>
		<m:eq/>
		<m:matrix>
		  <m:matrixrow>
		    <m:apply>
		      <m:ci type="fn">X</m:ci>
		      <m:cn>0</m:cn>
		    </m:apply>
		  </m:matrixrow>
		  <m:matrixrow>
		    <m:apply>
		      <m:ci type="fn">X</m:ci>
		      <m:cn>1</m:cn>
		    </m:apply>
		  </m:matrixrow>
		  <m:matrixrow>
		    <m:apply>
		      <m:ci type="fn">X</m:ci>
		      <m:cn>2</m:cn>
		    </m:apply>
		  </m:matrixrow>
		  <m:matrixrow>
		    <m:apply>
		      <m:ci type="fn">X</m:ci>
		      <m:cn>3</m:cn>
		    </m:apply>
		  </m:matrixrow>
		  <m:matrixrow>
		    <m:apply>
		      <m:ci type="fn">X</m:ci>
		      <m:cn>4</m:cn>
		    </m:apply>
		  </m:matrixrow>
		</m:matrix>
		<m:apply>
		  <m:times/>
		  <m:matrix>
		    <m:matrixrow>
		      <m:cn>0</m:cn>
		      <m:cn>0</m:cn>
		      <m:cn>0</m:cn>
		      <m:cn>0</m:cn>
		      <m:cn>0</m:cn>
		    </m:matrixrow>
		    <m:matrixrow>
		      <m:cn>0</m:cn>
		      <m:cn>1</m:cn>
		      <m:cn>2</m:cn>
		      <m:cn>3</m:cn>
		      <m:cn>4</m:cn>
		    </m:matrixrow>
		    <m:matrixrow>
		      <m:cn>0</m:cn>
		      <m:cn>2</m:cn>
		      <m:cn>4</m:cn>
		      <m:cn>1</m:cn>
		      <m:cn>3</m:cn>
		    </m:matrixrow>
		    <m:matrixrow>
		      <m:cn>0</m:cn>
		      <m:cn>3</m:cn>
		      <m:cn>1</m:cn>
		      <m:cn>4</m:cn>
		      <m:cn>2</m:cn>
		    </m:matrixrow>
		    <m:matrixrow>
		      <m:cn>0</m:cn>
		      <m:cn>4</m:cn>
		      <m:cn>3</m:cn>
		      <m:cn>2</m:cn>
		      <m:cn>1</m:cn>
		    </m:matrixrow>
		  </m:matrix>
		  <m:matrix>
		    <m:matrixrow>
		      <m:apply>
			<m:ci type="fn">x</m:ci>
			<m:cn>0</m:cn>
		      </m:apply>
		    </m:matrixrow>
		    <m:matrixrow>
		      <m:apply>
			<m:ci type="fn">x</m:ci>
			<m:cn>1</m:cn>
		      </m:apply>
		    </m:matrixrow>
		    <m:matrixrow>
		      <m:apply>
			<m:ci type="fn">x</m:ci>
			<m:cn>2</m:cn>
		      </m:apply>
		    </m:matrixrow>
		    <m:matrixrow>
		      <m:apply>
			<m:ci type="fn">x</m:ci>
			<m:cn>3</m:cn>
		      </m:apply>
		    </m:matrixrow>
		    <m:matrixrow>
		      <m:apply>
			<m:ci type="fn">x</m:ci>
			<m:cn>4</m:cn>
		      </m:apply>
		    </m:matrixrow>
		  </m:matrix>
		</m:apply>
	      </m:apply>
	    </m:math>
	    <m:math display="block">
	      <m:apply>
		<m:eq/>
		<m:matrix>
		  <m:matrixrow>
		    <m:apply>
		      <m:ci type="fn">X</m:ci>
		      <m:cn>0</m:cn>
		    </m:apply>
		  </m:matrixrow>
		  <m:matrixrow>
		    <m:apply>
		      <m:ci type="fn">X</m:ci>
		      <m:cn>1</m:cn>
		    </m:apply>
		  </m:matrixrow>
		  <m:matrixrow>
		    <m:apply>
		      <m:ci type="fn">X</m:ci>
		      <m:cn>2</m:cn>
		    </m:apply>
		  </m:matrixrow>
		  <m:matrixrow>
		    <m:apply>
		      <m:ci type="fn">X</m:ci>
		      <m:cn>4</m:cn>
		    </m:apply>
		  </m:matrixrow>
		  <m:matrixrow>
		    <m:apply>
		      <m:ci type="fn">X</m:ci>
		      <m:cn>3</m:cn>
		    </m:apply>
		  </m:matrixrow>
		</m:matrix>
		<m:apply>
		  <m:times/>
		  <m:matrix>
		    <m:matrixrow>
		      <m:cn>0</m:cn>
		      <m:cn>0</m:cn>
		      <m:cn>0</m:cn>
		      <m:cn>0</m:cn>
		      <m:cn>0</m:cn>
		    </m:matrixrow>
		    <m:matrixrow>
		      <m:cn>0</m:cn>
		      <m:cn>1</m:cn>
		      <m:cn>3</m:cn>
		      <m:cn>4</m:cn>
		      <m:cn>2</m:cn>
		    </m:matrixrow>
		    <m:matrixrow>
		      <m:cn>0</m:cn>
		      <m:cn>2</m:cn>
		      <m:cn>1</m:cn>
		      <m:cn>3</m:cn>
		      <m:cn>4</m:cn>
		    </m:matrixrow>
		    <m:matrixrow>
		      <m:cn>0</m:cn>
		      <m:cn>4</m:cn>
		      <m:cn>2</m:cn>
		      <m:cn>1</m:cn>
		      <m:cn>1</m:cn>
		    </m:matrixrow>
		    <m:matrixrow>
		      <m:cn>0</m:cn>
		      <m:cn>3</m:cn>
		      <m:cn>4</m:cn>
		      <m:cn>2</m:cn>
		      <m:cn>3</m:cn>
		    </m:matrixrow>
		  </m:matrix>
		  <m:matrix>
		    <m:matrixrow>
		      <m:apply>
			<m:ci type="fn">x</m:ci>
			<m:cn>0</m:cn>
		      </m:apply>
		    </m:matrixrow>
		    <m:matrixrow>
		      <m:apply>
			<m:ci type="fn">x</m:ci>
			<m:cn>1</m:cn>
		      </m:apply>
		    </m:matrixrow>
		    <m:matrixrow>
		      <m:apply>
			<m:ci type="fn">x</m:ci>
			<m:cn>3</m:cn>
		      </m:apply>
		    </m:matrixrow>
		    <m:matrixrow>
		      <m:apply>
			<m:ci type="fn">x</m:ci>
			<m:cn>4</m:cn>
		      </m:apply>
		    </m:matrixrow>
		    <m:matrixrow>
		      <m:apply>
			<m:ci type="fn">x</m:ci>
			<m:cn>2</m:cn>
		      </m:apply>
		    </m:matrixrow>
		  </m:matrix>
		</m:apply>
	      </m:apply>
	    </m:math>
            where for visibility the matrix entries represent only the <emphasis xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">power</emphasis>, <m:math><m:ci>m</m:ci></m:math> of the corresponding
            DFT term
    <m:math>
      <m:ci>
	<m:msubsup>
	  <m:mi>W</m:mi>
	  <m:mi>N</m:mi>
	  <m:mi>m</m:mi>
	</m:msubsup>
      </m:ci>
    </m:math>
	    Note that the 4-by-4 <link xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" src="http://en.wikipedia.org/wiki/Circulant_matrix">circulant matrix</link>
	    <m:math display="block">
	      <m:matrix>
		<m:matrixrow>
		  <m:cn>1</m:cn>
		  <m:cn>3</m:cn>
		  <m:cn>4</m:cn>
		  <m:cn>2</m:cn>
		</m:matrixrow>
		<m:matrixrow>
		  <m:cn>2</m:cn>
		  <m:cn>1</m:cn>
		  <m:cn>3</m:cn>
		  <m:cn>4</m:cn>
		</m:matrixrow>
		<m:matrixrow>
		  <m:cn>4</m:cn>
		  <m:cn>2</m:cn>
		  <m:cn>1</m:cn>
		  <m:cn>1</m:cn>
		</m:matrixrow>
		<m:matrixrow>
		  <m:cn>3</m:cn>
		  <m:cn>4</m:cn>
		  <m:cn>2</m:cn>
		  <m:cn>3</m:cn>
		</m:matrixrow>
	      </m:matrix>
	    </m:math>
            corresponds to a length-4 circular convolution.
	  </para>
	</example>
	<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para78">Rader's conversion turns a prime-length <cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" document="m12032" target="DFTequation">DFT</cnxn> into a few adds
	  and a <emphasis xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">composite-length</emphasis>
	  (<m:math>
	    <m:apply>
	      <m:minus/>
	      <m:ci>N</m:ci>
	      <m:cn>1</m:cn>
	    </m:apply>
	  </m:math>) circular convolution, which can be computed
	  efficiently using either
	  <list xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="list78" type="enumerated"><item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/"><cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" document="m12022">fast convolution</cnxn> via FFT and IFFT</item>
	    <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">index-mapped convolution algorithms and short
	    Winograd convolution alogrithms. (Rather complicated, and trades fewer multiplies
            for many more adds, which may not be worthwile on most modern processors.) See <cite xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" src="#Agarwal">R.C. Agarwal and J.W. Cooley</cite></item>
	  </list>
	</para>
      </section>
    </section>
      <section xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="Winograd">
	<name xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Winograd minimum-multiply convolution and DFT algorithms</name>
	<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para79">S. Winograd has proved that a
	  length-<m:math><m:ci>N</m:ci></m:math> circular or linear
	  convolution or <cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" document="m12032" target="DFTequation">DFT</cnxn> requires less than
	  <m:math>
	    <m:apply>
	      <m:times/>
	      <m:cn>2</m:cn>
	      <m:ci>N</m:ci>
	    </m:apply>
	  </m:math> multiplies (for real data), or
	  <m:math>
	    <m:apply>
	      <m:times/>
	      <m:cn>4</m:cn>
	      <m:ci>N</m:ci>
	    </m:apply>
	  </m:math> real multiplies for complex data. (This doesn't
	  count multiplies by rational fractions, like
	  <m:math><m:cn>3</m:cn></m:math> or
	  <m:math>
	    <m:apply>
	      <m:divide/>
	      <m:cn>1</m:cn>
	      <m:ci>N</m:ci>
	    </m:apply>
	  </m:math> or 
	  <m:math>
	    <m:apply> 
	      <m:divide/>
	      <m:cn>5</m:cn>
	      <m:cn>17</m:cn>
	    </m:apply>
	  </m:math>, which can be computed with additions and one
	  overall scaling factor.) Furthermore, Winograd showed how to
	  construct algorithms achieving these counts. Winograd
	  prime-length DFTs and convolutions have the following
	  characteristics:
	  <list xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="list79" type="enumerated">
	    <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Extremely efficient for small
	      <m:math><m:ci>N</m:ci></m:math>
	      (<m:math>
		<m:apply>
		  <m:lt/>
		  <m:ci>N</m:ci>
		  <m:cn>20</m:cn>
		</m:apply>
	      </m:math>)
	    </item>
	    <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">The number of adds becomes <emphasis xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">huge</emphasis>
	    for large <m:math><m:ci>N</m:ci></m:math>.
	    </item>
	  </list>
	  Thus Winograd's minimum-multiply FFT's are useful only for
	  small <m:math><m:ci>N</m:ci></m:math>. They are
	  very important for <cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" document="m12033">Prime-Factor
	  Algorithms</cnxn>, which generally use Winograd modules to
	  implement the short-length DFTs.  Tables giving the
	  multiplies and adds necessary to compute Winograd FFTs for
	  various lengths can be found in <cite xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" src="#Burrus">C.S. Burrus (1988)</cite>. Tables and FORTRAN
	  and TMS32010 programs for these short-length transforms can
	  be found in <cite xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" src="#BurrusandParks">C.S. Burrus and
	  T.W. Parks (1985)</cite>. The theory and derivation of these
	  algorithms is quite elegant but requires substantial
	  background in number theory and abstract algebra.
	  Fortunately for the practitioner, all of the short
	  algorithms one is likely to need have already been derived
	  and can simply be looked up without mastering the
	  details of their derivation.
      </para>
    </section>
    <section xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="WFTA">
      <name xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Winograd Fourier Transform Algorithm (WFTA)</name>
      <para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para80">
        The Winograd Fourier Transform Algorithm (WFTA) is
	a technique that recombines the short Winograd modules in a
	<cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" document="m12033">prime-factor FFT</cnxn> into a composite-<m:math><m:ci>N</m:ci></m:math> structure with
	fewer multiplies but more adds. While theoretically interesting,
        WFTAs are complicated and different for every length, and on modern
        processors with hardware multipliers the trade of multiplies for many
        more adds is very rarely useful in practice today.
      </para>
    </section>
  </content>
  <bib:file>
    <bib:entry id="Agarwal">
      <bib:article>
	<bib:author>R.C. Agarwal and J.W. Cooley</bib:author>
	<bib:title>New Algorithms for Digital Convolution</bib:title>
	<bib:journal>IEEE Trans. on Acoustics, Speech, and Signal Processing</bib:journal>
	<bib:year>1977</bib:year>
	<bib:volume>25</bib:volume>
	<bib:pages>392-410</bib:pages>
	<bib:month>Oct</bib:month>
      </bib:article>
    </bib:entry>
    <bib:entry id="Burrus">
      <bib:incollection>
	<bib:author>C.S. Burrus</bib:author>
	<bib:title>Efficient Fourier Transform and Convolution
	Algorithms</bib:title>
	<bib:booktitle>Advanced Topics in Signal Processing</bib:booktitle>
	<bib:publisher>Prentice-Hall</bib:publisher>
	<bib:year>1988</bib:year>
	<bib:editor>J.S. Lin and A.V. Oppenheim</bib:editor>
	<bib:chapter>Chapter 4</bib:chapter>
      </bib:incollection>
    </bib:entry>
    <bib:entry id="BurrusandParks">
      <bib:book>
	<bib:author>C.S. Burrus and T.W. Parks</bib:author>
	<bib:title>DFT/FFT and Convolution Algorithms</bib:title>
	<bib:publisher>Wiley-Interscience</bib:publisher>
	<bib:year>1985</bib:year>
      </bib:book>
    </bib:entry>
	
	  
  </bib:file>
</document>
