Exercícios Resolvidos de Transformada de Fourier

Ver Teoria

Enunciado

Gere 128 pontos para o seguinte sinal:

k = 5 - cos ⁡ 1000 t

Plote o sinal no domínio do tempo. Usando o método da transformada de Fourier e gere e plote o sinal no domínio da freqüência. Use a escala de H z   no eixo X. Assuma a taxa de amostragem de 1   k H z . Verifique se os picos ocorrem onde era esperado para o domínio da freqüência.

Passo 1

O enunciado nos dá uma função representando um sinal no domínio do tempo e nos pede para:

  1. Plotar o sinal no domínio do tempo;
  2. Aplicar a transformada de Fourier no sinal para obtê-lo no domínio da frequência. Para isto, usaremos a função f f t ( ) do MATLAB;
  3. Plotar o sinal do domínio da frequência, tendo as frequências em H z no eixo X do gráfico;
  4. Verificar se os picos do sinal ocorrem onde era esperado no domínio da frequência.

A partir do enunciado e da equação do sinal, que é uma onda cossenoidal, podemos obter algumas informações para entrarmos no MATLAB e resolvermos o exercício:

  • O número de pontos que o sinal deve ter é N   =   128 ;
  • A taxa de amostragem é de 1   k H z . Isto quer dizer que a frequência de amostragem F s é 1000   H z ;
  • A partir da frequência de amostragem, obtemos o período T em segundos do sinal: T = 1 / F s = 1 / 1000 = 0,001   s ;
  • Uma onda cossenoidal normalmente tem o formato:
  • C = A cos ⁡ 2 π f t

    Onde A é a amplitude da onda e f , a frequência em H z .

  • Logo, podemos dizer que a amplitude do sinal é de A = 1 ;
  • E que a frequência do sinal é:

2 π f = 1000

f = 1000 2 π ≈ 1 59   H z

Para verificar se os picos do sinal ocorrem onde era esperado no domínio da frequência, devemos olhar o gráfico do sinal no domínio da frequência e ver se o pico ocorre na mesma frequência do sinal: f ≈ 1 59   H z .

Passo 2

Primeiramente, vamos entrar no MATLAB as informações fornecidas pelo enunciado, que foram listadas logo acima, no passo 1. Em um script novo, digite:

O número de pontos é armazenado na variável N ; a frequência de amostragem na variável F _ s ; o período é calculado e armazenado na variável T ; e a amplitude da onda cossenoidal é armazenada na variável A .

Para fazermos a primeira coisa que o exercício pede – plotar o sinal no domínio do tempo – devemos criar um vetor t representando o domínio do tempo a partir 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 = 128 elementos, correspondendo aos N = 128 pontos pedidos pelo enunciado. Em seguida, esse vetor é multiplicado por T , que é o período, em segundos, da onda senoidal.

Vamos acrescentar esse comando para calcular o vetor t   no MATLAB e aproveitar e já gerar o sinal no domínio do tempo:

Tendo os vetores t e k , podemos plotar o sinal da onda cossenoidal no domínio do tempo, por meio dos comandos:

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 também foi pedido no exercício e que geraremos mais pra frente, no mesmo script).

Em seguida, com o comando p l o t ( t , k ) , o gráfico do sinal no domínio do tempo é 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 cossenoidal, indicado por y l a b e l ( ' k ' ) .

Vamos ver a carinha do sinal no domínio do tempo? Rodando o programa que escrevemos até agora, temos este gráfico:

Tcharam! Primeiro ponto pedido pelo exercício resolvido.

Passo 3

A segunda coisa que o exercício pede é usarmos a transformada de Fourier no sinal para obtermos a onda cossenoidal no domínio da frequência. Para isto, usaremos a função f f t ( ) do MATLAB, incluindo a seguinte linha de código em nosso script:

Para calcular a transformada de Fourier, a função f f t ( ) tem como entrada o vetor k , que contém números reais representando o sinal k = 5 - cos ⁡ 1000 t no domínio do tempo. Já a saída é um vetor Y com números complexos: é a conversão de k no domínio do tempo para o domínio da frequência. Os vetores k e Y têm a mesma quantidade de elementos.

Pronto! Segundo pedido do exercício atendido ;D

Passo 4

Tendo executado o segundo item pedido pelo exercício, partimos para a terceira coisa que ele nos pede para fazer: plotar o sinal no domínio da frequência. Quando plotamos um sinal no domínio da frequência, normalmente temos no eixo Y do gráfico a magnitude do sinal obtido pela função f f t ( ) . Para calcular a magnitude, usamos 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.

Agora precisamos criar o eixo horizontal, representando o domínio da frequência. Para isto, digite os comandos:

Na primeira 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 segunda 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 128 elementos, correspondendo aos N = 128 pontos exigidos pelo enunciado. 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 cossenoidal 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 | ' ) .

Vamos ver como o sinal k ficou no domínio da frequência? Ao rodar o programa, temos o seguinte gráfico:

Terceiro item do exercício feito ;) Bora encerrar respondendo à última coisa pedida pelo exercício.

Passo 5

A última coisa que o exercício pede para fazermos é verificar se os picos do sinal ocorrem onde era esperado no domínio da frequência. Para vermos isso, devemos olhar o gráfico do sinal no domínio da frequência e ver se o pico ocorre na mesma frequência do sinal, que é aproximadamente f ≈ 1 59   H z .

“Ué, mas o gráfico tem dois picos”, você deve ter reparado. Vamos ver as coordenadas dos dois, clicando neles no gráfico:

Vamos analisar primeiro o pico mais à direita, que ocorre a uma frequência de 156,3   H z , muito próxima dos 159   H z da função cosseno do sinal k . Logo, este pico ocorre onde era esperado.

Se quiser, faça alguns testes aumentando o N , você verá que a frequência onde ocorre o pico mais à direita ficará mais próxima de 159   H z .

Você deve estar estranhando o primeiro pico, que ocorre a uma frequência de 0   H z . Vamos rever o sinal k :

k = 5 - cos ⁡ 1000 t

Podemos reescrever o sinal da seguinte forma:

k = 5 cos ⁡ 0 t - cos ⁡ 1000 t

A constante 5 do sinal k pode ser interpretada como uma onda cossenoidal de frequência 0   H z . Como o sinal k é composto de duas ondas cossenoidais, há dois picos em k no domínio da frequência, cada um ocorrendo na frequência de cada onda. Como uma das duas ondas tem frequência de 0   H z , há um pico em 0   H z . Legal, né?

Portanto, os picos no domínio da frequência ocorrem onde eram esperados.

Resposta

Gráfico do sinal no domínio do tempo:

Gráfico do sinal do domínio da frequência, tendo as frequências em H z no eixo X:

Os picos do sinal k = 5 - cos ⁡ 1000 t   ocorrem onde eram esperados no domínio da frequência:

  • O primeiro ocorre em 0   H z , correspondendo à frequência da primeira componente do sinal ( 5 );
  • O segundo ocorre em 156,3   H z , correspondendo à frequência da segunda componente do sinal ( cos ⁡ 1000 t ).