(Fast Fourier Transform) com

Propaganda
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
Download