Você está na página 1de 9

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

CURSO DE ENGENHARIA DA COMPUTAO






ADENILSON D. C. MUMBELLI
EDEGAR KORB
LUIS FELIPE BENEDITO





SISTEMAS LINEARES
FAST FOURIER TRANSFORM - FFT








PATO BRANCO
2012
1. Introduo

A transformada de Fourier (Transform Fourier - TF) uma ferramenta amplamente
empregada em processamento de sinais de sons e imagens, pois sua aplicao torna
algumas operaes mais simples e facilita o entendimento j que ao aplicar a
transformada de Fourier o domnio restrito frequncia. Este tipo de transformada
consiste em decompor um sinal em suas componentes elementares seno e cosseno j
que qualquer sinal pode ser representado pela soma de senos e cossenos conforme
demonstrado pelo matemtico e fsico francs Jean Baptiste Joseph Fourier (1768-
1830).
Existe ainda a transformada discreta de Fourier (Discret Fourier Transform - DFT),
esta por sua vez utiliza um nmero finito de pontos no domnio tempo para definir
uma representao, tambm discreta, do sinal no domnio da frequncia.
Contudo, o estudo tem por objetivo entender um pouco sobre os algoritmos de
transformada rpida de Fourier (Fast Fourier Transform FFT) aplicado para computar
a transformada discreta de Fourier e sua inversa.
A FFT de grande importncia para uma variedade de aplicaes como o
processamento digital de imagens, a resoluo de equaes diferenciais parciais e
tambm algoritmos para multiplicao rpida de nmeros inteiros muito grandes.
O algoritmo mais conhecido para a transformada rpida de Fourier denominado
Cooley-Tukey, que se baseia na ideia de diviso e conquista.


2. Representao Matemtica

A FFT implementada com o objetivo de diminuir a complexidade (em relao ao
tempo) necessria para calcular uma DFT, buscando sempre aplicaes em tempo real.
O nmero de operaes realizadas no clculo da DFT atravs da definio de
ordem N, ou seja, para cada N valores de u, a expanso F(u) requer N multiplicaes
complexas de x(n) por W
ux
alm de N-1 adies dos resultados.
Aplicar a FFT reduzir o nmero de operaes necessrias no clculo da DFT, j
que alguns termos podem ser calculados uma nica vez e armazenados para
manipulaes futuras. Portando, as multiplicaes de x(n) que antes eram levadas em
considerao, agora so desconsideradas baixando a ordem de complexidade do
clculo N.LogN.
No quadro abaixo podemos visualizar quo vantajosa pode ser a aplicao desde
algoritmo:

N N (Definio) N.Log
2
N (FFT) Vantagem
2 4 2 2
4 16 8 2
8 64 24 2,67
16 256 64 4
32 1024 160 6,4
64 4096 384 10,67
128 16384 896 18,29
Quadro 1: Vantagem da aplicao da FFT.


2.1. Decimao no tempo (Decimation in time DIT)

Para simplificar, admitimos que N=2
n
, com n inteiro positivo, este algoritmo
decompe do clculo da DFT de comprimento N em DFTs mais curtas, dividindo
sucessivamente a sequncia de entrada em duas subsequncias com metade do
comprimento, uma referente s amostras com ndice par e outra com amostras com
ndice mpar.
A execuo do algoritmo FFT segue a seguinte expresso matemtica:

() ()


() ()

()

( )

()


() ()[

( )[

1
notando que


( )

, ento:
() ()

( )


() ()

() 2

em que G(k) e H(k) so DFTs de comprimento N/2, e so referente, respectivamente
s entradas de ndice par e mpar.
Considerando N=8 e reconhecendo que G(k) e H(k) so peridicas com perodo
N/2, a decomposio descrita pelas expresses matemticas acima tem a seguinte
caracterstica:


Figura 1: Decomposio da DFT de comprimento 8.

Computacionalmente, esta decomposio j representa um ganho significativo,
pois substitui uma estrutura de ordem proporcional a N
2
por uma de ordem
proporcional a 2(N/2)+N=N/2+N que menor que N.
O clculo de cada coeficiente X(k) requer, na combinao de G(k) com H(k), uma
multiplicao complexa pelo coeficiente

, com .
Como estes coeficientes so simtricos, o nmero de multiplicaes pelos
coeficientes

poder ainda ser reduzido pela metade, utilizando novamente para a


segunda metade do clculo de X(k), a multiplicao pelos coeficientes

j realizadas
para a primeira metade do algoritmo. Ou seja, para N=8, ser em particular
() ()

() mas ser tambm () ()

() ()

(), o que permite simplificar a estrutura da Figura 1:




Figura 2: Simplificao da DFT de comprimento 8.

O procedimento anterior por ainda ser repetido em relao a cada uma das DFTs
de comprimento N/2(N=8, portanto N/2=4):


Figura 3: Simplificao da DFT de comprimento 4 com ndices pares.

J que a DFT inicial de comprimento N=8, ainda possvel fazer uma melhoria,
otimizando o clculo da das DFTs de comprimento N/4, de forma que, cada uma destas
DFTs pode ser simplificada como no exemplo da Figura 4:


Figura 4: Simplificao da DFT de comprimento 2.








Agrupando todo o processo de simplificao, obtm-se a seguinte estrutura:


Figura 5: Estrutura global do processo de simplificao DIT.

As operaes aritmticas, tanto do algoritmo DIT quanto do algoritmo DIF obedece
a uma proporo

em contrapartida ordem do algoritmo DIT executado


pela definio. Logo, a vantagem da aplicao dos algoritmos FFT se mostra bastante
vantajosa como mostra o Quadro 1.
A operao mais elementar do processo de simplificao da DFT denominada
Butterfly (borboleta) pela semelhana entre a estrutura e o inseto:


Figura 6: Estrutura elementar designada Butterfly.

Computacionalmente, cada borboleta tem um custo computacional equivalente a
uma multiplicao e duas somas, ambas complexas.
Contudo, como o nmero de entradas ou sadas de cada borboleta 2, dizemos
que o algoritmo de raiz 2(radix-2), portanto o nmero de borboletas por andar
constante e igual a N/2. Entretanto, o nmero de grupo de DFT varia por um fator de
2, e o nmero de borboletas por andar varia inversamente pelo mesmo fator.
Cada borboleta produz sadas que substituem seus valores de entrada, no
afetando outras posies da estrutura de dados em cada andar, o que causa o
processamento paralelo dos dados e permite o clculo in-place, ou seja, os dados de
entrada so manipulados estgio estgio, no havendo a necessidade de memria
adicional:


Figura 7: Fluxo algoritmo DIT.

Neste algoritmo, os dados de entrada so arranjados na sada de forma que seu
correspondente binrio seja invertido na sada conforme decorre a decomposio, a
este processo dado o nome de bit reversal. Por exemplo, a entrada com valor (4)
10

corresponde a (100)
2
, logo sua sada ser (1)
10
e portanto (001)
2
.

2.2. Decimao na frequncia (Decimation in frequency DIF)

Ao contrrio do algoritmo DIT, o algoritmo DIF no decompe os dados X(n)
sucessivamente em sequncias mais curtas, e sim efetua a decomposio sucessiva
das sadas X(k) em sequncias mais curtas, sendo que estas so obtidas por DFTs
correspondentemente mais curtas.
Com no algoritmo DIT, para simplificar, admite-se aqui que N uma potncia de 2,
logo, para as sadas de ndice par, temos:

() ()


() ()

( )

()


() ()

( )


() [() ( )]

3

Entretanto, para as sadas com ndices impares, tem-se que:

( ) ()

()


( ) ()

()

( )

()()


( ) [() ( )]

4

Considerando um exemplo com N=8, as equaes 3 e 4 so, juntamente ilustradas
pela seguinte estrutura:

Figura 8: Decomposio algoritmo DIF.
Comparando a decomposio de uma DFT pelo algoritmo DIT representado pela
Figura 5 com a decomposio pelo algoritmo DIF ilustrado pela Figura 8, nota-se que a
decimao na frequncia nada mais que uma transposio do algoritmo de
decimao no tempo, com inverso do fluxo de sinal, deslocamento dos ns de soma e
troca das entradas com as sadas.
Observe abaixo a borboleta representativa do algoritmo DIF:


Figura 9: Fluxo do algoritmo DIF.

Assim como no algoritmo DIT, o algoritmo DIF possui N/2 borboletas por andar e o
total de operaes continua o mesmo, sendo possui uma multiplicao complexa de
ordem

e duas adies complexas com ordem

, podendo
ainda realizar o clculo in-place j que uma transposio do algoritmo DIT.
Como as entradas encontram-se ordenadas sequencialmente e suas sadas so
dispostas segundo uma ordem bit-reversed, pode-se aplicar s entradas o mesmo
algoritmo bit-reversal utilizado no algoritmo DIT para organiz-las sequencialmente.

3. Algoritmo FFT(Matlab)

3.1. Sintaxe

Y = fft(x)
Y = fft(X, n)
Y = fft(X, [], dim)
Y = fft(X, n, dim)

3.2. Definio

As funes Y=fft(x)e Y=IFFT(X) programam a transformada de Fourier e a
Transformada Inversa de Fourier dado par de vetores de comprimento N por:

() ()

()()



()

()

()()



onde


()
uma raiz da unidade.



3.3. Descrio

Y=fft(x) retorna a transformada discreta de Fourier (DFT) do vetor x, calculado
atravs de uma transformao rpida de Fourier (FFT).
Se X uma matriz de entrada, Y=fft(x) retorna a transformada de Fourier de cada
coluna da matriz.
Se o X de entrada uma matriz multidimensional, fft opera na primeira dimenso.
Y=fft(X, n) retorna o ensimo ponto da DFT. fft(X) equivalente a fft(x, n), onde n
o tamanho de X na primeira dimenso. Se o comprimento de X menor do que n, X
preenchido com zeros a direita ao comprimento n. Se o comprimento de X maior do
que n, a sequncia X truncada. Quando X uma matriz, o comprimento das colunas
so ajustados da mesma maneira.
Y=fft(X, [], dim) e Y=fft(X, n, dim) aplicam a operao da FFT atravs da dimenso
dim.

4. Implementao

Um uso comum da transformada de Fourier encontrar as componentes de
frequncia de um sinal enterrado em um sinal ruidoso no domnio do tempo.
Considerando os dados amostrados a 1000Hz. Formar um sinal que contem uma
senide de 50Hz e amplitude 0,7 e uma outra senoide de 120Hz com amplitude 1 e
corromp-la com algum rudo de mdia zero aleatria:

Fs = 1000; %frequncia de amostragem
T = 1/Fs; %tempo de amostra
L = 1000; %comprimento do sinal
t = (0: L-1) * T; %vetor tempo
x = 0,7 * sin(2 * pi * 50 * t ) + sin(2* pi * 120 * t); %soma das senides
y = x + 2 * randn (tamanho (t)); %senoides mais rudo
parcela (Fs * t (1:50), y (1:50))
title ('Sinal corrompido com mdia zero rudo aleatrio')
xlabel ('tempo (milissegundos)')


Figura 10: sinal original.

difcil identificar os componentes de frequncia olhando para o sinal original. A
converso para o domnio da frequncia, a transformada de Fourier discreta do sinal
ruidoso y encontrado tomando a transformada de Fourier rpida (FFT):

NFFT = 2 ^ nextpow2 (L); %prxima potncia de 2 de comprimento de y
Y = fft (y, NFFT) / L;
f = Fs / 2 * linspace (0,1, NFFT / 2 +1);
%Plot espectro de amplitude de um s lado.
plot (f, 2 * abs (Y (1: NFFT / 2 +1)))
title ('Espectro de amplitude de um lado de y (t)')
xlabel ('Freqncia (Hz)')
ylabel ('| Y (f) |')


Figura 11: Grfico de sada.

A principal razo para as amplitudes no serem exatamente 0,7 e 1 o
rudo. Vrias execues do presente cdigo (incluindo recomputao de y) ir produzir
aproximaes diferentes para 0,7 e 1. A outra razo que voc tem um sinal de
comprimento finito. Aumentar L 1000-10.000 no exemplo acima ir produzir
aproximaes muito melhores, em mdia.

5. Referncias

[1] http://www.cin.ufpe.br/~cabm/pds/PDS_Aula07%20FFT.pdf

[2] http://www.inf.ufrgs.br/~flavio/ensino/cmp237/sandro_relatorio.pdf

[3] ftp://ftp.fe.up.pt/pub/Deec/ajf/pas/dftfft.pdf

[4] http://www.cmlab.csie.ntu.edu.tw/cml/dsp/training/coding/transform/fft.html

[5] http://www.mathworks.com/help/matlab/ref/fft.html

[6] http://www2.ee.ufpe.br/codec/DTF%20E%20FFT.pdf

Você também pode gostar