<?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="m10783">
  
  <name>La Transformada Rápida de Fourier  (FFT)</name>
  
  <metadata>
  <md:version>2.5</md:version>
  <md:created>2005/07/25 22:35:20.398 GMT-5</md:created>
  <md:revised>2005/07/25 22:39:23.753 GMT-5</md:revised>
  <md:authorlist>
      <md:author id="jrom">
      <md:firstname>Justin</md:firstname>
      
      <md:surname>Romberg</md:surname>
      <md:email>jrom@rice.edu</md:email>
    </md:author>
      <md:author id="fpmeza">
      <md:firstname>Fara</md:firstname>
      <md:othername>P.</md:othername>
      <md:surname>Meza</md:surname>
      <md:email>fpmeza@utep.edu</md:email>
    </md:author>
      <md:author id="erikaj">
      <md:firstname>Erika</md:firstname>
      <md:othername>Sarait</md:othername>
      <md:surname>Jackson</md:surname>
      <md:email>erikaj@utep.edu</md:email>
    </md:author>
  </md:authorlist>

  <md:maintainerlist>
    <md:maintainer id="fpmeza">
      <md:firstname>Fara</md:firstname>
      <md:othername>P.</md:othername>
      <md:surname>Meza</md:surname>
      <md:email>fpmeza@utep.edu</md:email>
    </md:maintainer>
    <md:maintainer id="erikaj">
      <md:firstname>Erika</md:firstname>
      <md:othername>Sarait</md:othername>
      <md:surname>Jackson</md:surname>
      <md:email>erikaj@utep.edu</md:email>
    </md:maintainer>
  </md:maintainerlist>
  
  <md:keywordlist>
    <md:keyword>dft</md:keyword>
    <md:keyword>fft</md:keyword>
    <md:keyword>fourier</md:keyword>
    <md:keyword>Transformada de Fourier</md:keyword>
    <md:keyword>Transformada Rápida de Fourier</md:keyword>
  </md:keywordlist>

  <md:abstract>Este modulo describe la Transformada rápida de Fourier (FFT).</md:abstract>
</metadata>

  <content>
    <section id="int">
      <name>Introducción</name>
      <para id="para1">
	La Transformada Rápida de Fourier (Fast Fourier Transform) (FFT) es un algoritmo eficiente O(NlogN)
	para calcular la DFT 

	<list id="list1">
	  <item>
	    orignalmente descubierta por Gauss a primcipios de 1800
	  </item>
	  <item>
	    redescubierta por Cooley y Tukey en IBM durante 1960
	  </item>
	  <item>
	    C.S. Burrus, de la Universidad de Rice University siendo jefe del departamento de Ingenieria, literalmente "escribio el libro" de los algoritmos de la rápida Transformada Discreta de Fourier DFT.
	  </item>
	</list>

	La <cnxn strength="8" document="m10250">FFT </cnxn> explota las simetrias en la matriz <m:math><m:ci>W</m:ci></m:math> para aproximarse "divide y conquistaras".  No hablaremos del actual algoritmo de la  FFT aqui, veamos  <cnxn document="m10250" strength="8"> estas notas
	</cnxn> si usted esta interesado en leer mas a cerca de la idea detras de la FFT.
      </para>
    </section>

    <section id="sec2">
      <name>Comparación De la Velocidad</name>      
      <para id="para3">
	¿En cuánto es mejor O(NlogN) que O(
	<m:math>
	  <m:apply>
	    <m:power/>
	    <m:ci>N</m:ci>
	    <m:cn>2</m:cn>
	  </m:apply>
	</m:math>)? 
      </para>
      
      <figure id="fig1">
	<media type="image/png" src="fft_f1s.png"/>
	<caption>
	  Esta figura muestra que tan lento crece  el tiempo de solución de un proceso de 
	   O(NlogN).
	</caption>
</figure> 
      
      <!-- This CALS table template is generated by `table.el' version 1.5.32 -->
      <table frame="all" id="table1">
	<tgroup cols="6" align="left">
	  <thead valign="top">
	    <row>
	      <entry align="center">
		<m:math><m:ci>N</m:ci></m:math>
	      </entry>
	      <entry align="center">
		<m:math><m:cn>10</m:cn></m:math>
	      </entry>
	      <entry align="center">
		<m:math><m:cn>100</m:cn></m:math>
	      </entry>
	      <entry align="center">
		<m:math><m:cn>1000</m:cn></m:math>
	      </entry>
	      <entry align="center">
		<m:math><m:apply><m:power/><m:cn>10</m:cn><m:cn>6</m:cn></m:apply></m:math>
	      </entry>
	      <entry align="center">
		<m:math><m:apply><m:power/><m:cn>10</m:cn><m:cn>9</m:cn></m:apply></m:math>
	      </entry>
	    </row>
	  </thead>
	  <tbody valign="top">
	    <row>
	      <entry align="center">
		<m:math><m:apply><m:power/><m:ci>N</m:ci><m:cn>2</m:cn></m:apply></m:math>
	      </entry>
	      <entry align="center">
		100
	      </entry>
	      <entry align="center">
		<m:math><m:apply><m:power/><m:cn>10</m:cn><m:cn>4</m:cn></m:apply></m:math>
	      </entry>
	      <entry align="center">
		<m:math><m:apply><m:power/><m:cn>10</m:cn><m:cn>6</m:cn></m:apply></m:math>
	      </entry>
	      <entry align="center">
		<m:math><m:apply><m:power/><m:cn>10</m:cn><m:cn>12</m:cn></m:apply></m:math>
	      </entry>
	      <entry align="center">
		<m:math><m:apply><m:power/><m:cn>10</m:cn><m:cn>18</m:cn></m:apply></m:math>
	      </entry>
	    </row>
	    
	    <row>
	      <entry align="center">
		<m:math><m:apply><m:times/><m:ci>N</m:ci><m:apply><m:log/><m:ci>N</m:ci></m:apply></m:apply></m:math>
	      </entry>
	      <entry align="center">
		<m:math><m:cn>1</m:cn></m:math>
	      </entry>
	      <entry align="center">
		<m:math><m:cn>200</m:cn></m:math>
	      </entry>
	      <entry align="center">
		<m:math><m:cn>3000</m:cn></m:math>
	      </entry>
	      <entry align="center">
		<m:math><m:apply><m:times/><m:cn>6</m:cn><m:apply><m:power/><m:cn>10</m:cn><m:cn>6</m:cn></m:apply></m:apply></m:math>
	      </entry>
	      <entry align="center">
		<m:math><m:apply><m:times/><m:cn>9</m:cn><m:apply><m:power/><m:cn>10</m:cn><m:cn>9</m:cn></m:apply></m:apply></m:math>
	      </entry>
	    </row>
	  </tbody>
	</tgroup>
      </table>
            
      <para id="para4">
	Digamos que tiene una maquina de 1 MFLOP  (un millión de "puntos flotantes" de operacione spor segundo). Sea 
	<m:math>
		<m:apply>
			<m:eq/>
			<m:ci>N</m:ci>
			<m:apply>
				<m:times/>
				<m:cn>1</m:cn>
				<m:ci>millión</m:ci>
			</m:apply>
			<m:apply>
				<m:power/>
				<m:cn>10</m:cn>
				<m:cn>6</m:cn>
			</m:apply>
		</m:apply>
	</m:math>. 
      </para>
      
      <para id="para5">
	Un algoritmo de  O(
	<m:math>
	  <m:apply>
	    <m:power/>
	    <m:ci>N</m:ci>
	    <m:cn>2</m:cn>
	  </m:apply>
	</m:math>) toma
	<m:math><m:apply><m:power/><m:cn>10</m:cn><m:cn>12</m:cn></m:apply></m:math>
	procesos → 
	<m:math>
	  <m:apply>
	    <m:power/>
	    <m:cn>10</m:cn>
	    <m:cn>6</m:cn>
	  </m:apply>
	</m:math> segundos ≃ 11.5 días. 
      </para>

      
      <para id="para6">
	Un algoritmo de O(
	<m:math>
		<m:apply>
			<m:times/>
			<m:ci>N</m:ci>
			<m:apply>
				<m:log/>
				<m:ci>N</m:ci>
			</m:apply>
		</m:apply>
	</m:math>) toma
	<m:math>
		<m:apply>
			<m:times/>
			<m:cn>6</m:cn>
			<m:apply>
				<m:power/>
				<m:cn>10</m:cn>
				<m:cn>6</m:cn>
			</m:apply>
		</m:apply>
	</m:math> procesos → 6 segundos. 
	
	<note type="nota">
		<m:math>
			<m:apply>
				<m:eq/>
				<m:ci>N</m:ci>
				<m:apply>
					<m:times/>
					<m:cn>1</m:cn>
					<m:ci>millión</m:ci>
				</m:apply>
			</m:apply>
		</m:math> es razonable.</note>
</para>

      
      <example id="example1">
	<para id="exam1para1">
	  Una camara digital de 3 megapixeles arroja  
	  <m:math>
	    <m:apply>
	      <m:times/>
	      <m:cn>3</m:cn>
	      <m:apply>
		<m:power/>
		<m:cn>10</m:cn>
		<m:cn>6</m:cn>
	      </m:apply>
	    </m:apply>
	  </m:math> 
	  
	  números por cada foto. Así que para dos 
	  <m:math><m:ci>N</m:ci></m:math> secuencias de punto
	  <m:math><m:apply><m:ci type="fn" class="discrete">f</m:ci><m:ci>n</m:ci></m:apply></m:math>
	  y <m:math><m:apply><m:ci type="fn" class="discrete">h</m:ci><m:ci>n</m:ci></m:apply></m:math>. Si resolvemos directamente 

	  <m:math>
	    <m:apply>
	      <m:ci><m:mo>⊛</m:mo></m:ci>
	      <m:apply>
		<m:ci type="fn" class="discrete">f</m:ci>
		<m:ci>n</m:ci>
	      </m:apply>
	      <m:apply>
		<m:ci type="fn" class="discrete">h</m:ci>
		<m:ci>n</m:ci>
	      </m:apply>
	    </m:apply>
	  </m:math> : O(
	  <m:math>
	    <m:apply>
	      <m:power/>
	      <m:ci>N</m:ci>
	      <m:cn>2</m:cn>
	    </m:apply>
	  </m:math>) operaciones. 
	</para>


	<para id="exam1para2">
	  Tomando la  FFTs -- O(NlogN)
	</para>

	<para id="exam1para3">
	 multiplicando la  FFTs -- O(N)
	</para>

	<para id="exam1para4">
	  la inversa de  FFTs -- O(NlogN).
	</para>

	<para id="exam1para5">
	  el total de complejidad es O(NlogN).
	</para>	
      
      <para id="exam1para6">	
	<note type="nota">
	  FFT + computación didigital fue completamente responsable de la 
	  "explosión" del Procesamiento Digital de Señales DSP en los años 60's. 
	</note>
	</para>
      </example>
	
      <para id="pend">
	<note type="nota">
	  La Universidad de Rice fue (y sigue siendo) uno de los lugares de hacer investigación en
	  DSP.
	</note>
      </para>

    </section>      

  </content>
</document>
