Você está na página 1de 2

Aplicativo Java para Computação de FFT (Fast Fourier Transform)

com Representação Gráfica

Oziel O. Carneiro, Olavo Nylander. B. Neto, Igor Ruiz Gomes


Centro Universitário do Pará (CESUPA) – Área de Ciências Exatas e Tecnologia (ACET)
Laboratório de Computação Natural (LCN) – Grupo de Estudos Temáticos de Matemática Computacional
(MatComp-CESUPA) - 66.060- 230, Belém – Pará – Brasil
Email: {ozielcarneiro,olavo.nylander, ruiz.igor}@gmail.com

RESUMO

O proccessamento digital de sinais é uma alternativa bastante usada uma vez que
processadores digitais modernos oferecem velocidade, poder computacional e flexibilidade para
representar sistemas reais [4]. A computação da Transformada Discreta de Fourier (DFT) é de
extrema utilidade para o processamento digital de sinais. Os algoritmos Fast Fourier Transform
(FFT) oferecem uma solução otimizada para tal tarefa. A DFT é aplicável quando a função a ser
transformada é discreta e tem comprimento finito. A DFT não apenas representa um sinal
discreto no domínio da frequência, mas também é útil para tarefas como design de filtros de
resposta ao impulso finita (filtros FIR), análise espectral e solução de equações diferenciais
parciais [3].
Sendo N o comprimento do sinal a ser transformado, o algoritmo FFT proposto por Tukey
and Cooley em 1965 [1] reduz a ordem do número de computações de O(N²) para O(N log2N),
diminuindo o custo computacional significantemente, a medida que N aumenta. O segredo para
tal redução está na possibilidade de calcular a transformada de Fourier de um sinal como uma
soma das transformadas de segmentos menores do sinal, uma vez que a transformada de Fourier
e a DFT são operadores lineares. Existem dois tipos básicos de algoritmos FFT, decimação no
tempo (DIT) e decimação na frequência (DIF). O algoritmo DIT funciona da seguinte maneira:
Considerando um vetor x[k] de comprimento N igual a uma potência de 2, divide-se este vetor
em 2 vetores menores, separando em cada qual os elementos de índices pares e ímpares. Então,
utiliza-se as seguintes equações:
𝑋 𝑘 = 𝑋0 𝑘 + 𝑊𝑁−𝑘 𝑋1 𝑘 (1)
𝑋 𝑘 + 𝑁/2 = 𝑋0 𝑘 − 𝑊𝑁−𝑘 𝑋1 𝑘 (2)
onde X[k] é a transformada de x[k], X0[k] e X1[k] as transformadas dos vetores contendo os
elementos de índices pares e ímpares respectivamente, 𝑊𝑁−𝑘 = 𝑒 −𝑗 2𝜋𝑘 /𝑁 , também chamado de
𝑁
“twiddle factor”, e o índice k tal que 0 ≤ 𝑘 ≤ 2 − 1. Faz-se então de forma recursiva o cálculo
de X0[k] e X1[k] até que se tenha vetores de comprimento igual a 2, assim poderão ser usadas as
equações:
𝑋𝐿2 0 = 𝑥𝐿2 0 + 𝑊𝑁−0 𝑥𝐿2 1 (3)
𝑋𝐿2 1 = 𝑥𝐿2 0 − 𝑊𝑁−0 𝑥𝐿2 1 (4)
onde xL2 é o vetor de comprimento 2 e XL2 sua transformada. Então retornando a recursividade
ao início da pilha computa-se X[k]. O algoritmo DIF funciona similarmente ao DIT a única
diferença é que a divisão do vetor é feita de forma que o primeiro vetor contém a primeira
metade de elementos e o segundo o restante [3].
O Aplicativo gerado pretende computar, a partir de valores passados como entrada, a FFT
com o algoritmo DIT e apresentar um gráfico que mostre o resultado. O produto foi programado
em Java® [4] utilizando a API JFreeChart [2] para a elaboração do gráfico.
A interface gráfica de usuário (GUI) permite a configuração das seguintes opções: a) método
de entrada, podendo ser manual em um campo de texto ou através de arquivo de texto, cujo
endereço deverá ser indicado pelo usuário; b) método de saída, podendo-se visualizar o vetor de
resultado em um campo de texto na GUI, em arquivo especificado pelo usuário ou na forma de
gráfico, sendo possível a escolha simultânea das opções; e c) forma de apresentação dos valores
numéricos, permitindo escolher valor absoluto, parte real, parte imaginária ou valor complexo.

825
Assim o aplicativo oferece simplicidade, funcionalidade e agilidade para o cálculo da FFT
oferecendo uma alternativa à utilização de programas mais complexos e mais custosos
computacionalmente. Por exemplo, para inicializar o aplicativo leva entre 10 a 15% do tempo
que a solução mais utilizada gasta. É de interesse futuro transformar o aplicativo em uma versão
para web, a fim de disponibilizar, publicar e divulgar a ferramenta.

Fig. 1: Imagens da Interface de Usuário do Programa: (a) GUI principal; (b) Gráfico gerado
pela aplicação.

Palavras-chave: Fast Fourier Transform, Aplicativo

Referências
[1] J. W. Cooley e J. W. Tukey, “An Algorithm for the Machine Calculation of Complex
Fourier Series,” Mathematics of Computation, Vol. 19, pp. 297-301, April 1965

[2] JFREE.ORG, JFreeChart. 2009. Disponível em: http://www.jfree.org/jfreechart/. Acesso


em: 10 de abr. 2010.

[3] B. P. Lathi e R. A. Green, Digital Signal Processing, cópia não publicada cedida pelo autor,
Berkeley-Cambridge Press, 2009

[4] A. V. Oppenheim e A. S. Willsky, Signals and Systems 2nd Edition, Prentice Hall, Inc. 1997

[5] ORACLE CORPORATION, Java SE Development Kit. 2010. Disponível em:


http://java.sun.com/javase/. Acesso em: 15 de mar. 2010.

826

Você também pode gostar