Exercícios Resolvidos de Transformada de Fourier

Ver Teoria

Enunciado

Trace um sinal senoidal com as propriedades a seguir:

  • Amplitude: 1
  • Frequência: 10   H z
  • Fase inicial: 0
  • Número total de pontos de dados: 100
  • Tempo de duração: 0 - 1 segundo

Verifique se o método FFT dá a mesma frequência 10   H z .

Passo 1

O exercício nos dá algumas propriedades de uma onda senoidal, no domínio do tempo, e nos pede para aplicar a transformada de Fourier nela. Para isto, usaremos a função f f t do MATLAB.

Para verificar se “o método FFT dá a mesma frequência 10   H z ”, geraremos um gráfico da magnitude da onda senoidal no domínio da frequência, após a aplicação da função f f t , e veremos as coordenadas do primeiro pico de magnitude. O pico de magnitude deve ocorrer na frequência da onda senoidal.

Passo 2

Primeiramente, vamos criar a onda senoidal no MATLAB. Em um novo script, vamos entrar as propriedades de amplitude, frequência, fase inicial e número de pontos:

A amplitude da onda senoidal é armazenada na variável A , a frequência em f , a fase inicial em p h i e o número de pontos em N .

Vamos criar agora o vetor t representando o intervalo de 0 a 1   s de duração da onda. Para criar o vetor t , usaremos o comando:

t   =   ( 0 : N - 1 ) * T

Neste comando, cria-se primeiro um vetor que vai de 0 a N - 1 , com passo de 1 ( 0 : N - 1 ). Este vetor tem N = 100 elementos, correspondendo aos N = 100 pontos de dados. Em seguida, esse vetor é multiplicado por T , que é o período, em segundos, da onda senoidal.

O enunciado não nos dá o período, mas sabemos que a onda tem um intervalo de duração de 0 a 1   s . Logo, o vetor t deve começar em 0 e terminar em 1 . O último elemento de t deve ser igual a:

N - 1 * T = 1

Sabemos que N = 100 , logo o período T é igual a:

T = 1 99   s

Vamos entrar essa informação no MATLAB e construir o vetor t :

O vetor t representa o domínio do tempo da onda senoidal.

Temos todos os dados necessários para construir a onda senoidal no domínio do tempo. No MATLAB, digite este comando para gerar a onda:

A onda senoidal é representada pelo vetor X . Vamos ver a carinha dela? Digite as linhas de código abaixo no seu script para plotar o gráfico da onda senoidal no domínio do tempo:

Na primeira linha, pedimos ao MATLAB para gerar uma figura com o comando f i g u r e ( 1 ) , para termos o gráfico no domínio do tempo em uma janela diferente do gráfico no domínio da frequência (que geraremos mais pra frente, no mesmo script).

Em seguida, com o comando p l o t ( t , X ) , o gráfico da onda senoidal, no domínio do tempo, é efetivamente gerado.

Indicamos que o eixo horizontal do gráfico é o domínio do tempo por meio do comando x l a b e l ( ‘ t   [ s ] ’ ) . Temos no eixo vertical do gráfico os valores da onda senoidal, indicados por y l a b e l ( ' X ' ) .

Ao rodarmos o programa, vemos como é a onda senoidal:

Passo 3

Vamos agora calcular a onda senoidal no domínio da frequência. Para isto, usaremos a função f f t ( ) do MATLAB, que tem a seguinte estrutura:

Y = f f t ( X )

A entrada da função f f t ( ) é um vetor X contendo dados no domínio do tempo, representados por numeros reais. Já a saída é um vetor Y com números complexos: é a conversão de X no domínio do tempo para o domínio da frequência. Os vetores X e Y têm a mesma quantidade de elementos.

Digite no seu script o comando:

Com esta linha de código, o MATLAB passará a onda senoidal, que está no domínio do tempo e é representada pelo vetor X , para o domínio da frequência. A onda senoidal no domínio da frequência é representada pelo vetor Y .

Para verificarmos se o método FFT dá a mesma frequência de 10   H z , precisamos gerar o gráfico da magnitude da onda senoidal no domínio da frequência.

Passo 4

Para construirmos o gráfico da magnitude da onda senoidal no domínio da frequência, vamos calcular a magnitude usando a função a b s ( ) do MATLAB. Digite no MATLAB a linha de código:

Com esta linha, calculamos a magnitude de cada elemento do vetor Y usando a função a b s ( ) do MATLAB. Quando a entrada da função a b s é um número complexo, ela calcula sua magnitude.

Com esse comando, já temos o eixo vertical do gráfico, agora precisamos criar o eixo horizontal, representando o domínio da frequência. Para isto, digite os comandos:

Na primeira linha, calculamos a frequência de amostragem F s , que é o inverso do período T .

Na segunda linha, calculamos o Δ f , que é o passo do domínio da frequência: ele começa em 0 e as frequências seguintes são obtidas pela soma de Δ f à frequência anterior. O Δ f é calculado dividindo a frequência de amostragem F s pelo número de pontos N e é armazenado na variável d e l t a _ f .

Na terceira linha, geramos o domínio da frequência, representado pelo vetor f _ d o m . A lógica da sua criação é igualzinha à lógica que usamos para criar o vetor t , do domínio do tempo.

Primeiramente, cria-se um vetor que vai de 0 a N - 1 , com passo de 1 ( 0 : N - 1 ). Este vetor tem 100 elementos, correspondendo aos N = 100 pontos de dados. Em seguida, esse vetor é multiplicado por d e l t a _ f . Desta forma, é criado o domínio da frequência, que vai de 0 a N - 1 * d e l t a _ f .

Após criar o domínio da frequência, vamos usar novamente a função p l o t para gerar o gráfico da magnitude da onda senoidal no domínio da frequência:

Na primeira linha, pedimos ao MATLAB para gerar uma segunda figura com o comando f i g u r e ( 2 ) , para termos o gráfico no domínio da frequência em uma janela diferente do gráfico no domínio do tempo.

Em seguida, o gráfico da magnitude de Y no domínio da frequência é criado com o comando p l o t ( f _ d o m ( 1 : N / 2 ) , m a g n ( 1 : N / 2 ) ) . Repare que, para plotar, usamos somente a primeira metade dos vetores com N elementos f _ d o m e m a g n . Isso é indicado pela adição de ( 1 : N / 2 ) à direita do nome do vetor, que diz ao MATLAB que queremos pegar do primeiro elemento ao elemento N / 2 do vetor.

Usamos somente a primeira metade dos vetores f _ d o m e m a g n porque, no domínio da frequência, a partir de F s / 2 , as magnitudes começam a se repetir e não precisamos pôr elas no gráfico para encontrar o que o exercício pede.

Indicamos que o eixo horizontal do gráfico é o domínio da frequência por meio do comando x l a b e l ( ‘ f   [ H z ] ’ ) . Temos no eixo vertical do gráfico a magnitude de Y , indicado por y l a b e l ( ' | Y | ' ) .

Passo 5

Vamos rodar o programa para ver o gráfico da magnitude da onda senoidal no domínio da frequência:

Já marquei no gráfico as coordenadas do pico de magnitude da onda senoidal no domínio da frequência. Ele ocorre em uma frequência de 9,9   H z , muito próxima da frequência da onda senoidal, que é de 10   H z . Logo, podemos dizer que o método FFT dá a mesma frequência 10   H z .

Dica: caso aumentássemos o número de pontos N , teríamos uma maior precisão e a frequência onde ocorre o pico de magnitude seria mais próxima de 10   H z .

Resposta

O método FFT dá a mesma frequência 10   H z da onda senoidal, pois o pico de magnitude ocorre em uma frequência de 9,9   H z , muito próxima de 10   H z .