Uma introdução interativa às transformadas de Fourier

Jez Swanson

Traduzido por Jean Oliveira Rodrigues de Araujo

Transformadas de Fourier são ferramentas utilizadas em vários contextos. Essa é uma explicação do que uma transformada de Fourier faz, e algumas maneiras diferentes que elas podem ser úteis. E como você pode fazer coisas bonitas com elas, como isto:

Irei explicar como essa animação funciona, e no caminho explicar as transformadas de Fourier!

No final, você deve ter uma boa noção sobre

Iremos deixar a matemática e as equações de lado por enquanto. Tem bastante matemática interessante por trás delas, mas é melhor começar com o que elas fazem e motivos para você utilizá-las. Se você quiser saber mais sobre a teoria, há algumas sugestões de leitura abaixo!

Então, o que é?

De maneira simples, a transformada de Fourier é uma maneira de dividir algo em várias ondas senoidais. Como de costume, o nome vem de uma pessoa, que viveu a bastante tempo atrás, chamada de Fourier.

Começaremos com alguns exemplos simples e depois faremos outros exemplos mais completos. Primeiro olharemos para ondas - padrões que se repetem com o tempo.

Um exemplo de onda:

Este padrão ondulado pode ser dividido em ondas senoidais. Isto é, quando nós adicionamos as duas ondas senoidais, obteremos a onda original novamente.

A transformada de Fourier é uma maneira de nós, a partir de uma onda combinada, obter cada uma das ondas senoidais de volta. Neste exemplo, você quase consegue fazer isso na sua cabeça, só de olhar para a onda original.

Por quê? Diversas coisas na vida real interagem com base nessas ondas senoidais. Nós geralmente as chamamos de frequência da onda.

O exemplo mais óbvio é o som – quando ouvimos um som, só não ouvimos essa linha sinuosa, mas sim as diferentes frequências que compõem o som.

Ser capaz de dividi-las em um computador nos dá entendimento do que uma pessoa realmente ouve. Nós podemos entender o quão alto ou baixo um som é, ou descobrir qual nota que o som está.

Também podemos usar este processo em ondas que não parecem que são feitas de ondas senoidais.

Vamos dar uma olhada nesta. É chamada de onda quadrada.

Pode não parecer, mas também podemos dividi-la em ondas senoidais.

Nós precisamos de muitas desta vez – tecnicamente, uma quantidade infinita delas para representar. Na medida em que adicionamos mais e mais ondas senoidais, o padrão se aproxima cada vez mais da onda quadrada que começamos.

Arraste o slider acima para alterar a quantidade de ondas senoidais.

Visualmente, você perceberá que as primeiras ondas senoidais são as que mais fazem diferença. Com o slider na metade, temos a forma geral da onda, mas está toda ondulada. Só precisamos das pequenas que restaram para aplanar as ondulações.

Quando você ouvir a onda, você escutará o som ficando mais baixo porque estamos removendo as frequências mais altas.

Este processo funciona com qualquer linha que se repete. Tente desenhar uma!

Desenhe aqui!

Mova o slider para ver como, na medida em que adicionamos mais ondas senoidais, fica cada vez mais parecido com seu desenho

Novamente, apesar das ondulações extra, a onda é bastante parecida apenas com metade das ondas senoidais.

Nós podemos aproveitar o fato de que a onda é bastante parecida, a nosso favor. Ao utilizar uma transformada de Fourier, podemos pegar as partes importantes de um som, armazenar somente essas partes e terminar com algo bem parecido com o som original.

Normalmente, em um computador, armazenamos uma onda como uma série de pontos.

Em vez disso, podemos representá-la com várias ondas senoidais. Assim poderemos comprimir o som ao ignorar as frequências menores. Nosso resultado não será o mesmo, mas soará bem parecido com uma pessoa.

Isto é essencialmente o que MP3s fazem, só que eles são mais espertos sobre quais frequências manter e quais jogar fora.

Então, neste caso, podemos utilizar transformadas de Fourier para entender as propriedades fundamentais de uma onda, e usar este conhecimento para outras coisas, como compressão.

Ok, nos aprofundaremos mais na transformada de Fourier. Esta próxima parte parece bem legal, mas também lhe dá maior entendimento sobre o que a transformada de Fourier faz. Mas principalmente parece legal.

Epiciclos

No começo, eu disse que dividia coisas em ondas senoidais. A questão é, as ondas senoidais que são criadas não são ondas senoidais comuns, mas sim ondas 3D. Você pode simplesmente chamá-las de "espirais".

Se você as olhar de lado, elas parecem como ondas senoidais. Já olhando de frente, parecem com círculos.

Até então, tudo que temos feito só precisou de ondas senoidais 2D. Quando aplicamos a transformada de Fourier em ondas 2D, as partes complexas se anulam e simplesmente terminamos com ondas senoidais.

Mas podemos usar as ondas 3D para fazer coisas legais, que nem isto:

O que está acontecendo aqui?

Bem, podemos pensar no desenho como uma forma 3D pelo jeito que ele se move com o tempo. Se você imaginar a mão sendo desenhada por uma pessoa, as três dimensões representam onde a ponta do lápis dela está naquele momento. As dimensões x e y nos dizem a posição, e a dimensão tempo é o tempo naquele momento.

Agora que temos um padrão 3D, não podemos usar as ondas senoidais 2D para representá-lo. Não importa quantas ondas senoidais 2D adicionarmos, nós nunca obteremos algo 3D. Então precisamos de outra coisa.

O que podemos usar são as ondas senoidais em espirais 3D de antes. Se adicionarmos várias dessas, podemos obter algo parecido com o nosso padrão 3D.

Lembre-se, essas ondas se parecem com círculos quando as olhamos de frente. O nome para o padrão de um círculo se movendo ao redor de outro círculo é epiciclo.

Use o slider acima para controlar a quantidade de círculos.

Como antes, obtemos uma boa aproximação de nosso padrão apenas com alguns círculos. Considerando que esta é uma forma razoavelmente simples, tudo o que os últimos fazem, é deixar as pontas um pouco mais afiadas.

Tudo isto se aplica a qualquer desenho! Agora é sua vez de brincar.

Desenhe aqui!

Use o slider para controlar a quantidade de círculos utilizados em seu desenho

Novamente, você verá que para a maioria das formas, podemos aproximá-las razoavelmente bem com poucos círculos, em vez de salvar todos os pontos.

Podemos usar isso para dados reais? Bem, podemos! Na verdade, temos outro formato de dados chamado SVG, que provavelmente faz um trabalho melhor para as formas que queremos criar. Então, no momento, isto serve só para fazer pequenas gifs legais.

Entretanto, há outro tipo de dados visuais que utiliza transformadas de Fourier.

JPEGs

Você sabia que as transformadas de Fourier também podem ser usadas em imagens? Na verdades, usamos o tempo todo, porque é assim que JPEGs funcionam! Nós aplicamos os mesmos princípios para imagens – dividimos algo em várias ondas senoidais, e então armazenamos apenas as importantes.

Agora que estamos lidando com imagens, nós precisamos de outro tipo de ondas senoidais. Nós precisamos de algo que com qualquer imagem, podemos adicionar várias ondas senoidais para obter a imagem original de volta.

Para isto, cada uma de nossas ondas senoidais serão imagens também. No lugar de uma onda, é uma linha, agora temos imagens com seções pretas e brancas. Para representar o tamanho de uma onda, cada imagem terá mais ou menos contraste.

Também podemos utilizá-las para representar cores da mesma maneira, mas no começaremos com imagens em preto-e-branco. Para representar imagens sem cor, precisamos de algumas imagens de ondas horizontais,

Junto de imagens de ondas verticais.

Somente imagens horizontais e verticais não são suficiente parar representar os tipos de imagens que queremos obter. Também precisamos de algumas extras que você obtêm multiplicando as duas.

×
=

Para uma imagem 8x8, aqui estão todas as imagens que precisamos.

Se pegarmos as imagens, ajustar seu contraste corretamente e então as adicionar, podemos criar qualquer imagem.

Começaremos com esta letra 'A'. É bem pequena, mas precisamos que seja pequena, caso contrário, teremos muitas outras imagens.

Na medida em que adicionamos mais e mais dessas imagens, terminamos com algo que se parece cada vez mais com a verdadeira imagem. Mas imagino que você vê o padrão aqui, na medida em que obtemos uma aproximação razoável com apenas algumas delas.

Para imagens JPEG de verdade, há apenas alguns detalhes a mais.

A imagem é separada em pedaços 8x8 e cada pedaço é dividido separadamente. Usamos um conjunto de frequências para determinar o quão claro ou escuro cada pixel é, e depois outros dois conjuntos para a cor, um para vermelho-verde, e outro para azul-amarelo. O número de frequência que utilizamos para cada pedaço determina a qualidade do JPEG.

Aqui temos uma imagem JPEG de verdade, com zoom para vermos os detalhes. Quando nós alteramos os níveis de qualidade, podemos ver o processo acontecendo.

Conclusão

Então, recapitulando:

Isto é só a ponta do iceberg das aplicações! A transformada de Fourier é uma ferramenta extremamente poderosa, porque dividir algo em frequências é bem fundamental. Elas são utilizadas em várias áreas, incluindo design de circuitos, sinais de aparelhos móveis, imagem por ressonância magnética e física quântica!

Questões para os curiosos

Pulei a maior parte da matemática aqui, mas se você estiver interessado nos princípios por baixo das funcionalidades, algumas questões que você pode usar para se guiar em sua pesquisa:

'Leitura' adicional

Para aprender mais, aqui estão alguns recursos que você pode checar:

An Interactive Guide To The Fourier Transform
Um ótimo artigo que explora mais a parte matemática do que acontece.

But what is the Fourier Transform? A visual introduction.
Um ótimo vídeo de YouTube pelo 3Blue1Brown, também explicando a matemática das transformadas de Fourier numa perspectiva de áudio.

A Tale of Math & Art: Creating the Fourier Series Harmonic Circles Visualization
Outro artigo explicando como você pode usar epiciclos para desenhar uma trajetória, explicado de uma perspectiva de álgebra linear.

Fourier transform (Wikipedia)
E claro, o artigo da Wikipédia é muito bom também.

O autor

Sou Jez! Trabalho em tempo integral em uma empresa de busca na área da Baía de São Francisco, e no meu tempo livre gosto de fazer jogos e códigos interativos como este!

Esta página é open-source, você pode checar o código no GitHub! Se você tem algum feedback ou quer perguntar alguma coisa, sinta-se livre para me mandar um e-mail em fourier [at] jezzamon [dot] com ou me enviar um tweet em Twitter.

Se você quer ver mais do meu trabalho, visite minha homepage, e se quiser saber o que farei em seguida, pode seguir minha conta no Twitter, @jezzamonn!