Você está na página 1de 13

UNIVERSIDADE ESTADUAL DE CAMPINAS

FACULDADE DE ENGENHARIA ELÉTRICA E


COMPUTAÇÃO

Disciplina: IE550 – Processamento Digital de Sinais

Trabalho: Transformada rápida de Fourier (FFT)

2ª Edição

Aluno: Luan C. Martins dos Santos


Docente: Dr. Luis Geraldo Pedroso Meloni

Campinas
2021
INTRODUÇÃO

Para sequências de duração finita, existe uma representação de Fourier


em tempo discreto alternativa, chamada de Transformada de Fourier Discreta
(DFT). A DFT é uma sequência, em vez de uma função de variável contínua, e
corresponde a amostras em frequência, igualmente espaçadas, da
Transformada de Fourier de Tempo Discreto (TFTD) do sinal. Além de sua
importância teórica como uma representação de Fourier de sequências, a DFT
desempenha um importante papel na implementação de uma variedade de
algoritmos de processamento digital de sinais. Isso porque existem algoritmos
eficientes para o cálculo da DFT [1].
Mas antes de conhecer estes algoritmos, convém definir a DFT do ponto
de vista matemático. Sendo assim, em primeiro lugar, vale a pena comentar
sobre a Matriz de Kernel, W N. Observe a identidade a seguir:

𝑊𝑁𝑛𝑘 = 𝑒 −𝑗(2𝜋/𝑁)𝑘𝑛 (1)

Onde:
n: número da linha da matriz;
k: número da coluna da matriz;
N: Ordem (tamanho) da matriz.

Nesse sentido, é possível fazer um arranjo da equação (1) em forma de


Matriz e, finalmente, definir a Matriz de Kernel.

𝑊𝑁11 ⋯ 𝑊𝑁1𝑘 (2)


𝑊𝑁 = [ ⋮ ⋱ ⋮ ]
𝑊𝑁𝑛1 ⋯ 𝑊𝑁𝑛𝑘

Diante disso, para calcular a DFT de uma sequência (vetor), basta calcular
o produto entre a sequência e a Matriz de Kernel (vide Apêndice), ou aplicar a
definição da DFT na sequência, conforme a Equação (3).
𝑁−1 (3)
𝑋[𝑛] = ∑ 𝑥[𝑘] ∙ 𝑊𝑁𝑛𝑘
𝑘=0

Além disso, conforme dito anteriormente, existem algoritmos mais


eficientes para realizar o cálculo da DFT, isto é, a Transformada Rápida de
Fourier (FFT), e este trabalho tem como objetivo demonstrar a vantagem deste
algoritmo em relação a DFT demonstrada no Exemplo 1, e também demonstrar
que Transformada de Fourier é um importante recurso para conseguir
informações relevantes.
A FFT utiliza o Diagrama de Butterfly, Figura 1, para calcular a DFT das
sequências.

Figura 1: Diagrama de Butterfly, N = 8 [1].

A Figura 1 ilustra o Diagrama de Butterfly de 8 pontos (N = 8) e, isso


significa que este algoritmo tem potencial para calcular a DFT, de forma rápida,
de uma sequência de 8 posições.
Diante de todo o exposto, convém adiantar que o fato da FFT ser muito
mais rápida que a DFT se justifica pelo número de operações, isto é, enquanto
a DFT realiza N2 operações para concluir o cálculo, a FFT consegue o mesmo
resultado com 𝑁 ∙ log 𝑁 operações, ou seja, dependendo do valor de N, a FFT
realiza muito menos operações.

OBJETIVOS

 Aplicar a FFT para conseguir informações relevantes;


 Comparar a DFT com a FFT, e concluir a vantagem de uma em relação a
outra;

MATERIAIS UTILIZADOS

 Computador com ambiente de desenvolvimento, MATLAB R2016a.

DESCRIÇÃO EXPERIMENTAL E RESULTADOS

Esta seção aborda os experimentos computacionais relativo a DFT e FFT.


Estes experimentos foram divididos em duas partes. Confira!

Parte I:

Em um software de programação carregue o arquivo “dataset.csv”. Este


arquivo contém a demanda de eletricidade de uma região ao longo de um dado
período. As aferições eram realizadas a cada uma hora. Dentro do arquivo “.csv”
existem colunas de informação, entretanto somente as colunas referentes ao
Time e Power são necessárias para esta questão. Com base nas informações
iniciais, cumpra as tarefas seguintes:

1. Plote a série temporal que relaciona a Power (MWh) em função de Time,


ou seja, no eixo y a potência e no eixo x o Time. Adicione labels aos eixos;
Figura 2: Energia consumida pela região em função do tempo em horas.

2. Comente se é possível reconhecer padrões a partir desses dados e do


plot anterior;

Sim, é possível reconhecer padrões. Na Figura 2, nota-se uma


forma de onda, e isso leva a crer que o consumo de energia elétrica possui
um comportamento aproximado todos os dias. Nesse sentido, em alguns
horários o consumo é sempre baixo, e em outros sempre alto, e isso é,
aproximadamente, periódico.
Além disso, é possível observar na Figura 1 que houve uma
interrupção do fornecimento de energia elétrica em algumas partes da
região estudada, em determinado dia e horário (entre t = 450 e t = 500
horas), pois o gráfico ilustra uma queda acentuada no consumo de energia
elétrica em dado momento.

3. Aplique a FFT no sinal de potência e plote a amplitude (o valor absoluto)


da FFT resultante em função da frequência em Hz;
Figura 3: Sinal de energia distribuído no domínio da frequência.
Figura 4: Sinal de energia (com marcações) distribuído no domínio da frequência.

4. Comente se é possível reconhecer padrões a partir do plot anterior;

Sim, é possível reconhecer padrões, pois há duas frequências bem


definidas na Figura 4, isto é: 1,156 ∙ 10−5 𝐻𝑧 e 2,312 ∙ 10−5 𝐻𝑧. Estas
correspondem, aproximadamente, 24 horas e 12 horas, respectivamente.
Nesse sentido, conclui-se que, geralmente, o comportamento relativo ao
consumo de energia elétrica se repete a cada 12 e 24 horas, dependendo
do dia.
Portanto, com estes dados, inclusive, é possível fazer previsões do
consumo de energia elétrica da população.

5. Converta a frequência para horas e plote novamente a amplitude da FFT


(o valor absoluto). O plot deverá ser efetuado num intervalo de 0 a 200
para o eixo x;
Figura 5: Resultado da Transformada de Fourier do sinal de energia no domínio do tempo (h).

6. Comente se é possível reconhecer padrões a partir do plot anterior.


Discuta se existem picos neste gráfico. Quantos picos?

Na Figura 5, há dois picos, um em, aproximadamente, 12 horas, e


outro próximo de 24 horas. Nesse sentido, este gráfico, basicamente,
valida o que foi dito no item 4 da questão, ou seja, que dependendo do
dia, o comportamento do consumo de energia elétrica da população se
repete a cada 12 e 24 horas.
Diante disso, na Figura 5, também, é possível reconhecer padrões.

Parte II:

Desenvolva um scrip capaz de produzir sequências de números aleatórias


entre 0 a 10 de tamanho N = 2b, com b = 2; 3; ... ; 14. O script deverá ser capaz
de calcular a DFT usando a matriz de Kernel W N para cada uma dessas
sequências e medir o tempo de processamento. Além disso, o script também
deverá ser capaz de calcular a DFT usando o algoritmo da Fast Fourier
Transform (é permitido a utilização da função FFT no caso do MATLAB ou função
equivalente em outros softwares) e medir o tempo de processamento.
Em posse desse script desenvolvido, cumpra com as seguintes tarefas:

1. Gere 1000 interações (sorteios) de sequências para cada valor de b. Em


cada sequência sorteada realize o cálculo da DFT das duas formas
indicadas. Encontre o tempo de processamento médio das 1000 iterações
para cada valor de b e cada método de cálculo da DFT. Trace ambos
tempos de processamento no mesmo gráfico, utilize cores e legendas
para diferenciar as curvas, com eixo de abscissas b. Comente sobre a
diferença entre ambas curvas;

Para esta questão, desenvolveu-se um algoritmo para realizar os


cálculos solicitados no enunciado, e gerar a Figura a seguir.

Figura 6: DFT versus FFT em função de b.


Com base na Figura 6, é possível notar que a FFT é muito mais
rápida que a DFT, pois, considerando o mesmo vetor (sequência), a FFT
precisa de muito menos tempo para calcular a Transformada de Fourier
Discreta.

2. Em posse dos tempos médios de processamento do item anterior, trace


em outra figura duas sub-figuras (subplot), no primeiro subplot mostre o
tempo de processamento do primeiro método vs N2 e no segundo subplot
o tempo de processamento do segundo método versus 𝑁 ∙ log 𝑁. Comente
os resultados.

Nesta questão, foi possível aproveitar o algoritmo do item anterior.


Entretanto, foi preciso acrescentar algumas linhas de comando e, com
isso, gerou-se a Figura abaixo.

Figura 7: DFT versus FFT em função de N.


Na Figura 7, da mesma forma que a anterior, novamente, é possível notar
a superioridade da FFT em relação da DFT no que diz respeito a velocidade de
processamento. Entretanto, desta vez sobre o contexto do número operações,
ou seja, a DFT realiza N2 operações para calcular a Transformada de Fourier de
um vetor, enquanto a FFT realiza 𝑁 ∙ 𝑙𝑜𝑔 𝑁 operações e, por esta razão, a FFT é
muito mais rápida e, portanto, muito mais vantajosa.
Por fim, convém esclarecer um ponto importante, por razões de limitações
de infraestrutura, não foi possível simular este experimento com b = 14, pois para
realizar a DFT, neste caso, exige-se muito recurso computacional e, portanto,
dependendo do computador utilizado, demora muito para concluir o experimento.
Por exemplo, para este trabalho, foi utilizado um computador com 4 GB de
memória RAM, e processador Core i5, e estima-se que para terminar a
simulação com b = 14, precisa-se de 2 dias.

CONCLUSÃO

Em primeiro lugar, estes experimentos permitiram concluir que a


Transformada de Fourier é um recurso, extremamente, relevante para analisar o
comportamento de uma base de dados que varia função do tempo. Nesse
sentido, a Transformada de Fourier possibilita cálculo de frequências e, com esta
informação, é possível fazer previsões com razoável segurança de acerto, em
alguns casos.
Além disso, na segunda parte, foi possível concluir a superioridade da FFT
em relação a DFT, visto que a primeira executa os cálculos muito mais
rapidamente.

REFERÊNCIAS BIBLIOGRÁFICAS

[1] Oppenheim AV, Schafer RW. Processamento em tempo discreto de sinais. 3ª


edição. São Paulo: Pearson Education do Brasil; 2012.
APÊNDICE

Comparação teórica entre DFT e FFT através de exemplos

O primeiro exemplo se refere a DFT. Confira!

Exemplo 1: Calcular a DFT da sequência 𝑥(𝑛) = {1, 2, 3, 4}, N = 4.

Em primeiro lugar, deve-se calcular a Matriz de Kernel. Observe o cálculo.

𝑊𝑁𝑛𝑘 = 𝑒 −𝑗(2𝜋/𝑁)𝑘𝑛

𝑊411 𝑊412 𝑊413 𝑊414 1 1 1 1


𝑊 21 𝑊422 𝑊423 𝑊424 1 −𝑗 −1 𝑗
𝑊𝑁𝑛𝑘 = 431 =[ ]
𝑊4 𝑊432 𝑊433 𝑊434 1 −1 1 −1
[𝑊441 𝑊442 𝑊443 𝑊444 ] 1 𝑗 −1 −𝑗

Nesse sentido, para calcular a DFT da sequência, basta aplicar o produto


entre a sequência e a Matriz de Kernel.

1 1 1 1 1
1 −𝑗 −1 𝑗 2
𝑋[𝑛] = [ ]∙[ ]
1 −1 1 −1 3
1 𝑗 −1 −𝑗 4

10
−2 + 2𝑗
∴ 𝑋[𝑛] = [ ]
−2
−2 − 2𝑗

Com isso, observe também a aplicação da FFT no exemplo 2.


Exemplo 2: Calcular a DFT da sequência 𝑥(𝑛) = {1, 2, 3, 4}, N = 4. Aplique os
conceitos de Transformada Rápida de Fourier.

Para calcular a FFT da sequência x(n), é preciso considerar a matriz de


Kernel:

𝑊411 𝑊412 𝑊413 𝑊414 1 1 1 1


𝑊421 𝑊422 𝑊423 𝑊424
1 −𝑗 −1 𝑗
𝑊𝑁𝑛𝑘 = 34 = [1 −1 ]
𝑊431 𝑊432 𝑊433 𝑊4 1 −1
[𝑊441 𝑊442 𝑊443 𝑊444 ] 1 𝑗 −1 −𝑗

Além disso, deve-se aplicar alguns valores desta matriz no Diagrama de


Butterfly, conforme a seguir.

Note que o resultado dos exemplos 1 e 2 são iguais. Entretanto, o


segundo exemplo é muito mais vantajoso, mas isso, somente,
computacionalmente.

Você também pode gostar