Exercícios Resolvidos de Transformada de Fourier

Ver Teoria

Enunciado

O sinal x t = cos ⁡ ( 200 t ) foi amostrado a uma taxa de F s = 500 amostras por segundo durante 0,3 segundos.

  1. Plote o sinal
  2. Estime o espectro desse sinal usando f f t . Plote a magnitude do sinal no domínio da frequência
  3. Estime de novo o espectro do sinal. Desta vez, adicione zeros no final do sinal de forma que seu comprimento seja igual ao dobro do comprimento original. Plote sua magnitude no domínio da frequência
  4. Considerando as letras [b.] e [c.], por que existem dois picos principais?
  5. Considerando a letra [b.], quais são as frequências (em H z ) dos dois picos? Por que estes picos estão nessas frequências?
  6. Considerando a letra [c.], quais são as frequências (em H z ) dos dois picos? Por que estes picos estão nessas frequências?
  7. Por que a frequência onde ocorre o primeiro pico das letras [e.] e [f.] é diferente? Qual letra ([e.] ou [f.]) tem a estimativa mais precisa? Como este resultado poderia ser melhorado?

Passo 1

Neste exercício, vamos calcular a transformada de Fourier de x ( t ) considerando duas quantidades diferentes de pontos de medição. Desta forma, vamos poder ver o impacto do númeto de pontos medidos sobre a precisão dos resultados no espectro da frequência.

Quando a questão pede para “estimar o espectro” do sinal, na prática ele pede para aplicarmos f f t em x t e plotar o gráfico da magnitude do sinal no domínio da frequência.

Passo 2

A letra a do exercício pede para plotarmos x ( t ) . Para fazermos isso, precisamos criar um vetor t representando o intervalo de tempo da medição, que vai de 0 a 0,3 segundos. Para construir esse vetor, precisamos do período T da amostra, que é definido como o inverso da frequência de amostragem, isto é, T = 1 F s . O enunciado diz que F s   =   500   H z , por isso, em um script novo do MATLAB, defina o período T com as linhas de código:

Com T calculado, podemos criar o vetor t representando o intervalo de 0 a 0,3   s . 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 elementos, correspondendo aos N pontos de dados. Em seguida, esse vetor é multiplicado por T , que é o período, em segundos, do sinal.

O enunciado não nos dá o número de pontos N , mas podemos calculá-lo sabendo a medição durou 0,3   s . Isto quer dizer que o vetor t deve começar em 0 e terminar em 0,3 . Logo, o último elemento de t deve ser igual a:

N - 1 * T = 0,3

Como conhecemos T , podemos obter N a partir da equação acima. Temos que N é igual a:

N = 0,3 + T T

No seu script, entre com essa equação para calcular N , construa o vetor t e entre com x ( t ) :

Com isso, temos tudo o que precisamos para plotar x ( t ) . Digite as linhas de código abaixo no seu script para plotar x ( t ) 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 dos gráficos no domínio da frequência (que geraremos mais pra frente, pra resolver as letras b e c, no mesmo script).

Em seguida, com o comando p l o t ( t , x ) , o gráfico de x ( t ) , 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 de x ( t ) , indicados por y l a b e l ( ' x ( t ) ' ) .

Ao rodarmos o programa, temos a solução da letra a:

Passo 3

A letra b pede para estimar o espectro do sinal usando f f t , em outras palavras, para calcular o sinal 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 números 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á o sinal x ( t ) , que está no domínio do tempo e é representada pelo vetor x , para o domínio da frequência. O sinal no domínio da frequência é representada pelo vetor y .

A letra b também pede para plotar a magnitude do sinal 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 .

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 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 ), com N elementos. 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 do sinal 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 , m a g n ) .   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 | ' ) .

Execute o programa para ter a solução da letra b:

Passo 4

A letra c pede para calcular novamente o sinal no domínio da frequência, mas adicionando zeros no final do sinal para dobrar o comprimento original. Para adicionar os zeros no sinal, vamos concatenar o vetor x , que representa o sinal x ( t ) , com um vetor de zeros que tenha o mesmo comprimento de x , adicionando ao nosso script a linha de código:

Nesta linha, criamos um vetor de zeros com a função z e r o s do MATLAB, que cria uma matriz de zeros com uma linha e l e n g t h ( x ) colunas. O comando l e n g t h ( x ) retorna o número de elementos do vetor x . Portanto, z e r o s ( 1 , l e n g t h ( x ) ) vai nos dar um vetor de zeros de mesmo tamanho de x .

A concatenação dos vetores é feita colocando-os dentro de colchetes. Isto cria um vetor x 2 cuja primeira metade dos elementos é igual a x e a segunda metade, um monte de zeros.

Vamos calcular o sinal novo no domínio da frequência, usando f f t :

O novo sinal no domínio da frequência é representada pelo vetor y 2 .

A letra c também pede para plotar a magnitude do sinal novo no domínio da frequência. Novamente, vamos usar a função a b s ( ) para calcular a magnitude y 2 :

O resultado é armazenado no vetor m a g n 2 , que será o eixo vertical do gráfico.

Precisamos recriar o eixo horizontal representando o domínio da frequência, pois a adição dos zeros alterou o número de pontos da medição. O novo número de pontos N 2 é igual à quantidade de elementos de x 2 , dada pela função l e n g t h :

Com o novo número de pontos, precisamos recalcular o passo do domínio da frequência e atualizar o domínio da frequência, com os comandos:

O novo passo é d e l t a _ f 2 e o novo domínio é o vetor f _ d o m 2 .

vamos usar novamente a função p l o t para plotar a magnitude do novo sinal no domínio da frequência:

Na primeira linha, pedimos ao MATLAB para gerar uma terceira figura com o comando f i g u r e ( 3 ) . Em seguida, o gráfico da magnitude de y 2 no domínio da frequência é criado com o comando p l o t ( f _ d o m 2 , m a g n 2 ) .  

Execute o programa para ter a solução da letra c:

Passo 5

A letra d pergunta por que os dois gráficos no domínio da frequência tem dois picos principais. Isso ocorre porque a função f f t do MATLAB é válida para um intervalo no domínio da frequência que vai de 0 < f < F s 2 . A partir de F s 2 , os resultados da f f t se repetem, de forma espelhada. Na prática, poderíamos só plotar a primeira metade do gráfico.

Passo 6

A letra e pergunta em quais frequências ocorrem os dois picos no gráfico gerado na letra b e por que os picos ocorrem nessas frequências.

No print abaixo temos o gráfico da letra b com as coordenadas dos dois picos:

O primeiro pico ocorre a uma frequência de 33,11   H z e o segundo, a 466,9   H z (que é exatamente igual a 500   H z - 33,11   H z , reforçando a resposta da letra d).

O gráfico acima é o sinal x t = cos ⁡ ( 200 t ) no domínio da frequência. A frequência de x ( t ) é igual a:

f = 200 2 π ≅ 31 , 831   H z

Os picos de sinais periódicos no domínio da frequência ocorrem na frequência máxima do sinal quando a frequência de amostragem ( F s   =   500   H z ) é pelo menos o dobro da frequência da onda ( f ≅ 31 , 831   H z ). Este é o teorema de amostragem de Nyquist. No gráfico acima, o primeiro pico ocorre a 33,11   H z , uma frequência muito próxima de f . Isso ocorre porque o teorema de amostragem de Nyquist foi respeitado.

Passo 7

A letra f pergunta em quais frequências ocorrem os dois picos no gráfico gerado na letra c e por que os picos ocorrem nessas frequências.

No print abaixo temos o gráfico da letra c com as coordenadas dos dois picos:

O primeiro pico ocorre a uma frequência de 3 1 , 46   H z e o segundo, a 46 8 , 5   H z (que é exatamente igual a 500   H z - 3 1 , 46     H z ).

O gráfico acima é o sinal x t = cos ⁡ ( 200 t ) com o dobro de pontos no domínio da frequência. Como vimos no passo anterior, a frequência de x ( t ) é igual a f ≅ 31 , 831   H z . Como neste caso o teorema de amostragem de Nyquist também foi respeitado, temos que o primeiro pico ocorre a uma frequência muito próxima de f , até mais próxima do que o caso original.

Passo 8

A letra g pergunta por que a frequência onde ocorre o primeiro pico das letras e e g é diferente, qual das duas tem a estimativa mais precisa e como podemos melhorar o resultado.

A frequência onde ocorrem os picos é diferente porque o número de pontos da amostra é diferente ( N ≠ N 2 ). A letra g, que tem o espectro de x ( t ) com o dobro de pontos, é a estimativa mais precisa, exatamente por ter mais pontos. Isso é evidenciado pelo fato de o primeiro pico da letra g ocorre em uma frequência ( 3 1 , 46   H z ) mais próxima à frequência de x t ( f ≅ 31 , 831   H z ). Para melhorar o resultado, podemos diminuir o período T de amostragem, ou seja, podemos aumentar a frequência de amostragem F s . Isso faz com que tenhamos mais pontos na amostra, deixando o resultado mais preciso.

Resposta

  1. A função f f t do MATLAB é válida para um intervalo no domínio da frequência que vai de 0 < f < F s 2 . A partir de F s 2 , os resultados da f f t se repetem, de forma espelhada.
  2. O primeiro pico ocorre a uma frequência de 33,11   H z e o segundo, a 466,9   H z . Segundo o teorema de amostragem de Nyquist, os picos de sinais periódicos no domínio da frequência ocorrem na frequência máxima do sinal no domínio do tempo quando a frequência de amostragem é pelo menos o dobro da frequência da onda.
  3. O primeiro pico ocorre a uma frequência de 3 1 , 46   H z e o segundo, a 46 8 , 5   H z . Os picos ocorrem nessa frequência por causa do teorema de amostragem de Nyquist.
  4. A frequência onde ocorrem os picos é diferente porque o número de pontos da amostra é diferente. A letra g, que tem o espectro de x ( t ) com o dobro de pontos, é a estimativa mais precisa. Isso é evidenciado pelo fato de o primeiro pico da letra g ocorre em uma frequência ( 31,46   H z ) mais próxima à frequência de x t ( f ≅ 31,831   H z ). Para melhorar o resultado, podemos diminuir o período T de amostragem, ou seja, podemos aumentar a frequência de amostragem F s . Isso faz com que tenhamos mais pontos de medição, deixando o resultado mais preciso.