Transformada de Fourier

Ver Todos os Exercícios

Teoria

Introdução

E aí, meu povo, tudo joia? Deixa eu te perguntar: você curte música? Não importa o gênero: sertanejo, axé, pagode ou samba, todo mundo ama uma musiquinha. Já parou pra pensar como as gravadoras fazem o tratamento do som gravado após sua banda favorita terminar as gravações no estúdio? Não?

Pois saiba que eles usam um conceito que a gente usa muito em engenharia, especialmente em tratamento de sinais. Eles usam a transformada de Fourier, que decompõe um sinal em senos e cossenos, para converter um sinal no domínio do tempo, como por exemplo o canto do vocalista ou um solo maneiro de guitarra, para o domínio da frequência.

O domínio do tempo, que pode ser dado em segundos, por exemplo, é representado por valores reais. Já o domínio da frequência é representado por valores complexos, que, por sua vez, podem ser representados por senoides que compõem o sinal.

E por que eles fazem isso? Porque às vezes pode ser muito mais fácil analisar um sinal no domínio da frequência do que no domínio do tempo. A transformada de Fourier é muito utilizada no tratamento de sinais de diversas áreas do conhecimento. Ela pode ser usada para resolver problemas de condução térmica, interpretar eletrocardiogramas, eletroencefalogramas e sinais de pressão sanguínea e até mesmo para estudar terremotos!

A função do MATLAB fft

O MATLAB tem uma função chamada f f t que calcula a transformada de Fourier de um vetor X , o qual está no domínio do tempo:

Y = f f t ( X )

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.

O vetor X pode ser alguma medição que fazemos no domínio do tempo, como a gravação de um instrumento, por exemplo. A f f t assume que os elementos do vetor X tem um passo constante (por exemplo, X = [ 0 0,5 1 1,5 ] tem passo constante igual a 0,5 ) e o vetor de saída Y tem a mesma quantidade de elementos de X .

Veja que o uso da função f f t é bem direto. Porém, antes de vermos um exemplo de aplicação da f f t , para entendermos bem como utilizá-lo, precisamos ver bem direitinho o que é esse negócio de “domínio do tempo” e “domínio da frequência”.

Domínio do Tempo versus Domínio da Frequência

No mundo real, trabalhamos com sinais analógicos, que são funções f ( t ) contínuas no tempo, como no caso da gravação de um solo de guitarra. Para que este sinal contínuo seja processado por um computador, ele deve ser amostrado em um período de T segundos, gerando assim um sinal digital derivado do sinal analógico original.

Digamos que você fez uma captura de sinal com 8 pontos de medição, registrados a cada 0,1   s . Normalmente se começa a amostragem em 0   s , logo, este seria o domínio do tempo para esta medição:

Neste caso, o período é T = 0,1   s .

Lembra láááá das aulas de ondulatória de Física, que a frequência f é o inverso do período? Em outras palavras:

f = 1 T

Podemos dizer então que a frequência de amostragem F s da nossa medição é igual a:

F s = 1 0.1   s = 10   H z

O domínio da frequência normalmente também se inicia em 0 e as frequências seguintes são obtidas somando um Δ f constante a elas, definido por:

Δ f = F s N

Onde F s é a frequência de amostragem e N o número de pontos dos dados originais. Na nossa medição, temos N = 8 .

Para nosso exemplo, tendo F s = 10   H z e N = 8 , o domínio da frequência seria igual a:

O domínio da frequência gerado por f f t corresponde a uma frequência com separação de Δ f = F s / N .

Existe um teorema chamado de teorema de amostragem de Nyquist, que diz que a frequência de amostragem deve ser maior que o dobro da frequência máxima do sinal no domínio do tempo. Desta forma, o sinal digital é mais fiel ao sinal analógico.

Por exemplo, no nosso exemplo, como nossa frequência de amostragem é F s = 10   H z , o ideal é que o sinal medido tenha uma frequência de até 5   H z .

É importante entender bem como se determina o domínio da frequência para poder trabalhar com a saída da função f f t . 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.

Exemplo no MATLAB

Agora que conhecemos como funciona esse negócio de domínio do tempo e domínio da frequência, vamos ver como usamos a f f t no MATLAB.

Digamos que você registrou uma onda senoidal fazendo N = 2000 medições a cada T = 0.001   s . Essa onda tem uma amplitude A = 1 e uma frequência de f = 20   H z . Ela pode ser descrita pela seguinte expressão:

X = A sin ⁡ 2 π f t

onde t é o tempo de medição do sinal, que pode ser calculado a partir do período T .

Ah, não confunda a frequência da onda senoidal ( f = 20   H z ) com a frequência de amostragem F s ou com o Δ f . Apesar de se tratarem de frequências, elas representam coisas diferentes: usamos F s e Δ f para construir o dommínio da frequência, já a frequência f = 20   H z da onda senoidal representa o número de oscilações dela, por um certo período de tempo.

Vamos construir essa onda senoidal no MATLAB para vermos a carinha dela? Em um script novo, entre as linhas de código:

Com estes comandos, entramos com o número de pontos medidos N , o período T , a amplitude A e a frequência da onda senoidal f .

Para criar a onda senoidal, devemos criar um vetor representando o tempo em segundos. Ele é criada a partir do período T = 0,001   s , com o comando:

Com este comando, cria-se primeiro um vetor que vai de 0 a N - 1 , com passo de 1 ( 0 : N - 1 ). Este vetor tem 2000 elementos, correspondendo aos N = 2000 pontos de medição. Lembra que esses 2000   pontos foram registrados a cada T = 0,001   s ? Por isso, esse vetor é multiplicado por T . Desta forma, é criado o domínio do tempo, que vai de 0 a N - 1 * T = 1999 * 0,001 = 1,999   s .

Após entrar as informações da onda senoidal, vamos entrar com a sua expressão no script:

Ali já pedimos também pro MATLAB plotar esta curva senoidal no domínio do tempo, usando p l o t ( t , X ) . Indicamos que o eixo horizontal do gráfico está no domínio do tempo com o comando x l a b e l ( ' t   [ s ] ' ) . Rodando o código, vemos que ela tem essa carinha:

Vamos ver essa onda no domínio da frequência. Digite no seu código a função f f t :

Ela terá como entrada o vetor X , que corresponde à nossa onda senoidal no domínio do tempo, e retornará um vetor Y da onda senoidal no domínio da frequência.

Como dissemos acima, a saída de f f t é um vetor cujos elementos são números complexos, no formato:

y = y r + i y i

Onde x r é a componente real e y i , a imaginária. A representação de um sinal no domínio da frequência, o vetor Y , carrega a informação da magnitude do sinal em cada frequência.

A magnitude do sinal é dada pela magnitude do número complexo, que á calculada como:

y = y r 2 + y i 2

Vamos aplicar esse conceito na nossa saída Y de f f t . No nosso script, entre 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.

É interessante gerarmos o gráfico de m a g n para vermos como ele ficou. Vamos gerar esse gráfico no domínio da frequência. Para criar o eixo horizontal do gráfico, entre com as linhas de código:

Na primeira linha, calculamos a frequência de amostragem F s , que vimos lá em cima.

Na segunda linha, calculamos o Δ f , que também vimos lá em cima. O Δ f é 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 2000 elementos, correspondendo aos N = 2000 pontos de medição. 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 .

Tendo criado o domínio da frequência, vamos usar novamente a função p l o t para gerar o gráfico:

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, com o comando p l o t ( f _ d o m ( 1 : N / 2 ) , m a g n ( 1 : N / 2 ) ) , o gráfico da magnitude de Y , no domínio da frequência, é efetivamente gerado. 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 fazermos a análise dos resultados.

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 | ' ) .

Ao rodarmos o programa, geramos este segundo gráfico:

No gráfico, já marquei ali o ponto do pico de magnitude, para ver as coordenadas dele. Veja que ele ocorre em uma frequência igual a 20   H z , exatamente a mesma frequência da onda senoidal. Isso ocorre pois usamos frequência de amostragem maior que o dobro da frequência da onda. Se você olhar a variável F s , representando a frequência amostral, verá que F s = 1000   H z , muito maior que o dobro da frequência de 20   H z da onda senoidal.

Caso usássemos uma frequência de amostragem menor ou igual a 40   H z , não obedeceríamos ao teorema de Nyquist e não veríamos esse comportamento.

Aplicamos o conceito de magnitude no vetor Y dado por f f t para estudarmos o comportamento do sinal. No exemplo da onda senoidal, vemos pelo gráfico da magnitude de Y que o sinal é periódico.

“Tá, mas já dava pra ver isso no domínio do tempo da onda senoidal”, você deve estar pensando. Por se tratar de uma onda simples e bem conhecida, realmente, poderíamos já ver lá. Mas tem casos em que os sinais são bem mais complexos e precisamos fazer essa análise da magnitude no domínio da frequência para identificar algum comportamento. É o caso, por exemplo, da análise de vibrações de um prédio durante um terremoto.

E aí, curtiu a aula? É um assunto bem complexo, por isso é bom praticar bastante. Bora fazer os exercícios ;D

Domínio do Tempo versus Domínio da Frequência

Exemplo no MATLAB

Exercícios Resolvidos

Exercício Resolvido #1

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 .

Exercício Resolvido #2

Gere 128 pontos para o seguinte sinal:

g = 2 sin ⁡ 2 π 50 t

Plote o sinal no domínio do tempo. Usando o método da transformada de Fourier, 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 senoidal, 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 senoidal normalmente tem o formato:
  • S = A sin ⁡ 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 = 2 ;
  • E que a frequência do sinal é de f = 50   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 = 50   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 ; a amplitude da onda senoidal é armazenada na variável A ; e, finalmente, a frequência do sinal é armazenada em f .

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 g , podemos plotar o sinal da onda senoidal 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 , g ) , 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 senoidal, indicado por y l a b e l ( ' g ' ) .

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

Pronto! O primeiro item pedido pelo exercício está feito!

Passo 3

A segunda coisa que o exercício pede é usarmos a transformada de Fourier no sinal para obtermos a onda senoidal 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 g , que contém números reais representando o sinal g = 2 sin ⁡ 2 π 50 t no domínio do tempo. Já a saída é um vetor Y com números complexos: é a conversão de g no domínio do tempo para o domínio da frequência. Os vetores g e Y têm a mesma quantidade de elementos.

O segundo item pedido pelo exercício está feito (esse foi bem diretão XD)

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 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 | ' ) .

Vamos ver a cara do sinal do domínio da frequência? Executando o programa, temos:

Voilà! Terceiro item pedido pelo exercício feito ;D

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: f = 50   H z .

Vamos clicar no pico do gráfico gerado para ver suas coordenadas:

O pico ocorre em 46,88   H z , que está bem próximo de 50   H z . Logo, o pico do sinal ocorre onde era esperado.

Se quiser, faça alguns testes aumentando o N , você verá que a frequência onde ocorre o pico ficará mais próxima de 50   H z , até se tornar igual a 50   H z .

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:

O pico do sinal ocorre onde era esperado no domínio da frequência: próximo de 50   H z , que é a frequência do sinal g = 2 sin ⁡ 2 π 50 t .

Exercício Resolvido #3

Gere 128 pontos para o seguinte sinal:

h = c o s c o s   250 π t   - s i n s i n   200 π 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 frequê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 frequê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 é composta por ondas cossenodal e seinodal, 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 ;
  • Chamando de:
  • 250 π t   e h 2 = s i n s i n   200 π t  

    Temos:

    h = h 1 - h 2

  • Uma onda cossenoidal normalmente tem o formato:
  • C = A c o s c o s   2 π f t  

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

  • Logo, podemos dizer que a amplitude de h 1 é de A 1 = 1 ;
  • Já a frequência de h 1 é:
  • 2 π f 1 = 250 π