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