Criação de Gráficos de Espectrograma com Matplotlib

Beginner

This tutorial is from open-source community. Access the source code

Introdução

Neste laboratório, aprenderemos como criar um gráfico de espectrograma usando Matplotlib. Um espectrograma é uma representação visual do espectro de frequências de um sinal, conforme ele varia com o tempo. Espectrogramas são comumente usados para analisar o conteúdo de frequência de um sinal ao longo do tempo, como em reconhecimento de fala, análise musical e processamento de sinais de áudio. Usaremos Python e Matplotlib para criar um gráfico de espectrograma de um sinal.

Dicas para a VM

Após a inicialização da VM, clique no canto superior esquerdo para mudar para a aba Notebook para acessar o Jupyter Notebook para praticar.

Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão, e resolveremos o problema prontamente para você.

Importar Bibliotecas

Começaremos importando as bibliotecas necessárias: NumPy e Matplotlib.

import matplotlib.pyplot as plt
import numpy as np

Gerar Sinal

Em seguida, geraremos um sinal para plotar. Neste exemplo, criaremos um sinal que é a soma de duas ondas senoidais com diferentes frequências e algum ruído aleatório.

## Fixing random state for reproducibility
np.random.seed(19680801)

dt = 0.0005
t = np.arange(0.0, 20.0, dt)
s1 = np.sin(2 * np.pi * 100 * t)
s2 = 2 * np.sin(2 * np.pi * 400 * t)

## create a transient "chirp"
s2[t <= 10] = s2[12 <= t] = 0

## add some noise into the mix
nse = 0.01 * np.random.random(size=len(t))

x = s1 + s2 + nse  ## the signal

Gerar Espectrograma

Agora, geraremos um gráfico de espectrograma do sinal. Usaremos o método specgram da classe Axes do Matplotlib para gerar o espectrograma. Este método retorna quatro objetos: Pxx, freqs, bins e im. Pxx é o periodograma, freqs é o vetor de frequência, bins são os centros dos intervalos de tempo e im é a instância AxesImage que representa os dados no gráfico.

NFFT = 1024  ## the length of the windowing segments
Fs = int(1.0 / dt)  ## the sampling frequency

fig, (ax1, ax2) = plt.subplots(nrows=2)
ax1.plot(t, x)
Pxx, freqs, bins, im = ax2.specgram(x, NFFT=NFFT, Fs=Fs, noverlap=900)

Personalizar o Gráfico

Podemos personalizar o gráfico adicionando títulos, rótulos de eixos e mapas de cores.

fig, (ax1, ax2) = plt.subplots(nrows=2)
ax1.set_title('Time Domain Signal')
ax1.set_xlabel('Time (s)')
ax1.set_ylabel('Amplitude')
ax1.plot(t, x)

ax2.set_title('Spectrogram')
ax2.set_xlabel('Time (s)')
ax2.set_ylabel('Frequency (Hz)')
im = ax2.specgram(x, NFFT=NFFT, Fs=Fs, noverlap=900, cmap='viridis')
fig.colorbar(im[3], ax=ax2)

Exibir o Gráfico

Finalmente, exibiremos o gráfico.

plt.show()

Resumo

Neste laboratório, aprendemos como criar um gráfico de espectrograma usando Matplotlib. Geramos um sinal e usamos o método specgram da classe Axes do Matplotlib para gerar o gráfico de espectrograma. Também personalizamos o gráfico adicionando títulos, rótulos de eixos e mapas de cores. Espectrogramas são úteis para analisar o conteúdo de frequência de um sinal ao longo do tempo e são comumente usados em reconhecimento de fala, análise musical e processamento de sinais de áudio.