Exercícios Resolvidos de Transformada de Fourier

Ver Teoria

Enunciado

Neste exercício, você encontrará o conteúdo de espectro e frequência do seu próprio sinal de voz.

  1. Vá ao site https://online-voice-recorder.com/pt/ e grave uma fala sua. Você pode dizer o que quiser ou ler a frase abaixo:
  2. “No Responde Aí, é como se você estivesse estudando do lado daquele amigo que sabe tudo.”

  3. Escute ao sinal do seu áudio e então leia-o no MATLAB usando a função a u d i o r e a d ( ) .
  4. Determine o espectro de frequência do sinal de voz.
  5. Plote o sinal no domínio do tempo e no domínio da frequência no mesmo gráfico, como na figura abaixo:

Passo 1

O exercício pede para gravarmos nossa própria voz e entrarmos com o arquivo de áudio no MATLAB (por meio de uma função que vamos conhecer no exercício de hoje, a u d i o r e a d ( ) ) para vermos o sinal da nossa voz no domínio do tempo e no domínio da frequência.

Nossa voz, quando gravada, está no domínio do tempo. Para convertê-la para o domínio da frequência, usaremos a função f f t ( ) .

Passo 2

Vamos começar pela letra a. Vamos no site recomendado pelo enunciado para gravarmos nossa voz. Ao abrir o site no navegador, você verá que tem um botão vermelho (indicado pela seta na figura abaixo), no qual você deve clicar para iniciar a gravação:

Ao iniciar a gravação, fale a frase que desejar ou a sugerida pelo enunciado. Para encerrar a gravação, aperte o botão de “Stop” no site (destacado abaixo).

Você pode escutar sua gravação antes de salvar o áudio em formato mp3, clicando no botão destacado abaixo.

Salve o áudio na pasta onde você salvará o script do MATLAB onde você escreverá o código deste exercício.

Passo 3

Feita a letra a, vamos fazer a letra b. Primeiro, escute o áudio que você gravou. Não se preocupe, eu te espero.

Em seguida, crie um script novo no MATLAB, salve-o na pasta onde você salvou a gravação da sua voz e digite o comando:

Esta é a função a u d i o r e a d ( ) do MATLAB. Ela lê arquivos de áudio e tem como entrada um string do nome do arquivo de áudio a ser lido. No meu caso, eu salvei a gravação da minha voz como minha_voz.mp3, por isso a entrada do comando acima é ' m i n h a _ v o z . m p 3 ' . Lembre-se de alterar para o nome do seu arquivo de áudio.

A função a u d i o r e a d ( ) retorna duas saídas: o vetor y , que é o sinal do áudio do arquivo de entrada no domínio do tempo, e a frequência de amostragem F s do sinal.

Tendo concluído a letra b, vamos para a letra c.

Passo 4

Na letra c , temos que determinar o espectro de frequência do sinal de voz, isto é, analisá-la no domínio da frequência. Para isto, usaremos a função f f t ( ) do MATLAB no vetor y , obtido no passo 3, que converte sinais no domínio do tempo para o domínio da frequência.

Digite em seu script o comando:

A função f f t ( ) tem como entrada o vetor y , que contém números reais representando o sinal da gravação da nossa voz no domínio do tempo. Já a saída é um vetor Y com números complexos: é a conversão de y no domínio do tempo para o domínio da frequência. Os vetores y e Y têm a mesma quantidade de elementos.

O vetor Y é o espectro de frequência do sinal de voz, logo, a letra c está concluída.

Passo 5

Vamos resolver a letra d, que pede pra plotarmos, em um mesmo gráfico, o sinal da nossa voz no domínio do tempo e no domínio da frequência.

Vamos começar gerando as informações para plotar o sinal no domínio do tempo. Precisamos criar um vetor t que representará o domínio do tempo, em segundos, e será o eixo X do gráfico do sinal no domínio do tempo. O vetor t será criado a partir do 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 medidos na nossa gravação de voz. Em seguida, esse vetor é multiplicado por T , que é o período, em segundos, do sinal.

Precisamos, então, primeiro determinar N e T antes de calcular o vetor t .

Como N é o número de pontos medidos, ele corresponde ao número de elementos do vetor y , que é o sinal de áudio no domínio do tempo. Logo, para obter, podemos fazer N = l e n g t h ( y ) , pois a função l e n g t h ( ) retorna a quantidade de elementos de um vetor.

O período T do sinal é o inverso da frequência de amostragem F s , isto é, T   =   1 / F s . A frequência de amostragem foi obtida no passo 3, com o a u d i o r e a d ( ) .

Logo, adicione em seu script os seguintes comandos para criar o vetor t representando o domínio do tempo:

Por curiosidade: se você rodar o programa que digitou até agora e pedir ao MATLAB para ver o último elemento do vetor t , com o comando t ( e n d ) , no Command Window, você verá que ele corresponde à duração da gravação do seu áudio, em segundos. No meu caso, minha gravação tinha um pouco mais de 8 segundos:

Com os vetores t e y , conseguimos plotar o sinal da nossa voz no domínio do tempo.

Passo 6

Agora, vamos gerar as informações para plotar o espectro de frequência da gravação da nossa voz, isto é, o sinal de nossa voz no domínio da frequência.

Quando plotamos um sinal no domínio da frequência, normalmente temos no eixo vertical 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 do gráfico, 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 N elementos, correspondendo aos N pontos capturados do sinal da nossa gravaçã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 .

Com os vetores f _ d o m e m a g n , conseguimos plotar o sinal da nossa voz no domínio da frequência.

Passo 7

Pra gerar o gráfico pedido na letra d, usaremos o comando s u b p l o t do MATLAB.

Digite em seu script as seguintes linhas de código para gerar o gráfico:

Na primeira linha, com o comando s u b p l o t ( ) , pedimos ao MATLAB para dividir a janela onde serão gerados os gráficos em uma “tabela” de duas linhas e uma coluna. Em seguida, indicamos que vamos plotar o gráfico da primeira linha da “tabela”.

Na segunda linha, com o comando p l o t ( t , y ) , o gráfico do sinal da nossa voz no domínio do tempo é gerado.

Na terceira linha, 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 ] ’ ) .

Na quarta linha, indicamos que vamos plotar o segundo gráfico, na segunda linha da “tabela” criada pelo s u b p l o t .

Em seguida, na quinta linha, 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.

Finalmente, na última linha, 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 ] ’ ) .

Ao executar o programa, teremos o gráfico pedido na letra d.

Resposta

A figura abaixo contém o gráfico do sinal da gravação de áudio no domínio do tempo (gráfico acima) e o gráfico do sinal no domínio da frequência (gráfico abaixo)