FFT

FFT

Médio

Introdução

Transformada de Fourier

A transformada de Fourier aparece com frequência na física e na matemática, o que faz com que tenha também muitos usos no dia a dia.

Em resumo, a transformada de Fourier recebe um sinal de entrada, muitas vezes nos domínios do tempo ou do espaço, e transforma-o para o domínio da frequência. E, mais concretamente, quando o sinal de entrada é um amontoado (ou seja, uma sobreposição) de frequências diferentes, a transformada separa as frequências individuais e mostra a força relativa de cada uma.

Isto faz da transformada uma ferramenta principal no processamento de sinais (por exemplo, filtragem, compressão, etc.) e em muitas aplicações de ciência de dados. Por isso, é talvez mais usada do que se poderia imaginar à primeira vista, o que também a torna um exemplo perfeito de onde os números imaginários se revelam indispensáveis, dado que a saída da transformada de Fourier é, em geral, um número complexo.

Embora a transformada de Fourier tenha uma formulação integral, nós somos digitais, por isso estamos interessados na versão discreta. A dedução da transformada está além do âmbito deste exercício, mas a transformada discreta direta (para o domínio da frequência) tem a seguinte forma: Xₖ = Σ xₙ * ℯ^(-2iπk * n/N) Aqui, o somatório percorre n, e N é o número de amostras, k é a frequência, i é a unidade imaginária e xₙ é uma amostra individual.

Transformada Rápida de Fourier

Embora seja extremamente útil, a transformada de Fourier, implementada de forma ingénua, é um pouco lenta (O(n²)). A transformada rápida de Fourier (FFT) é um algoritmo que acelera isto drasticamente. Isto é feito tipicamente através de uma estratégia de divisão e conquista, que explora algumas simetrias na formulação e resulta numa complexidade assintótica de O(Nlog(N)). Esta aceleração melhora bastante a praticidade e o leque de aplicações adequadas à transformada.

Instruções

Um amigo teu é engenheiro de som e pediu-te ajuda para programar uma Transformada de Fourier para um software proprietário que está a desenvolver. Como queres fazer isto bem, vais começar por implementar a Transformada de Fourier Discreta (DFT) em todo o seu esplendor ingénuo. Isto poderá depois ser usado para testar a correção do teu objetivo final, a Transformada Rápida de Fourier (FFT).

1. DFT

Implementa a DFT.

Repara que isto tem complexidade O(n²), porque obténs um k numa passagem por todos os n, e vais querer um vetor Xₖ com o mesmo comprimento do vetor do sinal Xₙ (para invertibilidade), por isso, percorrer n pontos n vezes é O(n²).

2. FFT

Implementa a FFT.

Note

Há muitos recursos para encontrares mais detalhes sobre as particularidades deste algoritmo, por isso não hesites em fazer alguma pesquisa.

Editar via GitHub A ligação abre numa nova janela ou separador
Julia Exercism

Estás pronto para começar FFT?

Inscreve-te no Exercism para aprenderes e dominares Julia com 35 conceitos128 exercícios, e mentoria humana real, tudo grátis.