# Transformada rápida de Fourier

Em matemática, engenharia e em áudio profissional, a Transformada rápida de Fourier (do inglês: Fast Fourier Transform, abreviado FFT) é um algoritmo que calcula a Transformada discreta de Fourier (DFT) e a sua inversa (Teorema inverso de Fourier), criado pelo estatístico estadunidense John Tukey. A análise de Fourier converte um sinal do domínio original para uma representação no domínio da frequência e vice-versa. De grande importância em uma vasta gama de aplicações, de Processamento digital de sinais para a resolução de equações diferenciais parciais a, algoritmos para multiplicação de grandes inteiros. A transformada é amplamente utilizadas na engenharia, ciência e matemática. As ideias básicas foram popularizadas em 1965, mas alguns algoritmos foram obtidos em 1805.
Uma Transformada rápida de Fourier calcula rapidamente essas transformações fatorizando a matriz da Transformada discreta de Fourier em um produto de fatores esparsos (principalmente zero). Como resultado, ele consegue reduzir a complexidade de calcular a Transformada discreta de Fourier de $O\left(N^{2}\right)$, ou seja na ordem de n elevado ao quadrado, que surge se alguém simplesmente aplica a definição de Transformada discreta de Fourier, a $O(N\log N)$, onde $N$ é o tamanho dos dados.
Em 1994, Gilbert Strang descreveu a Transformada rápida de Fourier como "O algoritmo numérico mais importante da nossa vida", e foi incluída no Top 10 Algorithms of 20th Century pela revista IEEE Computing in Science & Engineering.

## História

O desenvolvimento de algoritmos rápidos para Transformada discreta de Fourier pode ser rastreado até o trabalho não publicado de Gauss em 1805, quando ele precisou interpolar a órbita dos asteroides Pallas e Juno de observações de amostras. Seu método foi muito semelhante ao publicado em 1965 por James William Cooley e John Wilder Tukey, que são geralmente creditados pela invenção do moderno algoritmo de Transformada rápida de Fourier genérico. Enquanto o trabalho de Gauss antecedeu os resultados de Fourier em 1822, ele não analisou o tempo de computação e eventualmente, usou outros métodos para atingir seu objetivo.
Entre 1805 e 1965, algumas versões da Transformada rápida de Fourier foram publicadas por outros autores. Frank Yates, em 1932, publicou sua versão chamada algoritmo de interação, que forneceu uma computação eficiente das transformadas de Hadamard e Walsh. O algoritmo de Yates ainda é usado no campo do projeto estatístico e análise de experimentos. Em 1942, G. C. Danielson e Cornelius Lanczos publicaram sua versão para computar a Transformada discreta de Fourier para cristalografia de raios X, um campo onde o cálculo das transformadas de Fourier apresentava um formidável obstáculo. Embora muitos métodos no passado tenham se concentrado em reduzir o fator constante para computação de $O\left(N^{2}\right)$ aproveitando as "simetrias", Danielson e Lanczos perceberam que usando a "periodicidade" e aplicando um "truque de duplicação" poderiam obter o tempo de execução $O(N\log N)$.
James Cooley e John Tukey publicaram uma versão mais geral da Transformada rápida de Fourier em 1965 que é aplicável quando N é composto e não necessariamente uma potência de 2. Tukey teve a ideia durante uma reunião do Comitê Consultivo Científico do presidente Kennedy, onde um tópico de discussão envolveu a detecção de testes nucleares pela União Soviética, através da instalação de sensores para cercar o país de fora. Para analisar a saída desses sensores, seria necessário um algoritmo de transformação rápida de Fourier. Em discussão com Tukey, Richard Garwin reconheceu a aplicabilidade geral do algoritmo não apenas a problemas de segurança nacional, mas também a uma ampla gama de problemas, incluindo um de interesse imediato para ele, determinar as periodicidades das orientações de spin em um cristal 3-D de hélio-3. Garwin deu a ideia de Tukey para Cooley (ambos trabalharam nos laboratórios Watson da IBM) para implementação. Cooley e Tukey publicaram o artigo em um período relativamente curto de seis meses. Como Tukey não trabalhava na IBM, a patenteabilidade da ideia foi posta em dúvida e o algoritmo entrou no domínio público, o que, através da revolução da computação na próxima década, fez da FFT um dos algoritmos indispensáveis ​​no processamento digital de sinais.

## Visão Geral

A Transformada discreta de Fourier é obtida pela decomposição de uma sequência de valores em componentes de diferentes frequências. Esta operação é útil em muitos campos, entretanto calculá-la diretamente da definição é frequentemente lenta demais para ser prática. Uma Transformada rápida de Fourier é uma maneira de calcular o mesmo resultado mais rapidamente: calcular a Transformada discreta de Fourier de n pontos da maneira ingênua, usando a definição, leva operações aritméticas de $O\left(N^{2}\right)$, enquanto uma Transformada rápida de Fourier pode computar a mesma Transformada discreta de Fourier em apenas $O(N\log N)$ operações. A diferença de velocidade pode ser enorme, especialmente para conjuntos de dados longos em que N pode estar na casa dos milhares ou milhões. Na prática, o tempo de computação pode ser reduzido em várias ordens de magnitude em tais casos, e a melhoria é aproximadamente proporcional a N/log N. Essa grande melhoria tornou o cálculo da Transformada discreta de Fourier prático; As Transformadas rápidas de Fourier são de grande importância para uma ampla variedade de aplicações, desde processamento digital de sinais e resolução de equações diferenciais parciais até algoritmos para rápida multiplicação de inteiros grandes.

## Algoritmo

O algoritmo baseia-se no chamado método de dobramentos sucessivos, onde podemos expressar a transformada de Fourier como sendo
$F(u)={\frac {1}{N}}\sum _{x=0}^{N-1}f(x)W_{N}^{ux}\,\!$
onde
$W_{N}^{ux}=e^{-j2\pi u\cdot x/N}\,\!$.
Assumimos que $N=2^{n}\,\!$ onde $n\,\!$ é um inteiro positivo.
Portanto, $N\,\!$ pode ser escrito como $N=2M\,\!$ onde $M\,\!$ é um inteiro positivo.
Logo, a transformada de Fourier escrita inicialmente, pode ser reescrita como
$F(u)={\frac {1}{2M}}\sum _{x=0}^{2M-1}f(x)W_{2M}^{ux}\,\!$
A soma escrita acima pode ser separada em duas, da seguinte maneira
$F(u)={\frac {1}{2}}\left[{\frac {1}{M}}\sum _{x=0}^{M-1}f(2x)W_{M}^{u(2x)}+{\frac {1}{M}}\sum _{x=0}^{M-1}f(2x+1)W_{2M}^{u(2x+1)}\right]\,\!$
Considerando que $W_{2M}^{2ux}=W_{M}^{ux}$, nomeamos a primeira soma por
$F_{par}(u)={\frac {1}{M}}\sum _{x=0}^{M-1}f(2x)W_{M}^{ux}\,\!$ para valores de $u=0,1,2,...,M-1\,\!$, e
E a segunda soma por
$F_{impar}(u)={\frac {1}{M}}\sum _{x=0}^{M-1}f(2x+1)W_{2M}^{ux}\,\!$ para valores de $u=0,1,2,...,M-1\,\!$
Podemos reescrever a transformada de Fourier como sendo
$F(u)=F_{par}(u)+F_{impar}(u)W_{2M}^{u}\,\!$
Uma vez que $W_{M}^{u+M}=W_{M}^{u}\,\!$ e $W_{2M}^{u+M}=-W_{2M}^{u}\,\!$.
A recombinação da equação $F_{par}(u)\,\!$ com a última nos fornece
$F(u+M)=F_{par}(u)-F_{impar}(u)W_{2M}^{u}\,\!$
A observação dessas equações nos fornece suas propriedades. Dentre elas vemos:
* Uma transformada de $N\,\!$ pontos pode ser computada pela divisão da expressão original em duas partes.

## Aplicações

A importância da FFT deriva do fato de que, no processamento de sinais e no processamento de imagens, o trabalho no domínio da freqüência é igualmente viável computacionalmente como o trabalho no domínio temporal ou espacial. Algumas das aplicações importantes da FFT incluem:
* Multiplicação rápida de números inteiros e polinomiais
* Multiplicação eficiente de vetores matriciais para Toeplitz, circulantes e outras matrizes estruturadas
* Algoritmos de filtragem
* Algoritmos rápidos para transformações discretas de cosseno ou seno (por exemplo, Fast DCT usado para codificação JPEG, MP3 / MPEG)
* Aproximação rápida de Chebyshev
* Transformada Hartley discreta rápida
* Resolvendo Equações Diferenciais
* Computação de distribuições isotópicas.

## Implementações computacionais

* ALGLIB – C++ and C# library with real/complex FFT implementation.
* FFTW "Fastest Fourier Transform in the West" – C library for the discrete Fourier transform (DFT) in one or more dimensions.
* FFTS – The Fastest Fourier Transform in the South.
* FFTPACK – another Fortran FFT library (public domain)
* Math Kernel Library

## Veja também

* Algoritmo Cooley–Tukey FFT
* Algoritmo Prime-factor FFT
* Algoritmo Bruun's FFT
* Algoritmo Rader's FFT
* Algoritmo Bluestein's FFT
* Goertzel algorithm – Computes individual terms of discrete Fourier transform