<?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-17.5957">
  <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/">Decimation-in-Frequency (DIF) Radix-2 FFT</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.6</md:version>
  <md:created xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">2004/05/17 15:59:57 GMT-5</md:created>
  <md:revised xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">2006/09/17 08:47:05.577 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="harika">
      <md:firstname xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Harika</md:firstname>
      
      <md:surname xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Basana</md:surname>
      <md:email xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">ilsai@rice.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/">Cooley-Tukey</md:keyword>
    <md:keyword xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">decimation in frequency</md:keyword>
    <md:keyword xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">fast Fourier transform</md:keyword>
    <md:keyword xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">FFT</md:keyword>
    <md:keyword xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">radix-2</md:keyword>
    <md:keyword xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">twiddle factor</md:keyword>
  </md:keywordlist>

  <md:abstract xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">The radix-2 algorithms are the simplest FFT algorithms.
The decimation-in-frequency (DIF) radix-2 FFT partitions
the DFT computation into even-indexed and odd-indexed outputs, which can each be computed
by shorter-length DFTs of different combinations of input samples.
Recursive application of this decomposition to the shorter-length DFTs results in the full radix-2 decimation-in-frequency FFT.</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-888">The radix-2 decimation-in-frequency 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="m12016">decimation-in-time</cnxn> fast Fourier transforms
(FFTs) are the simplest <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="m12026">FFT algorithms</cnxn>.
Like all FFTs, they compute 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">discrete Fourier transform (DFT)</cnxn>
     <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="eq:dft">
      <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:ci>n</m:ci>
	      </m:apply>
	      <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: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: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:math>
     </equation>
where for notational convenience
<m:math>
  <m:apply>
    <m:eq/>
      <m:ci>
	<m:msubsup>
	  <m:mi>W</m:mi>
	  <m:mi>N</m:mi>
	  <m:mi>k</m:mi>
	</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>k</m:ci>
		       </m:apply>
		     <m:ci>N</m:ci>
		    </m:apply>
		  </m:apply>
		</m:apply>
	      </m:apply>
        </m:apply>
	</m:math>.
FFT algorithms gain their speed by reusing the results of smaller,
intermediate computations to compute multiple DFT frequency outputs.
</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/">Decimation in frequency</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="para1">The radix-2 decimation-in-frequency algorithm rearranges 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/" target="eq:dft">discrete Fourier transform (DFT) equation</cnxn>
into two parts: computation of the even-numbered discrete-frequency indices
<m:math>
  <m:apply>
    <m:ci type="fn">X</m:ci>
    <m:ci>k</m:ci>
  </m:apply>
</m:math>
for
<m:math>
  <m:apply>
    <m:eq/>
      <m:ci>k</m:ci>
      <m:list>
        <m:cn>0</m:cn>
        <m:cn>2</m:cn>
        <m:cn>4</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>
(or
<m:math>
            <m:apply>
              <m:ci type="fn">X</m:ci>
	      <m:apply>
		<m:times/>
		<m:cn>2</m:cn>
		<m:ci>r</m:ci>
	      </m:apply>
            </m:apply>
</m:math>
as in <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/" target="eq:evens"/>)
and computation of the odd-numbered indices
<m:math>
  <m:apply>
    <m:eq/>
      <m:ci>k</m:ci>
      <m:list>
        <m:cn>1</m:cn>
        <m:cn>3</m:cn>
        <m:cn>5</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>
(or
<m:math>
  <m:apply>
    <m:ci type="fn">X</m:ci>
    <m:apply>
      <m:plus/>
	 <m:apply>
	   <m:times/>
	     <m:cn>2</m:cn>
	     <m:ci>r</m:ci>
	 </m:apply>
         <m:cn>1</m:cn>
    </m:apply>
  </m:apply>
</m:math>
as in <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/" target="eq:odds"/>)

      <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="eq:evens"><m:math>
	  <m:apply>
	    <m:eq/>
	    <m:apply>
	      <m:ci type="fn">X</m:ci>
	      <m:apply>
		<m:times/>
		<m:cn>2</m:cn>
		<m:ci>r</m:ci>
	      </m:apply>
	    </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:ci>n</m:ci>
		</m:apply>
		<m:ci>
		  <m:msubsup>
		    <m:mi>W</m:mi>
		    <m:mi>N</m:mi>
		    <m:mrow>
		      <m:mn>2</m:mn>
		      <m:mi>r</m:mi>
		      <m:mi>n</m:mi>
		    </m:mrow>
		  </m:msubsup>
		</m:ci>
	      </m:apply>
	    </m:apply>
	    <m:apply>
	      <m:plus/>
	      <m:apply>
		<m:sum/>
		<m:bvar>
		  <m:ci>n</m:ci>
		</m:bvar>
		<m:uplimit>
		  <m:apply>
		    <m:minus/>
		    <m:apply>
		      <m:divide/>
		      <m:ci>N</m:ci>
		      <m:cn>2</m:cn>
		    </m:apply>
		    <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:ci>n</m:ci>
		  </m:apply>
		  <m:ci>
		    <m:msubsup>
		      <m:mi>W</m:mi>
		      <m:mi>N</m:mi>
		      <m:mrow>
			<m:mn>2</m:mn>
			<m:mi>r</m:mi>
			<m:mi>n</m:mi>
		      </m:mrow>
		    </m:msubsup>
		  </m:ci>
		</m:apply>
	      </m:apply>
	      <m:apply>
		<m:sum/>
		<m:bvar>
		  <m:ci>n</m:ci>
		</m:bvar>
		<m:uplimit>
		  <m:apply>
		    <m:minus/>
		    <m:apply>
		      <m:divide/>
		      <m:ci>N</m:ci>
		      <m:cn>2</m:cn>
		    </m:apply>
		    <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:apply>
		      <m:plus/>
		      <m:ci>n</m:ci>
		      <m:apply>
			<m:divide/>
			<m:ci>N</m:ci>
			<m:cn>2</m:cn>
		      </m:apply>
		    </m:apply>
		  </m:apply>
		  <m:ci>
		    <m:msubsup>
		      <m:mi>W</m:mi>
		      <m:mi>N</m:mi>
		      <m:mrow>
			<m:mn>2</m:mn>
			<m:mi>r</m:mi>
			<m:mo>(</m:mo>
			<m:mi>n</m:mi>
			<m:mo>+</m:mo>
			<m:mfrac>
			  <m:mi>N</m:mi>
			  <m:mn>2</m:mn>
			</m:mfrac>
			<m:mo>)</m:mo>
		      </m:mrow>
		    </m:msubsup>
		  </m:ci>
		</m:apply>
	      </m:apply>
	    </m:apply>
	    <m:apply>
	      <m:plus/>
	      <m:apply>
		<m:sum/>
		<m:bvar>
		  <m:ci>n</m:ci>
		</m:bvar>
		<m:uplimit>
		  <m:apply>
		    <m:minus/>
		    <m:apply>
		      <m:divide/>
		      <m:ci>N</m:ci>
		      <m:cn>2</m:cn>
		    </m:apply>
		    <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:ci>n</m:ci>
		  </m:apply>
		  <m:ci>
		    <m:msubsup>
		      <m:mi>W</m:mi>
		      <m:mi>N</m:mi>
		      <m:mrow>
			<m:mn>2</m:mn>
			<m:mi>r</m:mi>
			<m:mi>n</m:mi>
		      </m:mrow>
		    </m:msubsup>
		  </m:ci>
		</m:apply>
	      </m:apply>
	      <m:apply>
		<m:sum/>
		<m:bvar>
		  <m:ci>n</m:ci>
		</m:bvar>
		<m:uplimit>
		  <m:apply>
		    <m:minus/>
		    <m:apply>
		      <m:divide/>
		      <m:ci>N</m:ci>
		      <m:cn>2</m:cn>
		    </m:apply>
		    <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:apply>
		      <m:plus/>
		      <m:ci>n</m:ci>
		      <m:apply>
			<m:divide/>
			<m:ci>N</m:ci>
			<m:cn>2</m:cn>
		      </m:apply>
		    </m:apply>
		  </m:apply>
		  <m:ci>
		    <m:msubsup>
		      <m:mi>W</m:mi>
		      <m:mi>N</m:mi>
		      <m:mrow>
			<m:mn>2</m:mn>
			<m:mi>r</m:mi>
			<m:mi>n</m:mi>
		      </m:mrow>
		    </m:msubsup>
		  </m:ci>
		  <m:cn>1</m:cn>
		</m:apply>
	      </m:apply>
	    </m:apply>  
	    <m:apply>
	      <m:sum/>
	      <m:bvar>
		<m:ci>n</m:ci>
	      </m:bvar>
	      <m:uplimit>
		<m:apply>
		  <m:minus/>
		  <m:apply>
		    <m:divide/>
		    <m:ci>N</m:ci>
		    <m:cn>2</m:cn>
		  </m:apply>
		  <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:plus/>
		  <m:apply>
		    <m:ci type="fn">x</m:ci>
		    <m:ci>n</m:ci>
		  </m:apply>
		  <m:apply>
		    <m:ci type="fn">x</m:ci>
		    <m:apply>
		      <m:plus/>
		      <m:ci>n</m:ci>
		      <m:apply>
			<m:divide/>
			<m:ci>N</m:ci>
			<m:cn>2</m:cn>
		      </m:apply>
		    </m:apply>
		  </m:apply>
		</m:apply>
		<m:ci>
		  <m:msubsup>
		    <m:mi>W</m:mi>
		    <m:mfrac>
		      <m:mi>N</m:mi>
		      <m:mn>2</m:mn>
		    </m:mfrac>
		    <m:mrow>
		      <m:mi>r</m:mi>
		      <m:mi>n</m:mi>
		    </m:mrow>
		  </m:msubsup>
		</m:ci>
	      </m:apply>
	    </m:apply>
	    <m:apply>
	      <m:ci type="fn" class="discrete">
		<m:msub>
		  <m:mi>DFT</m:mi>
		  <m:mfrac>
		    <m:mi>N</m:mi>
		    <m:mn>2</m:mn>
		  </m:mfrac>
		</m:msub>
	      </m:ci>
	      <m:apply>
		<m:plus/>
		<m:apply>
		  <m:ci type="fn">x</m:ci>
		  <m:ci>n</m:ci>
		</m:apply>
		<m:apply>
		  <m:ci type="fn">x</m:ci>
		  <m:apply>
		    <m:plus/>
		    <m:ci>n</m:ci>
		    <m:apply>
		      <m:divide/>
		      <m:ci>N</m:ci>
		      <m:cn>2</m:cn>
		    </m:apply>
		  </m:apply>
		</m:apply>
	      </m:apply>
	    </m:apply>
	  </m:apply>
	</m:math>
      </equation>
      <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="eq:odds"><m:math>
	  <m:apply>
	    <m:eq/>
	    <m:apply>
	      <m:ci type="fn">X</m:ci>
	      <m:apply>
		<m:plus/>
		<m:apply>
		  <m:times/>
		  <m:cn>2</m:cn>
		  <m:ci>r</m:ci>
		</m:apply>
		<m:cn>1</m:cn>
	      </m:apply>
	    </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:ci>n</m:ci>
		</m:apply>
		<m:ci>
		  <m:msubsup>
		    <m:mi>W</m:mi>
		    <m:mi>N</m:mi>
		    <m:mrow>
		      <m:mo>(</m:mo>
		      <m:mn>2</m:mn>
		      <m:mi>r</m:mi>
		      <m:mo>+</m:mo>
		      <m:mn>1</m:mn>
		      <m:mo>)</m:mo>
		      <m:mi>n</m:mi>
		    </m:mrow>
		  </m:msubsup>
		</m:ci>
	      </m:apply>
	    </m:apply>
	    <m:apply>
	      <m:sum/>
	      <m:bvar>
		<m:ci>n</m:ci>
	      </m:bvar>
	      <m:uplimit>
		<m:apply>
		  <m:minus/>
		  <m:apply>
		    <m:divide/>
		    <m:ci>N</m:ci>
		    <m:cn>2</m:cn>
		  </m:apply>
		  <m:ci>1</m:ci>
		</m:apply>
	      </m:uplimit>
	      <m:lowlimit>
		<m:cn>0</m:cn>
	      </m:lowlimit>
	      <m:apply>
		<m:times/>
		<m:apply>
		  <m:plus/>
		  <m:apply>
		    <m:ci type="fn">x</m:ci>
		    <m:ci>n</m:ci>
		  </m:apply>
		  <m:apply>
		    <m:times/>
		    <m:ci>
		      <m:msubsup>
			<m:mi>W</m:mi>
			<m:mi>N</m:mi>
			<m:mfrac>
			  <m:mi>N</m:mi>
			  <m:mn>2</m:mn>
			</m:mfrac>
		      </m:msubsup>
		    </m:ci>
		    <m:apply>
		      <m:ci type="fn">x</m:ci>
		      <m:apply>
			<m:plus/>
			<m:ci>n</m:ci>
			<m:apply>
			  <m:divide/>
			  <m:ci>N</m:ci>
			  <m:cn>2</m:cn>
			</m:apply>
		      </m:apply>
		    </m:apply>
		  </m:apply>
		</m:apply>
		<m:ci>
		  <m:msubsup>
		    <m:mi>W</m:mi>
		    <m:mi>N</m:mi>
		    <m:mrow>
		      <m:mo>(</m:mo>
                      <m:mn>2</m:mn>
		      <m:mi>r</m:mi>
		      <m:mo>+</m:mo>
		      <m:mn>1</m:mn>
		      <m:mo>)</m:mo>
		      <m:mi>n</m:mi>
		    </m:mrow>
		  </m:msubsup>
		</m:ci>
	      </m:apply>
	    </m:apply>
	    <m:apply>
	      <m:sum/>
	      <m:bvar>
		<m:ci>n</m:ci>
	      </m:bvar>
	      <m:uplimit>
		<m:apply>
		  <m:minus/>
		  <m:apply>
		    <m:divide/>
		    <m:ci>N</m:ci>
		    <m:cn>2</m:cn>
		  </m:apply>
		  <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:times/>
		  <m:apply>
		    <m:minus/>
		    <m:apply>
		      <m:ci type="fn">x</m:ci>
		      <m:ci>n</m:ci>
		    </m:apply>
		    <m:apply>
		      <m:ci type="fn">x</m:ci>
		      <m:apply>
			<m:plus/>
			<m:ci>n</m:ci>
			<m:apply>
			  <m:divide/>
			  <m:ci>N</m:ci>
			  <m:cn>2</m:cn>
			</m:apply>
		      </m:apply>
		    </m:apply>
		  </m:apply>
		  <m:ci>
		    <m:msubsup>
		      <m:mi>W</m:mi>
		      <m:mi>N</m:mi>
		      <m:mi>n</m:mi>
		    </m:msubsup>
		  </m:ci>
		</m:apply>
		<m:ci>
		  <m:msubsup>
		    <m:mi>W</m:mi>
		    <m:mfrac>
		      <m:mi>N</m:mi>
		      <m:mn>2</m:mn>
		    </m:mfrac>
		    <m:mrow>
		      <m:mi>r</m:mi>
		      <m:mi>n</m:mi>
		    </m:mrow>
		  </m:msubsup>
		</m:ci>
	      </m:apply>
	    </m:apply>
	    <m:apply>
	      <m:ci type="fn" class="discrete">
		<m:msub>
		  <m:mi>DFT</m:mi>
		  <m:mfrac>
		    <m:mi>N</m:mi>
		    <m:mn>2</m:mn>
		  </m:mfrac>
		</m:msub>
	      </m:ci>
	      <m:apply>
		<m:times/>
		<m:apply>
		  <m:minus/>
		  <m:apply>
		    <m:ci type="fn">x</m:ci>
		    <m:ci>n</m:ci>
		  </m:apply>
		  <m:apply>
		    <m:ci type="fn">x</m:ci>
		    <m:apply>
		      <m:plus/>
		      <m:ci>n</m:ci>
		      <m:apply>
			<m:divide/>
			<m:ci>N</m:ci>
			<m:cn>2</m:cn>
		      </m:apply>
		    </m:apply>
		  </m:apply>
		</m:apply>
		<m:ci>
		  <m:msubsup>
		    <m:mi>W</m:mi>
		    <m:mi>N</m:mi>
		    <m:mi>n</m:mi>
		  </m:msubsup>
		</m:ci>
	      </m:apply>
	    </m:apply>
	  </m:apply>
	</m:math>
      </equation>
</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-799">The mathematical simplifications in
<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/" target="eq:evens"/> 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/" target="eq:odds"/>
reveal that both the even-indexed and odd-indexed frequency outputs
<m:math>
  <m:apply>
    <m:ci type="fn">X</m:ci>
    <m:ci>k</m:ci>
  </m:apply>
</m:math>
can each be computed by a
length-<m:math>
         <m:apply>
           <m:divide/>
             <m:ci>N</m:ci>
             <m:cn>2</m:cn>
         </m:apply>
       </m:math>
DFT.
The inputs to these DFTs are sums or differences of the first and second halves of the input signal,
respectively,
where the input to the short DFT producing the odd-indexed frequencies is multiplied by a so-called <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/">twiddle factor</term>
term
<m:math>
  <m:apply>
    <m:eq/>
      <m:ci>
	<m:msubsup>
	  <m:mi>W</m:mi>
	  <m:mi>N</m:mi>
	  <m:mi>k</m:mi>
	</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>k</m:ci>
		       </m:apply>
		     <m:ci>N</m:ci>
		    </m:apply>
		  </m:apply>
		</m:apply>
	      </m:apply>
        </m:apply>
	</m:math>.
This is 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/">decimation in frequency</term> because the
frequency samples are computed separately in alternating groups,
and 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/">radix-2</term> algorithm because there
are two groups.
<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/" target="fig1"/> graphically illustrates this form of the DFT computation.
This conversion of the full DFT into a series of shorter DFTs with a simple
preprocessing step
gives the decimation-in-frequency FFT its computational savings.
      <figure 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="fig1" orient="vertical"><media xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" type="application/postscript" src="DIFfig1.eps">
	    <media xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" type="image/png" src="image1.png"/>
          </media>
       <caption xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Decimation in frequency of a length-<m:math><m:ci>N</m:ci></m:math> DFT
          into two length-<m:math><m:apply><m:divide/><m:ci>N</m:ci><m:cn>2</m:cn></m:apply></m:math>
          DFTs preceded by a preprocessing stage.
        </caption></figure>
    </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-823">Whereas direct computation of all <m:math><m:ci>N</m:ci></m:math> DFT frequencies
according to 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 equation</cnxn> would require
<m:math>
  <m:apply>
    <m:power/>
      <m:ci>N</m:ci>
      <m:cn>2</m:cn>
  </m:apply>
</m:math>
complex multiplies and
<m:math>
  <m:apply>
    <m:minus/>
      <m:apply>
        <m:power/>
          <m:ci>N</m:ci>
          <m:cn>2</m:cn>
      </m:apply>
      <m:ci>N</m:ci>
  </m:apply>
</m:math>
complex additions (for complex-valued data),
by breaking the computation into two short-length DFTs
with some preliminary combining of the data,
as illustrated in <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/" target="fig1"/>,
the computational cost is now
<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="stage1costs"><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/">New Operation Counts</name>
      <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/">
	<m:math>
	  <m:apply>
	    <m:eq/>
	    <m:apply>
	      <m:plus/>
	      <m:apply>
		<m:times/>
		<m:cn>2</m:cn>
		<m:apply>
		  <m:power/>
		  <m:apply>
		    <m:divide/>
		    <m:ci>N</m:ci>
		    <m:cn>2</m:cn>
		  </m:apply>
		  <m:cn>2</m:cn>
		</m:apply>
	      </m:apply>
	      <m:ci>N</m:ci>
	    </m:apply>
	    <m:apply>
	      <m:plus/>
	      <m:apply>
		<m:divide/>
		<m:apply>
		  <m:power/>
		  <m:ci>N</m:ci>
		  <m:cn>2</m:cn>
		</m:apply>
		<m:cn>2</m:cn>
	      </m:apply>
              <m:apply>
                <m:divide/>
	          <m:ci>N</m:ci>
                  <m:cn>2</m:cn>
              </m:apply>
	    </m:apply>
	  </m:apply>
	</m:math>
	complex multiplies
      </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/">
	<m:math>
	  <m:apply>
	    <m:eq/>
	    <m:apply>
	      <m:plus/>
	      <m:apply>
		<m:times/>
		<m:cn>2</m:cn>
		<m:apply>
		  <m:divide/>
		  <m:ci>N</m:ci>
		  <m:cn>2</m:cn>
		</m:apply>
		<m:apply>
		  <m:minus/>
		  <m:apply>
		    <m:divide/>
		    <m:ci>N</m:ci>
		    <m:cn>2</m:cn>
		  </m:apply>
		  <m:cn>1</m:cn>
		</m:apply>
	      </m:apply>
	      <m:ci>N</m:ci>
	    </m:apply>
	    <m:apply>
	      <m:divide/>
	      <m:apply>
		<m:power/>
		<m:ci>N</m:ci>
		<m:cn>2</m:cn>
	      </m:apply>
	      <m:cn>2</m:cn>
	    </m:apply>
	  </m:apply>
	</m:math>
        complex additions
      </item>
</list>
This simple manipulation has reduced the total computational cost of the DFT by almost a factor of two!</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="p:DIFbutterfly">The initial combining operations for both short-length DFTs involve parallel groups of two time samples,
<m:math>
  <m:apply>
    <m:ci type="fn">x</m:ci>
    <m:ci>n</m:ci>
  </m:apply>
</m:math>
and
<m:math>
  <m:apply>
    <m:ci type="fn">x</m:ci>
    <m:apply>
      <m:plus/>
        <m:ci>n</m:ci>
        <m:apply>
          <m:divide/>
            <m:ci>N</m:ci>
            <m:cn>2</m:cn>
        </m:apply>
    </m:apply>
  </m:apply>
</m:math>.
One of these so-called
 <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/">butterfly</term> operations is illustrated in <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/" target="DIFbutterfly"/>.
There are
	<m:math>
	  <m:apply>
	    <m:divide/>
	    <m:ci>N</m:ci>
	    <m:cn>2</m:cn>
	  </m:apply>
	</m:math>
butterflies per <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/">stage</term>, each requiring a complex addition and subtraction followed
by one <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/">twiddle-factor</term> multiplication by
<m:math>
  <m:apply>
    <m:eq/>
      <m:ci>
	<m:msubsup>
	  <m:mi>W</m:mi>
	  <m:mi>N</m:mi>
	  <m:mi>n</m:mi>
	</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:apply>
		     <m:ci>N</m:ci>
		    </m:apply>
		  </m:apply>
		</m:apply>
	      </m:apply>
        </m:apply>
	</m:math>
 on the lower output branch.

	<figure 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="DIFbutterfly">
          <media xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" type="application/postscript" src="DIFfig2.eps">
	    <media xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" type="image/png" src="image2.png"/>
          </media>
	  <caption xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">DIF butterfly: twiddle factor after length-2 DFT</caption>
	</figure>
          It is worthwhile to note that the initial add/subtract part of the
      DIF butterfly is actually a length-2 DFT!
      The theory of <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>
      shows that this must be the case, and that FFTs of any factorable
      length may consist of successive stages of shorter-length FFTs
      with twiddle-factor multiplications in between.
      It is also worth noting that this butterfly differs from 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" target="fig2">decimation-in-time radix-2 butterfly</cnxn>
      in that the twiddle factor multiplication occurs <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/">after</emphasis> the combining.</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/">Radix-2 decimation-in-frequency algorithm</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="element-978">The same radix-2 decimation in frequency can be applied recursively to the two
length-<m:math>
	  <m:apply>
	    <m:divide/>
	    <m:ci>N</m:ci>
	    <m:cn>2</m:cn>
	  </m:apply>
	</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="m12019">DFT</cnxn>s to save additional computation.
        When successively applied until
        the shorter and shorter DFTs reach length-2, the result is 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/" target="r2dif">radix-2 decimation-in-frequency FFT algorithm</cnxn>.</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="whatever">
        <figure 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="r2dif"><media xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" type="application/postscript" src="DIFfig3.eps">
	    <media xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" type="image/png" src="image3.png"/> 
          </media>
	  <caption xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Radix-2 decimation-in-frequency FFT for a length-8 signal</caption>
      </figure>
    </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="e833">The full radix-2 decimation-in-frequency decomposition illustrated in <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/" target="r2dif"/>
requires
	  <m:math>
	    <m:apply>
	      <m:eq/>
	      <m:ci>M</m:ci>
	      <m:apply>
		<m:log/>
		<m:logbase>
		  <m:cn>2</m:cn>
		</m:logbase>
		<m:ci>N</m:ci>
	      </m:apply>
	    </m:apply>
	  </m:math>
          stages, each with
	  <m:math>
	    <m:apply>
	      <m:divide/>
	      <m:ci>N</m:ci>
	      <m:cn>2</m:cn>
	    </m:apply>
	  </m:math>
          butterflies per stage.
          Each butterfly requires
          <m:math><m:cn>1</m:cn></m:math>
	  complex multiply and
          <m:math><m:cn>2</m:cn></m:math>
	  adds per butterfly.
The total cost of the algorithm is thus
<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="list2" type="bulleted"><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/">Computational cost of radix-2 DIF FFT</name>

	<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/">
	  <m:math>
	    <m:apply>
	      <m:times/>
	      <m:apply>
		<m:divide/>
		<m:ci>N</m:ci>
		<m:cn>2</m:cn>
	      </m:apply>
	      <m:apply>
		<m:log/>
		<m:logbase>
		  <m:cn>2</m:cn>
		</m:logbase>
		<m:ci>N</m:ci>
	      </m:apply>
	    </m:apply>
	  </m:math> complex multiplies
	</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/">
	  <m:math>
	    <m:apply>
	      <m:times/>
	      <m:ci>N</m:ci>
	      <m:apply>
		<m:log/>
		<m:logbase>
		  <m:cn>2</m:cn>
		</m:logbase>
		<m:cn>N</m:cn>
	      </m:apply>
	    </m:apply>
	  </m:math> complex adds
	</item>

</list>
</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-477">This is a remarkable savings over direct computation of the DFT.
For example, a length-1024 DFT would require <m:math><m:cn>1048576</m:cn></m:math>
complex multiplications and <m:math><m:cn>1047552</m:cn></m:math> complex additions
with direct computation, but only <m:math><m:cn>5120</m:cn></m:math> complex multiplications and <m:math><m:cn>10240</m:cn></m:math> complex
additions using the radix-2 FFT, a savings by a factor of 100 or more.
The relative savings increase with longer FFT lengths, and are less for shorter lengths.
Modest additional reductions in computation can be achieved by noting that certain twiddle factors,
namely
	<m:math>
	  <m:ci>
	    <m:msubsup>
	      <m:mi>W</m:mi>
	      <m:mi>N</m:mi>
	      <m:mn>0</m:mn>
	    </m:msubsup>
	  </m:ci>
	</m:math>,
	<m:math>
	  <m:ci>
	    <m:msubsup>
	      <m:mi>W</m:mi>
	      <m:mi>N</m:mi>
	      <m:mfrac>
		<m:mi>N</m:mi>
		<m:mn>2</m:mn>
	      </m:mfrac>
	    </m:msubsup>
	  </m:ci>
	</m:math>,
	<m:math>
	  <m:ci>
	    <m:msubsup>
	      <m:mi>W</m:mi>
	      <m:mi>N</m:mi>
	      <m:mfrac>
		<m:mi>N</m:mi>
		<m:mn>4</m:mn>
	      </m:mfrac>
	    </m:msubsup>
	  </m:ci>
	</m:math>,
	<m:math>
	  <m:ci>
	    <m:msubsup>
	      <m:mi>W</m:mi>
	      <m:mi>N</m:mi>
	      <m:mfrac>
		<m:mi>N</m:mi>
		<m:mn>8</m:mn>
	      </m:mfrac>
	    </m:msubsup>
	  </m:ci>
	</m:math>,
	<m:math>
	  <m:ci>
	    <m:msubsup>
	      <m:mi>W</m:mi>
	      <m:mi>N</m:mi>
	      <m:mfrac>
		<m:mrow>
		  <m:mn>3</m:mn>
		  <m:mi>N</m:mi>
		</m:mrow>
		<m:mn>8</m:mn>
	      </m:mfrac>
	    </m:msubsup>
	  </m:ci>
	</m:math>,
        require no multiplications, or fewer real multiplies than other ones.
        By implementing special butterflies for these twiddle factors
        as discussed in <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="m12021">FFT algorithm and programming tricks</cnxn>,
        the computational cost of the radix-2 decimation-in-frequency FFT can be reduced to
	<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="list3" type="bulleted">
	  <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/">
	    <m:math>
	      <m:apply>
		<m:plus/>
		<m:apply>
		  <m:minus/>
		  <m:apply>
		    <m:times/>
		    <m:cn>2</m:cn>
		    <m:ci>N</m:ci>
		    <m:apply>
		      <m:log/>
		      <m:logbase>
			<m:cn>2</m:cn>
		      </m:logbase>
		      <m:ci>N</m:ci>
		    </m:apply>
		  </m:apply>
		  <m:apply>
		    <m:times/>
		    <m:cn>7</m:cn>
		    <m:ci>N</m:ci>
		  </m:apply>
		</m:apply>
		<m:cn>12</m:cn>
	      </m:apply>
	    </m:math> real multiplies
	  </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/">
	    <m:math>
	      <m:apply>
		<m:plus/>
		<m:apply>
		  <m:minus/>
		  <m:apply>
		    <m:times/>
		    <m:cn>3</m:cn>
		    <m:ci>N</m:ci>
		    <m:apply>
		      <m:log/>
		      <m:logbase>
			<m:cn>2</m:cn>
		      </m:logbase>
		      <m:ci>N</m:ci>
		    </m:apply>
		  </m:apply>
		  <m:apply>
		    <m:times/>
		    <m:cn>3</m:cn>
		    <m:ci>N</m:ci>
		  </m:apply>
		</m:apply>
		<m:cn>4</m:cn>
	      </m:apply>
	    </m:math> real additions
	  </item>
	</list>

The decimation-in-frequency FFT is a flow-graph
reversal 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="m12016">decimation-in-time</cnxn> FFT:
it has the same twiddle factors (in reverse pattern) and the same operation counts.</para><note xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">In a decimation-in-frequency radix-2 FFT as illustrated in <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/" target="r2dif"/>,
the output is in <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/">bit-reversed</term> order (hence
      "decimation-in-frequency").
That is, if the frequency-sample index <m:math><m:ci>n</m:ci>
      </m:math> is written as a binary number, the order is that
      binary number reversed.
The bit-reversal process is illustrated <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" target="ex1">here</cnxn>.</note><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-319">It is important to note that, if the input data are in order
before beginning the FFT computations, the outputs of each butterfly throughout the
computation can be placed in the same memory locations from which the inputs were fetched,
resulting in 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/">in-place algorithm</term> that requires no extra memory to perform
the FFT.
Most FFT implementations are in-place, and overwrite the input data with the intermediate
values and finally the output.</para>
   </section>
  </content>
  
</document>
