
En el contexto de los algoritmos de transformada rápida de Fourier , una mariposa es una parte del cálculo que combina los resultados de transformadas discretas de Fourier (DFT) más pequeñas en una DFT más grande, o viceversa (dividiendo una DFT más grande en subtransformadas). El nombre "mariposa" proviene de la forma del diagrama de flujo de datos en el caso de base 2, como se describe a continuación. [ 1 ] Se cree que la primera aparición impresa del término fue en un informe técnico del MIT de 1969. [ 2 ] [ 3 ] La misma estructura también se puede encontrar en el algoritmo de Viterbi , utilizado para encontrar la secuencia más probable de estados ocultos.
El término "mariposa" suele aparecer en el contexto del algoritmo FFT de Cooley-Tukey , que descompone recursivamente una DFT de tamaño compuesto n = rm en r transformadas más pequeñas de tamaño m , donde r es la base de la transformada. Estas DFT más pequeñas se combinan mediante mariposas de tamaño r , que a su vez son DFT de tamaño r (realizadas m veces sobre las salidas correspondientes de las subtransformadas) premultiplicadas por raíces de la unidad (conocidas como factores de rotación ). (Este es el caso de "diezmado en el tiempo"; también se pueden realizar los pasos a la inversa, conocido como "diezmado en la frecuencia", donde las mariposas se aplican primero y se postmultiplican por factores de rotación. Véase también el artículo sobre la FFT de Cooley-Tukey ).
Diagrama de mariposa Radix-2
En el caso del algoritmo Cooley-Tukey de base 2, la mariposa es simplemente una DFT de tamaño 2 que toma dos entradas ( x0 , x1 ) ( salidas correspondientes de las dos subtransformadas) y da dos salidas ( y0 , y1 ) mediante la fórmula (sin incluir factores de giro ):
Si se dibuja el diagrama de flujo de datos para este par de operaciones, las líneas ( x 0 , x 1 ) a ( y 0 , y 1 ) se cruzan y se asemejan a las alas de una mariposa , de ahí su nombre (véase también la ilustración de la derecha).

Más específicamente, un algoritmo FFT de decimación en el tiempo de base 2 sobre n = 2 p entradas con respecto a una raíz n -ésima primitiva de la unidad. Se basa en O( n log 2 n ) mariposas de la forma:
donde k es un número entero que depende de la parte de la transformación que se esté calculando. Mientras que la transformación inversa correspondiente se puede realizar matemáticamente reemplazando ω por ω − 1 (y posiblemente multiplicando por un factor de escala general, dependiendo de la convención de normalización), también se pueden invertir directamente las mariposas:
correspondiente a un algoritmo FFT de decimación en frecuencia.
Otros usos
La mariposa también puede utilizarse para mejorar la aleatoriedad de grandes conjuntos de números parcialmente aleatorios, poniendo en contacto causal cada palabra de 32 o 64 bits con todas las demás palabras mediante un algoritmo de hash deseado, de modo que un cambio en cualquier bit tenga la posibilidad de cambiar todos los bits del conjunto grande. [ 4 ]
Véase también
Referencias
- ↑ Alan V. Oppenheim, Ronald W. Schafer y John R. Buck, Procesamiento de señales en tiempo discreto , 2.ª edición (Upper Saddle River, NJ: Prentice Hall, 1989)
- ↑ CJ Weinstein (21 de noviembre de 1969). Efectos de cuantización en filtros digitales (PDF) (Informe). Laboratorio Lincoln del MIT . pág. 42.
Este cálculo, denominado "mariposa"
- ↑ Cipra, Barry A. (2012-06-04). "FFT y diagrama de mariposa" . mathoverflow.net . Recuperado el 2015-02-10 .
- ↑ Press, William H.; Teukolsky, Saul A.; Vetterling, William T.; Flannery, Brian P. (2007), "Sección 7.2 Hashing completo de una matriz grande", Numerical Recipes: The Art of Scientific Computing (3.ª ed.), Nueva York: Cambridge University Press, pág. 358, ISBN 978-0-521-88068-8
Enlaces externos
- Explicación de la FFT y los diagramas de mariposa .
- Diagramas de mariposa de varias implementaciones de FFT (Radix-2, Radix-4, Split-Radix) .
- transformadas rápidas de Fourier
- Diagramas