Articulo de referencia

transformada rápida de Fourier

Un ejemplo de estructura de algoritmo FFT, utilizando una descomposición en FFT de tamaño reducido. Análisis discreto de Fourier de una suma de ondas cosenoidales a 10, 20, 30, ...

Un ejemplo de estructura de algoritmo FFT, utilizando una descomposición en FFT de tamaño reducido.
Análisis discreto de Fourier de una suma de ondas cosenoidales a 10, 20, 30, 40 y 50  Hz.
Representación temporal (arriba) y representación frecuencial (abajo) de la misma señal, donde la representación inferior se puede obtener a partir de la superior mediante la transformada de Fourier.

La transformada rápida de Fourier ( FFT ) es un algoritmo que calcula la transformada discreta de Fourier (DFT) o su inversa (IDFT) de una secuencia . Una transformada de Fourier convierte una señal de su dominio original (generalmente el tiempo o el espacio) a una representación en el dominio de la frecuencia, y viceversa.

La DFT se obtiene descomponiendo una secuencia de valores en componentes de diferentes frecuencias. [ 1 ] Esta operación es útil en muchos campos, pero calcularla directamente a partir de la definición suele ser demasiado lento para ser práctico. Una FFT calcula rápidamente dichas transformaciones factorizando la matriz DFT en un producto de factores dispersos (en su mayoría cero). [ 2 ] Como resultado, logra reducir la complejidad del cálculo de la DFT.O(norte2){\textstyle O(n^{2})}, que surge si simplemente se aplica la definición de DFT aO(norteregistronorte){\textstyle O(n\log n)}donde n es la longitud de la secuencia. La diferencia de velocidad puede ser enorme, especialmente para secuencias largas donde n puede ser de miles o millones.

Como la FFT es simplemente una refactorización algebraica de términos dentro de la DFT, tanto la DFT como la FFT realizan operaciones matemáticamente equivalentes e intercambiables, suponiendo que todos los términos se calculan con precisión infinita. Sin embargo, en presencia de errores de redondeo , muchos algoritmos de FFT son mucho más precisos que evaluar la definición de DFT directa o indirectamente. Existen muchos algoritmos de FFT diferentes basados ​​en una amplia gama de teorías publicadas, desde la aritmética simple de números complejos hasta la teoría de grupos y la teoría de números . Los algoritmos de FFT más conocidos dependen de la factorización de n , pero existen FFT conO(norteregistronorte){\displaystyle O(n\log n)}complejidad para todos los n , incluidos los valores primos . Muchos algoritmos FFT dependen únicamente del hecho de quemi2πi/norte{\textstyle e^{-2\pi i/n}}es una raíz primitiva n- ésima de la unidad y, por lo tanto, puede aplicarse a transformaciones análogas sobre cualquier campo finito , como las transformaciones de la teoría de números . Dado que la DFT inversa es la misma que la DFT, pero con el signo opuesto en el exponente y un factor de 1/ n , cualquier algoritmo FFT puede adaptarse fácilmente para ella.

Las transformadas rápidas de Fourier se utilizan ampliamente en aplicaciones de ingeniería, música, ciencia y matemáticas. Las ideas básicas se popularizaron en 1965, pero algunos algoritmos se habían derivado ya en 1805. [ 1 ] En 1994, Gilbert Strang describió la FFT como "el algoritmo numérico más importante de nuestra época", [ 3 ] [ 4 ] y fue incluida en los 10 mejores algoritmos del siglo XX por la revista IEEE Computing in Science & Engineering . [ 5 ]

Historia

El desarrollo de algoritmos rápidos para la DFT se vislumbró en el trabajo inédito de Carl Friedrich Gauss de 1805 sobre las órbitas de los asteroides Pallas y Juno . Gauss quería interpolar las órbitas a partir de observaciones de muestra; [ 6 ] [ 7 ] su método era muy similar al que publicarían en 1965 James Cooley y John Tukey , a quienes generalmente se les atribuye la invención del algoritmo FFT genérico moderno. Si bien el trabajo de Gauss precedió incluso a los resultados de Joseph Fourier de 1822, no analizó la complejidad del método y, finalmente, utilizó otros métodos para lograr el mismo fin.

Entre 1805 y 1965, otros autores publicaron algunas versiones de la FFT. Frank Yates publicó en 1932 su versión llamada algoritmo de interacción , que proporcionaba un cálculo eficiente de las transformadas de Hadamard y Walsh . [ 8 ] El algoritmo de Yates todavía se utiliza en el campo del diseño estadístico y el análisis de experimentos. En 1942, GC Danielson y Cornelius Lanczos publicaron su versión para calcular la DFT para la cristalografía de rayos X , un campo donde el cálculo de las transformadas de Fourier presentaba un formidable cuello de botella. [ 9 ] [ 10 ] Si bien muchos métodos en el pasado se habían centrado en reducir el factor constante paraO(norte2){\textstyle O(n^{2})}mediante el cálculo aprovechando las simetrías, Danielson y Lanczos se dieron cuenta de que se podía usar la periodicidad y aplicar un truco de duplicación para "duplicar [ n ] con solo un poco más del doble de trabajo", aunque al igual que Gauss no hicieron el análisis para descubrir que esto conducía aO(norteregistronorte){\textstyle O(n\log n)}escalado. [ 11 ] En 1958, IJ Good publicó un artículo que establecía el algoritmo FFT de factor primo que se aplica a transformadas de Fourier discretas de tamañonorte=norte1norte2{\textstyle n=n_{1}n_{2}}, dóndenorte1{\displaystyle n_{1}}ynorte2{\displaystyle n_{2}}son coprimos. [ 12 ]

James Cooley y John Tukey redescubrieron independientemente estos algoritmos anteriores [ 7 ] y publicaron una FFT más general en 1965 que es aplicable cuando n es compuesto y no necesariamente una potencia de 2, además de analizar laO(norteregistronorte){\textstyle O(n\log n)}escalamiento. [ 13 ] Tukey concibió la idea durante una reunión del Comité Asesor Científico del Presidente Kennedy , donde un tema de discusión fue la detección de pruebas nucleares de la Unión Soviética mediante la instalación de sensores para rodear el país desde el exterior. Para analizar la salida de estos sensores, se necesitaría un algoritmo FFT. En una conversación con Tukey, Richard Garwin reconoció la aplicabilidad general del algoritmo no solo a problemas de seguridad nacional, sino también a una amplia gama de problemas, incluyendo uno de interés inmediato para él: determinar las periodicidades de las orientaciones de espín en un cristal 3D de Helio-3. [ 14 ] Garwin le dio la idea de Tukey a Cooley (ambos trabajaban en los laboratorios Watson de IBM ) para su implementación. [ 15 ] Cooley y Tukey publicaron el artículo en un tiempo relativamente corto de seis meses. [ 16 ] Como Tukey no trabajaba en IBM, se dudó de la patentabilidad de la idea y el algoritmo pasó a ser de dominio público, lo que, a través de la revolución informática de la década siguiente, convirtió a la FFT en uno de los algoritmos indispensables en el procesamiento de señales digitales .

Definición

Dejarincógnita0,,incógnitanorte1{\displaystyle x_{0},\ldots ,x_{n-1}}sean números complejos . La DFT se define mediante la fórmula

incógnitak=metro=0norte1incógnitametromii2πkmetro/nortek=0,,norte1,{\displaystyle X_{k}=\sum _{m=0}^{n-1}x_{m}e^{-i2\pi km/n}\qquad k=0,\ldots ,n-1,}

dóndemii2π/norte{\displaystyle e^{i2\pi /n}}es una raíz n- ésima primitiva de 1.

Evaluar esta definición directamente requiereO(norte2){\textstyle O(n^{2})}operaciones: hay n salidas X k , y cada salida requiere una suma de n términos. Una FFT es cualquier método para calcular los mismos resultados enO(norteregistronorte){\textstyle O(n\log n)}operaciones. Todos los algoritmos FFT conocidos requierenO(norteregistronorte){\textstyle O(n\log n)}operaciones, aunque no existe prueba conocida de que una menor complejidad sea imposible. [ 17 ]

Para ilustrar el ahorro de una FFT, considere el recuento de multiplicaciones y sumas complejas paranorte=4096{\textstyle n=4096}puntos de datos. Evaluar las sumas de la DFT directamente implicanorte2{\textstyle n^{2}}multiplicaciones complejas ynorte(norte1){\textstyle n(n-1)}adiciones complejas, de las cualesO(norte){\textstyle O(n)}Se pueden ahorrar operaciones eliminando operaciones triviales como las multiplicaciones por 1, dejando aproximadamente 30 millones de operaciones. En contraste, el algoritmo Cooley-Tukey de base 2 , para n una potencia de 2, puede calcular el mismo resultado con solo(norte/2)registro2(norte){\textstyle (n/2)\log _ {2}(n)}multiplicaciones complejas (de nuevo, ignorando las simplificaciones de multiplicaciones por 1 y similares) ynorteregistro2(norte){\textstyle n\log _{2}(n)}sumas complejas, en total unas 70.000 operaciones, más de cuatrocientas veces menos que con la evaluación directa. En la práctica, el rendimiento real en las computadoras modernas suele estar dominado por factores distintos a la velocidad de las operaciones aritméticas y el análisis es un tema complicado (por ejemplo, véase Frigo y Johnson , 2005), [ 18 ] pero la mejora general deO(norte2){\textstyle O(n^{2})}aO(norteregistronorte){\textstyle O(n\log n)}restos.

Algoritmos

Algoritmo de Cooley-Tukey

El algoritmo FFT más utilizado es, con diferencia, el algoritmo de Cooley-Tukey. Se trata de un algoritmo de divide y vencerás que descompone recursivamente una DFT de cualquier tamaño compuesto .norte=norte1norte2{\textstyle n=n_{1}n_{2}}ennorte1{\textstyle n_{1}}DFT más pequeños de tamañonorte2{\textstyle n_{2}}, junto conO(norte){\displaystyle O(n)}multiplicaciones por raíces complejas de la unidad tradicionalmente llamadas factores de giro (según Gentleman y Sande, 1966). [ 19 ]

Este método (y la idea general de una FFT) fue popularizado por una publicación de Cooley y Tukey en 1965, [ 13 ] pero más tarde se descubrió [ 1 ] que esos dos autores habían reinventado juntos de forma independiente un algoritmo conocido por Carl Friedrich Gauss alrededor de 1805 [ 20 ] (y posteriormente redescubierto varias veces en formas limitadas).

El uso más conocido del algoritmo de Cooley-Tukey consiste en dividir la transformada en dos partes de tamaño n /2 en cada paso, por lo que se limita a tamaños que son potencias de dos, pero en general se puede utilizar cualquier factorización (como ya sabían Gauss y Cooley/Tukey [ 1 ] ). Estos casos se denominan respectivamente caso de base 2 y base mixta (y otras variantes, como la FFT de base dividida, también tienen sus propios nombres). Aunque la idea básica es recursiva, la mayoría de las implementaciones tradicionales reorganizan el algoritmo para evitar la recursión explícita. Además, dado que el algoritmo de Cooley-Tukey divide la DFT en DFT más pequeñas, se puede combinar arbitrariamente con cualquier otro algoritmo para la DFT, como los que se describen a continuación.

Otros algoritmos FFT

Paranorte=norte1norte2{\textstyle n=n_{1}n_{2}}con coprimonorte1{\textstyle n_{1}}ynorte2{\textstyle n_{2}}, se puede usar el algoritmo de factor primo (Good-Thomas) (PFA), basado en el teorema chino del resto , para factorizar la DFT de manera similar a Cooley-Tukey pero sin los factores de rotación. El algoritmo Rader-Brenner (1976) [ 21 ] es una factorización tipo Cooley-Tukey pero con factores de rotación puramente imaginarios, reduciendo las multiplicaciones a costa de un aumento en las sumas y una menor estabilidad numérica ; posteriormente fue reemplazado por la variante de base dividida de Cooley-Tukey (que logra el mismo número de multiplicaciones pero con menos sumas y sin sacrificar la precisión). Los algoritmos que factorizan recursivamente la DFT en operaciones más pequeñas distintas de las DFT incluyen los algoritmos Bruun y QFT . (Los algoritmos Rader-Brenner [ 21 ] y QFT se propusieron para tamaños potencia de dos, pero es posible que se puedan adaptar a n compuesto general . El algoritmo de Bruun se aplica a tamaños compuestos pares arbitrarios). El algoritmo de Bruun , en particular, se basa en interpretar la FFT como una factorización recursiva del polinomio.znorte1{\displaystyle z^{n}-1}, aquí en polinomios de coeficientes reales de la formazmetro1{\displaystyle z^{m}-1}yz2metro+azmetro+1{\displaystyle z^{2m}+az^{m}+1}.

Otro punto de vista polinomial es explotado por el algoritmo FFT de Winograd , [ 22 ] [ 23 ] que factorizaznorte1{\displaystyle z^{n}-1}en polinomios ciclotómicos —estos a menudo tienen coeficientes de 1,  0  o  −1, y por lo tanto requieren pocas (o ninguna) multiplicaciones, por lo que Winograd se puede usar para obtener FFT de multiplicación mínima y se usa a menudo para encontrar algoritmos eficientes para factores pequeños. De hecho, Winograd demostró que la DFT se puede calcular con soloO(norte){\displaystyle O(n)}Multiplicaciones irracionales, lo que lleva a un límite inferior alcanzable comprobado para el número de multiplicaciones de tamaños que son potencias de dos; esto se logra a costa de muchas más sumas, una compensación que ya no es favorable en los procesadores modernos con multiplicadores de hardware . En particular, Winograd también utiliza el PFA, así como un algoritmo de Rader para FFT de tamaños primos .

El algoritmo de Rader , que explota la existencia de un generador para el grupo multiplicativo módulo primo n , expresa una DFT de tamaño primo n como una convolución cíclica de tamaño (compuesto) n – 1 , que luego puede calcularse mediante un par de FFT ordinarias a través del teorema de convolución (aunque Winograd utiliza otros métodos de convolución) [ 24 ] . Otra FFT de tamaño primo se debe a LI Bluestein y a veces se denomina algoritmo chirp-z ; también reexpresa una DFT como una convolución, pero esta vez del mismo tamaño (que puede rellenarse con ceros hasta una potencia de dos y evaluarse mediante FFT de Cooley-Tukey de base 2, por ejemplo), a través de la identidad [ 25 ].

nortek=(knorte)22+norte22+k22.{\displaystyle nk=-{\frac {(kn)^{2}}{2}}+{\frac {n^{2}}{2}}+{\frac {k^{2}}{2}}.}

La transformada rápida de Fourier hexagonal (HFFT) tiene como objetivo calcular una FFT eficiente para los datos muestreados hexagonalmente mediante el uso de un nuevo esquema de direccionamiento para cuadrículas hexagonales, llamado direccionamiento de conjuntos de matrices (ASA) [ 26 ] .

Algoritmos FFT especializados para datos reales o simétricos

En muchas aplicaciones, los datos de entrada para la DFT son puramente reales, en cuyo caso las salidas satisfacen la simetría.

incógnitanortek=incógnitak{\displaystyle X_{nk}=X_{k}^{*}}

y se han diseñado algoritmos FFT eficientes para esta situación (véase, por ejemplo, Sorensen, 1987). [ 27 ] [ 28 ] Un enfoque consiste en tomar un algoritmo ordinario (por ejemplo, Cooley-Tukey) y eliminar las partes redundantes del cálculo, ahorrando aproximadamente un factor de dos en tiempo y memoria. Alternativamente, es posible expresar una DFT de entrada real de longitud par como una DFT compleja de la mitad de la longitud (cuyas partes real e imaginaria son los elementos pares/impares de los datos reales originales), seguida deO(norte){\displaystyle O(n)}operaciones de postprocesamiento.

Antes se creía que las DFT de entrada real podían calcularse de forma más eficiente mediante la transformada discreta de Hartley (DHT), pero posteriormente se argumentó que normalmente se puede encontrar un algoritmo de DFT de entrada real especializado (FFT) que requiere menos operaciones que el algoritmo DHT correspondiente (FHT) para el mismo número de entradas. [ 27 ] El algoritmo de Bruun (arriba) es otro método que se propuso inicialmente para aprovechar las entradas reales, pero no ha tenido éxito.

Existen especializaciones adicionales de FFT para los casos de datos reales que tienen simetría par/impar , en cuyo caso se puede ganar otro factor de aproximadamente dos en tiempo y memoria y la DFT se convierte en la (s) transformada(s) discreta(s) de coseno / seno ( DCT / DST ). En lugar de modificar directamente un algoritmo FFT para estos casos, las DCT/DST también se pueden calcular a través de FFT de datos reales combinados conO(norte){\displaystyle O(n)}preprocesamiento y postprocesamiento.

Problemas computacionales

Límites en la complejidad y el número de operaciones

Problema sin resolver en informática
¿Cuál es el límite inferior de la complejidad de los algoritmos de transformada rápida de Fourier? ¿Pueden ser más rápidos que...?O(norteregistronorte){\displaystyle O(N\log N)}¿

Una cuestión fundamental de interés teórico de larga data es demostrar límites inferiores en la complejidad y el número exacto de operaciones de las transformadas rápidas de Fourier, y aún quedan muchos problemas abiertos. No se ha demostrado rigurosamente si las DFT realmente requierenΩ(norteregistronorte){\textstyle \Omega (n\log n)}(es decir, orden)norteregistronorte{\displaystyle n\log n}operaciones de tamaño potencia de dos o superior, incluso para el caso simple de tamaños potencia de dos , aunque no se conocen algoritmos de menor complejidad. En particular, el número de operaciones aritméticas suele ser el foco de estas preguntas, aunque el rendimiento real en los ordenadores modernos está determinado por muchos otros factores, como la caché o la optimización de la canalización de la CPU .

Siguiendo el trabajo de Shmuel Winograd (1978), [ 22 ] un ajustadoΘ(norte){\displaystyle \Theta (n)}Se conoce el límite inferior para el número de multiplicaciones reales requeridas por una FFT. Se puede demostrar que solo4norte2registro22(norte)2registro2(norte)4{\textstyle 4n-2\log _{2}^{2}(n)-2\log _{2}(n)-4}Se requieren multiplicaciones reales irracionales para calcular una DFT de longitud potencia de dos.norte=2metro{\displaystyle n=2^{m}}Además, se conocen algoritmos explícitos que logran este conteo (Heideman y Burrus , 1986; [ 29 ] Duhamel, 1990 [ 30 ] ). Sin embargo, estos algoritmos requieren demasiadas sumas para ser prácticos, al menos en computadoras modernas con multiplicadores de hardware (Duhamel, 1990; [ 30 ] Frigo y Johnson , 2005). [ 18 ]

No se conoce un límite inferior ajustado para el número de adiciones requeridas, aunque se han demostrado límites inferiores bajo algunas suposiciones restrictivas sobre los algoritmos. En 1973, Morgenstern [ 31 ] demostró unΩ(norteregistronorte){\displaystyle \Omega (n\log n)}cota inferior en el recuento de sumas para algoritmos donde las constantes multiplicativas tienen magnitudes acotadas (lo cual es cierto para la mayoría, pero no para todos, los algoritmos FFT). Pan (1986) [ 32 ] demostró unΩ(norteregistronorte){\displaystyle \Omega (n\log n)}límite inferior asumiendo un límite en una medida de la asincronía del algoritmo FFT , pero la generalidad de esta suposición no está clara. Para el caso de potencia de dos n , Papadimitriou (1979) [ 33 ] argumentó que el númeronorteregistro2norte{\textstyle n\log _{2}n}de sumas de números complejos logradas por los algoritmos de Cooley-Tukey es óptimo bajo ciertas suposiciones sobre el grafo del algoritmo (sus suposiciones implican, entre otras cosas, que no se explotan identidades aditivas en las raíces de la unidad). (Este argumento implicaría que al menos2norteregistro2norte{\textstyle 2N\log _{2}N}Se requieren sumas reales, aunque esto no es un límite estricto porque se requieren sumas adicionales como parte de las multiplicaciones de números complejos. Hasta ahora, ningún algoritmo FFT publicado ha logrado menos denorteregistro2norte{\textstyle n\log _{2}n}sumas de números complejos (o su equivalente) para potencias de dos n .

Un tercer problema consiste en minimizar el número total de multiplicaciones y sumas reales, a veces llamado complejidad aritmética (aunque en este contexto se considera el recuento exacto y no la complejidad asintótica). De nuevo, no se ha demostrado ningún límite inferior ajustado. Sin embargo, desde 1968, el recuento más bajo publicado para potencias de dos n se logró hace tiempo con el algoritmo FFT de base dividida , que requiere4norteregistro2(norte)6norte+8{\textstyle 4n\log _ {2}(n)-6n+8}multiplicaciones y sumas reales para n > 1. Esto se redujo aún más a349norteregistro2norte{\textstyle \sim {\frac {34}{9}}n\log _{2}n}(Johnson y Frigo, 2007; [ 17 ] Lundy y Van Buskirk, 2007 [ 34 ] ). Se demostró que un recuento ligeramente mayor (pero aún mejor que la raíz dividida para n ≥ 256 ) era demostrablemente óptimo para n ≤ 512 bajo restricciones adicionales en los posibles algoritmos (grafos de flujo tipo raíz dividida con factores multiplicativos de módulo unitario), por reducción a un problema de satisfacibilidad módulo teorías resoluble por fuerza bruta (Haynal y Haynal, 2011). [ 35 ]

La mayoría de los intentos por reducir o demostrar la complejidad de los algoritmos FFT se han centrado en el caso ordinario de datos complejos, porque es el más simple. Sin embargo, las FFT de datos complejos están tan estrechamente relacionadas con algoritmos para problemas similares, como las FFT de datos reales, las transformadas discretas de coseno , las transformadas discretas de Hartley , etc., que cualquier mejora en una de ellas conduciría inmediatamente a mejoras en las demás (Duhamel y Vetterli, 1990). [ 36 ]

Aproximaciones

Todos los algoritmos FFT mencionados anteriormente calculan la DFT de forma exacta (es decir, sin tener en cuenta los errores de punto flotante ). Sin embargo, se han propuesto algunos algoritmos FFT que calculan la DFT de forma aproximada , con un error que puede hacerse arbitrariamente pequeño a costa de un mayor número de cálculos. Estos algoritmos sacrifican el error de aproximación a cambio de una mayor velocidad u otras propiedades. Por ejemplo, un algoritmo FFT aproximado de Edelman et al. (1999) [ 37 ] logra menores requisitos de comunicación para la computación paralela con la ayuda de un método multipolar rápido . Una FFT aproximada basada en wavelet de Guo y Burrus (1996) [ 38 ] tiene en cuenta las entradas/salidas dispersas (localización temporal/frecuencial) de forma más eficiente que con una FFT exacta. Otro algoritmo para el cálculo aproximado de un subconjunto de las salidas de la DFT se debe a Shentov et al. (1995). [ 39 ] El algoritmo de Edelman funciona igualmente bien para datos dispersos y no dispersos, ya que se basa en la compresibilidad (deficiencia de rango) de la matriz de Fourier en sí misma, en lugar de la compresibilidad (dispersión) de los datos. Por el contrario, si los datos son dispersos, es decir, si solo k de los n coeficientes de Fourier son distintos de cero, entonces la complejidad se puede reducir aO(kregistronorteregistronorte/k){\displaystyle O(k\log n\log n/k)}y se ha demostrado que esto conduce a aceleraciones prácticas en comparación con una FFT ordinaria para n / k > 32 en un ejemplo de n grande ( n = 2 22 ) utilizando un algoritmo aproximado probabilístico (que estima los coeficientes k más grandes con varias cifras decimales). [ 40 ]

Exactitud

Los algoritmos FFT presentan errores cuando se utiliza aritmética de punto flotante de precisión finita, pero estos errores suelen ser bastante pequeños; la mayoría de los algoritmos FFT, por ejemplo, Cooley-Tukey, poseen excelentes propiedades numéricas como consecuencia de la estructura de suma por pares de los algoritmos. El límite superior del error relativo para el algoritmo Cooley-Tukey esO(εregistronorte){\textstyle O(\varepsilon \log n)}, en comparación conO(εnorte3/2){\textstyle O(\varepsilon n^{3/2})}para la fórmula DFT ingenua, [ 19 ] donde 𝜀 es la precisión relativa de punto flotante de la máquina. De hecho, los errores cuadráticos medios (rms) son mucho mejores que estos límites superiores, siendo soloO(εregistronorte){\textstyle O(\varepsilon {\sqrt {\log n}})}para Cooley-Tukey yO(εnorte){\textstyle O(\varepsilon {\sqrt {n}})}para la DFT ingenua (Schatzman, 1996). [ 41 ] Sin embargo, estos resultados son muy sensibles a la precisión de los factores de rotación utilizados en la FFT (es decir, los valores de la función trigonométrica ), y no es raro que las implementaciones descuidadas de la FFT tengan una precisión mucho peor, por ejemplo, si utilizan fórmulas de recurrencia trigonométrica inexactas . Algunas FFT distintas de Cooley-Tukey, como el algoritmo de Rader-Brenner, son intrínsecamente menos estables.

En la aritmética de punto fijo , los errores de precisión finita acumulados por los algoritmos FFT son peores, con errores rms que crecen a medida queO(norte){\textstyle O({\sqrt {n}})}para el algoritmo Cooley–Tukey (Welch, 1969). [ 42 ] Lograr esta precisión requiere una atención cuidadosa al escalado para minimizar la pérdida de precisión, y los algoritmos FFT de punto fijo implican un reescalado en cada etapa intermedia de las descomposiciones como Cooley–Tukey.

Para verificar la corrección de una implementación de FFT, se pueden obtener garantías rigurosas enO(norteregistronorte){\textstyle O(n\log n)}tiempo mediante un procedimiento simple que verifica la linealidad, la respuesta impulsional y las propiedades de desplazamiento temporal de la transformada en entradas aleatorias (Ergün, 1995). [ 43 ]

Los valores para las frecuencias intermedias se pueden obtener mediante diversos métodos de promediado.

Transformadas de Fourier rápidas multidimensionales

Tal como se define en el artículo DFT multidimensional , la DFT multidimensional

incógnitak=norte=0norte1mi2πik(norte/norte)incógnitanorte{\displaystyle X_{\mathbf {k} }=\sum _{\mathbf {n} =0}^{\mathbf {N} -1}e^{-2\pi i\mathbf {k} \cdot (\mathbf {n} /\mathbf {N} )}x_{\mathbf {n} }}

transforma una matriz x n con un vector de índices de dimensión dnorte=(norte1,,norted){\textstyle \mathbf {n} =\left(n_{1},\ldots ,n_{d}\right)}mediante un conjunto de d sumas anidadas (sobrenortej=0nortej1{\textstyle n_{j}=0\ldots N_{j}-1}para cada j ), donde la divisiónnorte/norte=(norte1/norte1,,norted/norted){\textstyle \mathbf {n} /\mathbf {N} =\left(n_{1}/N_{1},\ldots,n_{d}/N_{d}\right)}se realiza elemento a elemento. De forma equivalente, es la composición de una secuencia de d conjuntos de DFT unidimensionales, realizadas a lo largo de una dimensión a la vez (en cualquier orden).

Este punto de vista compositivo proporciona inmediatamente el algoritmo DFT multidimensional más simple y común, conocido como algoritmo de filas y columnas (después del caso bidimensional, más adelante). Es decir, simplemente se realiza una secuencia de d FFT unidimensionales (mediante cualquiera de los algoritmos anteriores): primero se transforma a lo largo de la dimensión n 1 , luego a lo largo de la dimensión n 2 , y así sucesivamente (de hecho, cualquier orden funciona). Se demuestra fácilmente que este método tiene la siguiente estructura habitual.O(norteregistronorte){\textstyle O(n\log n)}complejidad, dondenorte=norte1norte2norted{\textstyle n=n_{1}\cdot n_{2}\cdots n_{d}}es el número total de puntos de datos transformados. En particular, hay n / n 1 transformaciones de tamaño n 1 , etc., por lo que la complejidad de la secuencia de FFT es:

nortenorte1O(norte1registronorte1)++nortenortedO(nortedregistronorted)=O(norte[registronorte1++registronorted])=O(norteregistronorte).{\displaystyle {\begin{aligned}&{\frac {n}{n_{1}}}O(n_{1}\log n_{1})+\cdots +{\frac {n}{n_{d}}}O(n_{d}\log n_{d})\\[6pt]={}&O\left(n\left[\log n_{1}+\cdots +\log n_{d}\right]\right)=O(n\log n).\end{aligned}}}

En dos dimensiones, el x k puede verse como unnorte1×norte2{\displaystyle n_{1}\times n_{2}}matriz , y este algoritmo corresponde a realizar primero la FFT de todas las filas (respectivamente, columnas), agrupando las filas (respectivamente, columnas) transformadas resultantes juntas como otranorte1×norte2{\displaystyle n_{1}\times n_{2}}matriz, y luego realizar la FFT en cada una de las columnas (respectivamente, filas) de esta segunda matriz, y de manera similar agrupar los resultados en la matriz de resultados final.

En más de dos dimensiones, a menudo resulta ventajoso para la localidad de caché agrupar las dimensiones recursivamente. Por ejemplo, una FFT tridimensional podría realizar primero FFT bidimensionales de cada segmento planar para cada n 1 fijo , y luego realizar FFT unidimensionales a lo largo de la dirección n 1. De forma más general, un algoritmo asintóticamente óptimo que ignora la caché consiste en dividir recursivamente las dimensiones en dos grupos.(norte1,,norted/2){\textstyle (n_{1},\ldots ,n_{d/2})}y(norted/2+1,,norted){\textstyle (n_{d/2+1},\ldots ,n_{d})}que se transforman recursivamente (redondeo si d no es par) (véase Frigo y Johnson, 2005). [ 18 ] Aun así, esta sigue siendo una variación directa del algoritmo de filas y columnas que en última instancia solo requiere un algoritmo FFT unidimensional como caso base, y todavía tieneO(norteregistronorte){\displaystyle O(n\log n)}complejidad. Otra variante consiste en realizar transposiciones de matrices entre transformaciones de dimensiones sucesivas, de modo que las transformaciones operen sobre datos contiguos; esto es especialmente importante para situaciones de memoria fuera de memoria principal y memoria distribuida , donde el acceso a datos no contiguos consume muchísimo tiempo.

Existen otros algoritmos FFT multidimensionales que son distintos del algoritmo de filas y columnas, aunque todos ellos tienenO(norteregistronorte){\textstyle O(n\log n)}complejidad. Quizás el algoritmo FFT no basado en filas y columnas más simple sea el algoritmo FFT de base vectorial , que es una generalización del algoritmo Cooley-Tukey ordinario donde se dividen las dimensiones de la transformada por un vector.r=(r1,r2,,rd){\textstyle \mathbf {r} =\left(r_{1},r_{2},\ldots ,r_{d}\right)}de radices en cada paso. (Esto también puede tener beneficios de caché). El caso más simple de vector-radix es cuando todas las radices son iguales (por ejemplo, vector-radix-2 divide todas las dimensiones por dos), pero esto no es necesario. Vector radix con una sola radix no unitaria a la vez, es decirr=(1,,1,r,1,,1){\textstyle \mathbf {r} =\left(1,\ldots ,1,r,1,\ldots ,1\right)}Esencialmente, se trata de un algoritmo de filas y columnas. Otros métodos más complejos incluyen algoritmos de transformación polinómica, propuestos por Nussbaumer (1977) [ 44 ] , que consideran la transformación en términos de convoluciones y productos polinómicos. Para más información y referencias, consulte Duhamel y Vetterli (1990) [ 36 ] .

Otras generalizaciones

UnO(norte5/2registronorte){\textstyle O(n^{5/2}\log n)}La generalización a armónicos esféricos en la esfera S 2 con n 2 nodos fue descrita por Mohlenkamp, ​​[ 45 ] junto con un algoritmo que se conjeturó (pero no se demostró) que tieneO(norte2registro2(norte)){\textstyle O(n^{2}\log ^{2}(n))}complejidad; Mohlenkamp también proporciona una implementación en la biblioteca libftsh. [ 46 ] Un algoritmo de armónicos esféricos conO(norte2registronorte){\textstyle O(n^{2}\log n)}La complejidad es descrita por Rokhlin y Tygert. [ 47 ]

El algoritmo de plegado rápido es análogo a la FFT, excepto que opera sobre una serie de formas de onda agrupadas en lugar de una serie de valores escalares reales o complejos. La rotación (que en la FFT es la multiplicación por un fasor complejo) es un desplazamiento circular de la forma de onda componente [ 48 ] .

Varios grupos también han publicado algoritmos FFT para datos no equiespaciados, como se revisa en Potts et al. (2001). [ 49 ] Estos algoritmos no calculan estrictamente la DFT (que solo está definida para datos equiespaciados), sino más bien alguna aproximación de la misma (una transformada discreta de Fourier no uniforme , o NDFT, que a menudo se calcula solo de forma aproximada). De manera más general, existen otros métodos de estimación espectral .

Aplicaciones

La FFT se utiliza en software de grabación digital, muestreo, síntesis aditiva y corrección de tono . [ 50 ]

La importancia de la FFT radica en que ha hecho que trabajar en el dominio de la frecuencia sea tan factible computacionalmente como trabajar en el dominio temporal o espacial. Algunas de las aplicaciones importantes de la FFT incluyen: [ 16 ] [ 51 ]

Telecomunicaciones

En los estándares modernos de comunicación inalámbrica, la FFT es un componente crítico para el procesamiento de señales. Específicamente, se utiliza en sistemas de multiplexación por división de frecuencia ortogonal (OFDM), como 4G LTE y 5G NR . [ 53 ] La eficiencia de la FFT permite la transmisión de datos a alta velocidad al dividir una señal de banda ancha en múltiples subportadoras ortogonales muy próximas entre sí. [ 54 ] Esta tecnología es esencial para reducir la interferencia y optimizar el consumo de energía en dispositivos móviles. [ 54 ]

Alternativas

La transformada rápida de Fourier (FFT) puede ser una mala elección para analizar señales con contenido de frecuencia no estacionario , donde las características de frecuencia cambian con el tiempo. La transformada discreta de Fourier (DFT) proporciona una estimación global de la frecuencia, asumiendo que todos los componentes de frecuencia están presentes en toda la señal, lo que dificulta la detección de características transitorias o de corta duración dentro de las señales.

Para los casos en que la información de frecuencia aparece brevemente en la señal o varía generalmente con el tiempo, pueden ser más adecuadas alternativas como la transformada de Fourier de tiempo corto , las transformadas wavelet discretas o la transformada de Hilbert discreta . [ 55 ] [ 56 ] Estas transformadas permiten un análisis de frecuencia localizado al capturar información tanto de frecuencia como temporal.

Áreas de investigación

Grandes FFT
Con la explosión de macrodatos en campos como la astronomía, ha surgido la necesidad de FFT de 512K para ciertos cálculos de interferometría. Los datos recopilados por proyectos como WMAP y LIGO requieren FFT de decenas de miles de millones de puntos. Dado que este tamaño no cabe en la memoria principal, las denominadas FFT fuera de memoria son un área de investigación activa. [ 57 ]
Transformadas de Fourier rápidas aproximadas
Para aplicaciones como la resonancia magnética, es necesario calcular transformadas discretas de Fourier (DFT) para puntos de la cuadrícula y/o frecuencias no uniformemente espaciados. Los enfoques basados ​​en multipolos pueden calcular cantidades aproximadas con un factor de aumento del tiempo de ejecución. [ 58 ]
FFT de grupo
La FFT también puede explicarse e interpretarse utilizando la teoría de representación de grupos , lo que permite una mayor generalización. Una función en cualquier grupo compacto, incluso los no cíclicos, tiene una expansión en términos de una base de elementos de matriz irreducibles. Sigue siendo un área activa de investigación encontrar un algoritmo eficiente para realizar este cambio de base. Las aplicaciones incluyen la expansión eficiente de armónicos esféricos , el análisis de ciertos procesos de Markov , la robótica, etc. [ 59 ]
Transformadas de Fourier rápidas cuánticas
El algoritmo rápido de Shor para la factorización de enteros en una computadora cuántica incluye una subrutina para calcular la DFT de un vector binario. Esta se implementa como una secuencia de puertas cuánticas de 1 o 2 bits, ahora conocida como FFT cuántica, que es, en esencia, la FFT de Cooley-Tukey realizada como una factorización particular de la matriz de Fourier. Actualmente se están explorando extensiones de estas ideas. [ 60 ]

Referencia lingüística

Véase también

Algoritmos relacionados con la FFT:

Implementaciones de FFT:

  • FFTW : una biblioteca de software libre desarrollada por Matteo Frigo y Steven G. Johnson en el MIT.
  • FFTReal : una implementación altamente optimizada, limpia y concisa con soporte para escalares o vectores SIMD en una clase de C++ creada por Dmitry Boldyrev y alojada en GITHUB https://github.com/mewza/realfft/
  • ALGLIB : una biblioteca de C++ y C# con licencia dual/GPL (que también admite otros lenguajes), con implementación de FFT real/compleja.
  • FFTPACK – otra biblioteca FFT para Fortran (dominio público)
  • Específico de la arquitectura:
  • Existen muchas más implementaciones disponibles, [ 62 ] para CPU y GPU, como PocketFFT para C++.

Otros enlaces:

Referencias

  1. 1 2 3 4 Heideman, Michael T.; Johnson, Don H.; Burrus, Charles Sidney (1984). "Gauss y la historia de la transformada rápida de Fourier" ( PDF) . Revista IEEE ASSP . 1 (4): 14– 21. Bibcode : 1984IASSP...1...14H . CiteSeerX 10.1.1.309.181 . doi : 10.1109/MASSP.1984.1162257 . S2CID 10032502. Archivado (PDF) del original el 19 de marzo de 2013.  
  2. Van Loan, Charles (1992). Marcos computacionales para la transformada rápida de Fourier . SIAM .
  3. Strang, Gilbert (mayo-junio de 1994). "Ondículas". American Scientist . 82 (3): 250– 255. Bibcode : 1994AmSci..82..250S . JSTOR 29775194 . 
  4. Kent, Raymond D.; Read, Charles (2002). Análisis acústico del habla (2.ª ed.). Singular/Thomson Learning. pág. 61. ISBN   978-0-7693-0112-9.
  5. Dongarra, Jack; Sullivan, Francis (enero de 2000). "Introducción de los editores invitados a los 10 mejores algoritmos". Computing in Science & Engineering . 2 (1): 22– 23. Bibcode : 2000CSE.....2a..22D . doi : 10.1109/MCISE.2000.814652 . ISSN 1521-9615 . 
  6. ^ Gauss, Carl Friedrich (1866). "Theoria interpolationis Methodo nova tractata" [ Teoría sobre un nuevo método de interpolación ] . Nachlass (manuscrito inédito). Werke (en latín y alemán). vol. 3. Göttingen, Alemania: Königlichen Gesellschaft der Wissenschaften zu Göttingen. págs. 265 a 303.  
  7. 1 2 Heideman, Michael T.; Johnson, Don H.; Burrus, Charles Sidney (1985-09-01). "Gauss y la historia de la transformada rápida de Fourier". Archivo para la Historia de las Ciencias Exactas . 34 (3): 265– 277. CiteSeerX 10.1.1.309.181 . doi : 10.1007/BF00348431 . ISSN 0003-9519 . S2CID 122847826 .   
  8. Yates, Frank (1937). "El diseño y análisis de experimentos factoriales". Comunicación técnica n.° 35 de la Oficina de Suelos de la Commonwealth . 142 (3585): 90– 92. Bibcode : 1938Natur.142...90F . doi : 10.1038/142090a0 . S2CID 23501205 . 
  9. Danielson, Gordon C. ; Lanczos, Cornelius (1942). "Algunas mejoras en el análisis práctico de Fourier y su aplicación a la dispersión de rayos X de líquidos". Journal of the Franklin Institute . 233 (4): 365– 380. doi : 10.1016/S0016-0032(42)90767-1 .
  10. Lanczos, Cornelius (1956). Análisis aplicado . Prentice–Hall .
  11. Cooley, James W.; Lewis, Peter AW; Welch, Peter D. (junio de 1967). "Notas históricas sobre la transformada rápida de Fourier". IEEE Transactions on Audio and Electroacoustics . 15 (2): 76– 79. Bibcode : 1967ITAuE..15...76C . CiteSeerX 10.1.1.467.7209 . doi : 10.1109/TAU.1967.1161903 . ISSN 0018-9278 .  
  12. Good, IJ (julio de 1958). "El algoritmo de interacción y el análisis práctico de Fourier" . Journal of the Royal Statistical Society, Serie B (Metodológica) . 20 (2): 361– 372. doi : 10.1111/j.2517-6161.1958.tb00300.x .
  13. 1 2 Cooley, James W. ; Tukey, John W. (1965). "Un algoritmo para el cálculo computacional de series de Fourier complejas" . Matemáticas de la Computación . 19 (90): 297– 301. doi : 10.1090/S0025-5718-1965-0178586-1 . ISSN 0025-5718 . 
  14. Cooley, James W. (1987). "El redescubrimiento del algoritmo de la transformada rápida de Fourier" (PDF) . Microchimica Acta . Vol. III. Viena, Austria. pp. 33–45 . Archivado (PDF) del original el 20 de agosto de 2016.  {{cite book}}: CS1 mantenimiento: falta el editor de ubicación ( enlace )
  15. Garwin, Richard (junio de 1969). «La transformada rápida de Fourier como ejemplo de la dificultad de lograr una amplia difusión de una nueva técnica» (PDF) . IEEE Transactions on Audio and Electroacoustics . AU-17 (2): 68–72 . Archivado (PDF) del original el 17 de mayo de 2006.
  16. 1 2 Rockmore, Daniel N. (enero de 2000). "La FFT: un algoritmo que toda la familia puede usar". Computing in Science & Engineering . 2 (1): 60– 64. Bibcode : 2000CSE.....2a..60R . CiteSeerX 10.1.1.17.228 . doi : 10.1109/5992.814659 . ISSN 1521-9615 . S2CID 14978667 .   
  17. 1 2 Frigo, Matteo; Johnson, Steven G. (enero de 2007) [2006-12-19]. "Una FFT de raíz dividida modificada con menos operaciones aritméticas". IEEE Transactions on Signal Processing . 55 (1): 111– 119. Bibcode : 2007ITSP...55..111J . CiteSeerX 10.1.1.582.5497 . doi : 10.1109/tsp.2006.882087 . S2CID 14772428 .  
  18. 1 2 3 Frigo, Matteo; Johnson, Steven G. (2005). "El diseño e implementación de FFTW3" (PDF) . Actas del IEEE . 93 (2): 216– 231. Bibcode : 2005IEEEP..93..216F . CiteSeerX 10.1.1.66.3097 . doi : 10.1109/jproc.2004.840301 . S2CID 6644892. Archivado (PDF) del original el 7 de febrero de 2005 .  
  19. 1 2 Gentleman, W. Morven; Sande, G. (1966). "Transformadas rápidas de Fourier: diversión y beneficio" . Actas de la AFIPS . 29 : 563–578 . doi : 10.1145/1464291.1464352 . S2CID 207170956 . 
  20. ^ Gauss, Carl Friedrich (1866) [1805]. Theoria interpolationis método nova tractata . Werke (en latín y alemán). vol. 3. Gotinga, Alemania: Königliche Gesellschaft der Wissenschaften. págs. 265 a 327.  
  21. 1 2 Brenner, Norman M.; Rader, Charles M. (1976). "Un nuevo principio para la transformada rápida de Fourier". IEEE Transactions on Acoustics, Speech, and Signal Processing . 24 (3): 264– 266. Bibcode : 1976ITASS..24..264R . doi : 10.1109/TASSP.1976.1162805 .
  22. 1 2 Winograd, Shmuel (1978). " Sobre el cálculo de la transformada discreta de Fourier" . Matemáticas de la computación . 32 (141): 175– 199. doi : 10.1090/S0025-5718-1978-0468306-4 . JSTOR 2006266. PMC 430186. PMID 16592303 .   
  23. Winograd, Shmuel (1979). "Sobre la complejidad multiplicativa de la transformada discreta de Fourier" . Advances in Mathematics . 32 (2): 83– 117. doi : 10.1016/0001-8708(79)90037-9 .
  24. Rader, CM (1968). "Transformadas discretas de Fourier cuando el número de muestras de datos es primo" . Actas del IEEE . 56 (6): 1107–1108 . doi : 10.1109/PROC.1968.6477 . ISSN 0018-9219 . 
  25. Bluestein, L. (diciembre de 1970). "Un enfoque de filtrado lineal para el cálculo de la transformada discreta de Fourier" . IEEE Transactions on Audio and Electroacoustics . 18 (4): 451– 455. doi : 10.1109/TAU.1970.1162132 . ISSN 0018-9278 . 
  26. Wilson, Joseph N. (1 de abril de 2011). "Direccionamiento de conjuntos de matrices: tecnología habilitadora para el procesamiento eficiente de imágenes muestreadas hexagonalmente" . Journal of Electronic Imaging . 20 (2): 023012. doi : 10.1117/1.3589306 . ISSN 1017-9909 . 
  27. 1 2 Sorensen, Henrik V.; Jones, Douglas L. ; Heideman, Michael T.; Burrus, Charles Sidney (1987). "Algoritmos de transformada rápida de Fourier de valor real". IEEE Transactions on Acoustics, Speech, and Signal Processing . 35 (6): 849– 863. Bibcode : 1987ITASS..35..849S . CiteSeerX 10.1.1.205.4523 . doi : 10.1109/TASSP.1987.1165220 . 
  28. Sorensen, Henrik V.; Jones, Douglas L. ; Heideman, Michael T.; Burrus, Charles Sidney (1987). "Correcciones a los "Algoritmos de transformada rápida de Fourier de valores reales"". IEEE Transactions on Acoustics, Speech, and Signal Processing . 35 (9): 1353. Bibcode : 1987ITASS..35R1353S . doi : 10.1109/TASSP.1987.1165284 .
  29. Heideman, Michael T.; Burrus, Charles Sidney (1986). "Sobre el número de multiplicaciones necesarias para calcular una DFT de longitud 2n". IEEE Transactions on Acoustics, Speech, and Signal Processing . 34 (1): 91– 95. Bibcode : 1986ITASS..34...91H . doi : 10.1109/TASSP.1986.1164785 .
  30. 1 2 Duhamel, Pierre (1990). "Algoritmos que cumplen con los límites inferiores de la complejidad multiplicativa de las DFT de longitud 2n y su conexión con algoritmos prácticos". IEEE Transactions on Acoustics, Speech, and Signal Processing . 38 (9): 1504– 1511. doi : 10.1109/29.60070 .
  31. Morgenstern, Jacques (1973). "Nota sobre una cota inferior de la complejidad lineal de la transformada rápida de Fourier" . Journal of the ACM . 20 (2): 305– 306. doi : 10.1145/321752.321761 . S2CID 2790142 . 
  32. Pan, Victor Ya. (1986-01-02). "El equilibrio entre la complejidad aditiva y la asincronía de los algoritmos lineales y bilineales" . Information Processing Letters . 22 (1): 11– 14. doi : 10.1016/0020-0190(86)90035-9 . Recuperado el 31 de octubre de 2017 .
  33. Papadimitriou, Christos H. (1979). "Optimalidad de la transformada rápida de Fourier" . Journal of the ACM . 26 (1): 95– 102. doi : 10.1145/322108.322118 . S2CID 850634 . 
  34. Lundy, Thomas J.; Van Buskirk, James (2007). "Un nuevo enfoque matricial para FFT reales y convoluciones de longitud 2k " . Computing . 80 (1): 23– 45. doi : 10.1007/s00607-007-0222-6 . S2CID 27296044 . 
  35. Haynal, Steve; Haynal, Heidi (2011). "Generación y búsqueda de familias de algoritmos FFT" (PDF) . Journal on Satisfiability, Boolean Modeling and Computation . 7 (4): 145– 187. arXiv : 1103.5740 . Bibcode : 2011arXiv1103.5740H . doi : 10.3233/SAT190084 . S2CID 173109. Archivado del original (PDF) el 26 de abril de 2012. 
  36. 1 2 Duhamel, Pierre; Vetterli, Martin (1990). "Transformadas rápidas de Fourier: una revisión tutorial y un estado del arte" . Procesamiento de señales . 19 (4): 259– 299. Bibcode : 1990SigPr..19..259D . doi : 10.1016/0165-1684(90)90158-U .
  37. Edelman, Alan; McCorquodale, Peter; Toledo, Sivan (1999). "¿La transformada rápida de Fourier del futuro?" (PDF) . SIAM Journal on Scientific Computing . 20 (3): 1094– 1114. CiteSeerX 10.1.1.54.9339 . doi : 10.1137/S1064827597316266 . Archivado (PDF) del original el 5 de julio de 2017. 
  38. Guo, Haitao; Burrus, Charles Sidney (1996). "Transformada de Fourier aproximada rápida mediante transformada wavelet". En Unser, Michael A.; Aldroubi, Akram; Laine, Andrew F. (eds.). Aplicaciones wavelet en el procesamiento de señales e imágenes IV . Actas de SPIE . Vol. 2825. pp. 250–259 . Bibcode : 1996SPIE.2825..250G . CiteSeerX 10.1.1.54.3984 . doi : 10.1117/12.255236 . S2CID 120514955 .    
  39. Shentov, Ognjan V.; Mitra, Sanjit K.; Alto, Ulrich; Hossen, Abdul N. (1995). "Subbanda DFT. I. Definición, interpretaciones y ampliaciones". Procesamiento de señales . 41 (3): 261– 277. doi : 10.1016/0165-1684(94)00103-7 .
  40. Hassanieh, Haitham; Indyk, Piotr ; Katabi, Dina; Price, Eric (enero de 2012). "Algoritmo simple y práctico para la transformada de Fourier dispersa" (PDF) . Simposio ACM-SIAM sobre algoritmos discretos . Archivado (PDF) del original el 4 de marzo de 2012.(Nota: Véase también la página web de sFFT ).
  41. Schatzman, James C. (1996). "Precisión de la transformada discreta de Fourier y la transformada rápida de Fourier" . SIAM Journal on Scientific Computing . 17 (5): 1150– 1166. Bibcode : 1996SJSC...17.1150S . CiteSeerX 10.1.1.495.9184 . doi : 10.1137/s1064827593247023 . 
  42. Welch, Peter D. (1969). "Análisis de errores de la transformada rápida de Fourier de punto fijo". IEEE Transactions on Audio and Electroacoustics . 17 (2): 151– 157. Bibcode : 1969ITAuE..17..151W . doi : 10.1109/TAU.1969.1162035 .
  43. Ergün, Funda (1995). «Prueba de funciones lineales multivariadas». Actas del vigésimo séptimo simposio anual de la ACM sobre Teoría de la Computación - STOC '95 . Kioto, Japón. págs. 407–416 . doi : 10.1145/225058.225167 . ISBN  978-0897917186. S2CID 15512806 . {{cite book}}: CS1 mantenimiento: falta el editor de ubicación ( enlace )
  44. Nussbaumer, Henri J. (1977). "Filtrado digital mediante transformadas polinomiales". Electronics Letters . 13 (13): 386– 387. Bibcode : 1977ElL....13..386N . doi : 10.1049/el:19770280 .
  45. Mohlenkamp, ​​Martin J. (1999). "Una transformación rápida para armónicos esféricos" (PDF) . Journal of Fourier Analysis and Applications . 5 ( 2–3 ): 159–184 . Bibcode : 1999JFAA....5..159M . CiteSeerX 10.1.1.135.9830 . doi : 10.1007/BF01261607 . S2CID 119482349. Archivado (PDF) del original el 6 de mayo de 2017. Recuperado el 11 de enero de 2018 .  
  46. "libftsh library" . Archivado del original el 23 de junio de 2010. Consultado el 9 de enero de 2007 .
  47. Rokhlin, Vladimir; Tygert, Mark (2006). "Algoritmos rápidos para expansiones de armónicos esféricos" (PDF) . SIAM Journal on Scientific Computing . 27 (6): 1903– 1928. Bibcode : 2006SJSC...27.1903R . CiteSeerX 10.1.1.125.7415 . doi : 10.1137/050623073 . Archivado (PDF) del original el 17 de diciembre de 2014. Recuperado el 18 de septiembre de 2014 . 
  48. Staelin, DH (1969). "Algoritmo de plegado rápido para la detección de trenes de pulsos periódicos" . Actas del IEEE . 57 (4): 724– 725. doi : 10.1109/PROC.1969.7051 . ISSN 0018-9219 . 
  49. Potts, Daniel; Steidl, Gabriele ; Tasche, Manfred (2001). "Transformadas rápidas de Fourier para datos no equiespaciados: un tutorial" (PDF) . En Benedetto, JJ; Ferreira, P. (eds.). Teoría moderna del muestreo: matemáticas y aplicaciones . Birkhäuser . Archivado (PDF) del original el 26 de septiembre de 2007.
  50. Burgess, Richard James (2014). Historia de la producción musical . Oxford University Press. ISBN 978-0199357178Consultado el 1 de agosto de 2019 .
  51. Chu, Eleanor; George, Alan (1999-11-11) [1999-11-11]. "Capítulo 16". Dentro de la caja negra de la FFT: algoritmos de transformada rápida de Fourier en serie y en paralelo . CRC Press . págs. 153–168 . ISBN  978-1-42004996-1.
  52. Fernández-de-Cossio Díaz, Jorge; Fernández-de-Cossio, Jorge (2012-08-08). "Cálculo de la distribución de masa central del pico isotópico mediante transformada de Fourier". Química Analítica . 84 (16): 7052– 7056. doi : 10.1021/ac301296a . ISSN 0003-2700 . PMID 22873736 .  
  53. "La transformada rápida de Fourier y sus aplicaciones", Revista IEEE Signal Processing.
  54. 1 2 Anwar, K., et al. "FFT doble para estándares LTE," IEEE Xplore.
  55. Kijewski-Correa, T.; Kareem, A. (octubre de 2006). "Eficacia de las transformadas de Hilbert y Wavelet para el análisis tiempo-frecuencia" . Journal of Engineering Mechanics . 132 (10): 1037– 1049. doi : 10.1061/(ASCE)0733-9399(2006)132:10(1037) . ISSN 0733-9399 . 
  56. Stern, Richard M. (2020). "Notas sobre transformadas de Fourier de tiempo corto" (PDF) . Archivado (PDF) del original el 8 de febrero de 2025. Recuperado el 8 de febrero de 2025 .
  57. Cormen, Thomas H.; Nicol, David M. (1998). "Realización de FFT fuera de memoria en sistemas de disco paralelos". Computación paralela . 24 (1): 5– 20. CiteSeerX 10.1.1.44.8212 . doi : 10.1016/S0167-8191(97)00114-2 . S2CID 14996854 .  
  58. Dutt, Alok; Rokhlin, Vladimir (1993-11-01). "Transformadas rápidas de Fourier para datos no equiespaciados". SIAM Journal on Scientific Computing . 14 (6): 1368– 1393. Bibcode : 1993SJSC...14.1368D . doi : 10.1137/0914081 . ISSN 1064-8275 . 
  59. Rockmore, Daniel N. (2004). "Avances recientes y aplicaciones en FFT de grupo". En Byrnes, Jim (ed.). Álgebra no conmutativa computacional y aplicaciones . Serie científica de la OTAN II: Matemáticas, física y química. Vol. 136. Springer Netherlands. pp. 227–254 . CiteSeerX 10.1.1.324.4700 . doi : 10.1007/1-4020-2307-3_9 . ISBN    978-1-4020-1982-1. S2CID 1412268 . 
  60. Ryo, Asaka; Kazumitsu, Sakai; Ryoko, Yahagi (2020). "Circuito cuántico para la transformada rápida de Fourier" . Procesamiento de información cuántica . 19 (277): 277. arXiv : 1911.03055 . Bibcode : 2020QuIP...19..277A . doi : 10.1007/s11128-020-02776-5 . S2CID 207847474 . 
  61. "Bibliotecas de rendimiento de Arm" . Arm . 2020. Consultado el 16 de diciembre de 2020 .
  62. "Lista completa de bibliotecas FFT de C/C++" . Comunidad VCV . 5 de abril de 2020. Consultado el 3 de marzo de 2021 .

Lecturas adicionales

  • Brigham, Elbert Oran (1974). La transformada rápida de Fourier (  ed. posterior). Englewood Cliffs, NJ: Prentice-Hall . ISBN 978-0-13-307496-3.
  • Briggs, William L.; Henson, Van Emden (1995). La DFT: Manual del propietario de la transformada discreta de Fourier . Filadelfia: Society for Industrial and Applied Mathematics . ISBN 978-0-89871-342-8.
  • Chu, Eleanor; George, Alan (2000). Dentro de la caja negra de la FFT: algoritmos de transformada rápida de Fourier en serie y en paralelo . Serie de matemáticas computacionales. Boca Raton, Florida. Londres: CRC Press . ISBN 978-0-8493-0270-1.
  • Cormen, Thomas H .; Leiserson, Charles E .; Rivest, Ronald L .; Stein, Clifford (2001). «Capítulo 30: Polinomios y la FFT». Introducción a los algoritmos (2.ª  ed.). Cambridge (Massachusetts): MIT Press . ISBN 978-0-262-03293-3.
  • Elliott, Douglas F.; Rao, K. Ramamohan (1982). Transformaciones rápidas: algoritmos, análisis, aplicaciones . Nueva York: Academic Press . ISBN 978-0-12-237080-9.
  • Guo, H.; Sitton, GA; Burrus, CS (1994). "La transformada discreta de Fourier rápida". Actas de ICASSP '94. Conferencia Internacional IEEE sobre Acústica, Habla y Procesamiento de Señales . Vol.  iii. IEEE . págs.  III/445–III/448. doi : 10.1109/ICASSP.1994.389994 . ISBN 978-0-7803-1775-8. S2CID 42639206 . 
  • Johnson, Steven G.; Frigo, Matteo (enero de 2007). "Una FFT de raíz dividida modificada con menos operaciones aritméticas" ( PDF) . IEEE Transactions on Signal Processing . 55 (1): 111– 119. Bibcode : 2007ITSP...55..111J . CiteSeerX 10.1.1.582.5497 . doi : 10.1109/TSP.2006.882087 . ISSN 1053-587X . S2CID 14772428. Archivado (PDF) del original el 26 de mayo de 2005.   
  • Nussbaumer, Henri J. (1990). Algoritmos de convolución y transformada rápida de Fourier . Serie Springer en ciencias de la información (2., corr. y  edición actualizada). Berlín Heidelberg: Springer . ISBN 978-3-540-11825-1.
  • Press, William H.; Teukolsky , Saul A .; Vetterling, William T.; Flannery, Brian P. (2007). «Capítulo 12. Transformada rápida de Fourier». Recetas numéricas: el arte de la computación científica (PDF) . Recetas numéricas (3.ª  ed.). Cambridge: Cambridge University Press . págs. 600–639 . ISBN  978-0-521-88068-8.
  • Singleton, R. (junio de 1969). "Una breve bibliografía sobre la transformada rápida de Fourier". IEEE Transactions on Audio and Electroacoustics . 17 (2): 166– 169. Bibcode : 1969ITAuE..17..166S . doi : 10.1109/TAU.1969.1162040 . ISSN 0018-9278 . (Nota: Contiene una extensa bibliografía.)
  • Prestini, Elena (2004). La evolución del análisis armónico aplicado: modelos del mundo real . Análisis armónico aplicado y numérico. Boston; Berlín: Springer Media . Sección 3.10: Gauss y los asteroides: historia de la FFT. ISBN 978-0-8176-4125-2.
  • Van Loan, Charles F. (1992). Marcos computacionales para la transformada rápida de Fourier . Fronteras en matemáticas aplicadas. Filadelfia: Sociedad de Matemáticas Industriales y Aplicadas . ISBN 978-0-89871-285-8.
  • Terras, Audrey (1999). Análisis de Fourier en grupos finitos y aplicaciones . Textos para estudiantes de la London Mathematical Society. Cambridge (GB): Cambridge University Press . ISBN 978-0-521-45718-7.(Capítulo 9 y otros capítulos)
  • Transformada rápida de Fourier para la multiplicación de polinomios algoritmo rápido de Fourier 
  • Transformada rápida de Fourier (FFT): programación de FFT en C++ : el algoritmo de Cooley-Tukey  
  • Documentación en línea, enlaces, libro y código
  • Sri Welaratna, " Treinta años de analizadores FFT Archivado el 12/01/2014 en Wayback Machine ", Sound and Vibration (enero de 1997, número del 30 aniversario) una revisión histórica de los dispositivos FFT de hardware 
  • ALGLIB FFT Code : una biblioteca multilingüe (VBA, C++, Pascal, etc.) para análisis numérico y procesamiento de datos con licencia dual/GPL. 
  • SFFT: Transformada rápida de Fourier dispersa Algoritmo FFT disperso (tiempo sublineal) del MIT , sFFT, e implementación. 
  • VB6 FFT : una implementación de biblioteca optimizada para VB6 con código fuente. 
  • Tutorial interactivo de FFT : una introducción visual e interactiva a las transformadas de Fourier y los métodos FFT. 
  • Introducción al análisis de Fourier de series temporales : tutorial sobre cómo utilizar la transformada de Fourier en el análisis de series temporales.