Graficación de Espectrograma con Matplotlib

PythonPythonBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderemos a crear un gráfico de espectrograma utilizando Matplotlib. Un espectrograma es una representación visual del espectro de frecuencias de una señal a medida que varía con el tiempo. Los espectrogramas se utilizan comúnmente para analizar el contenido de frecuencias de una señal a lo largo del tiempo, por ejemplo, en el reconocimiento de voz, el análisis de música y el procesamiento de señales de audio. Utilizaremos Python y Matplotlib para crear un gráfico de espectrograma de una señal.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.

Importar bibliotecas

Comenzaremos importando las bibliotecas necesarias: NumPy y Matplotlib.

import matplotlib.pyplot as plt
import numpy as np

Generar señal

A continuación, generaremos una señal para graficar. En este ejemplo, crearemos una señal que es la suma de dos ondas senoidales con diferentes frecuencias, y un poco de ruido aleatorio.

## 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

Generar espectrograma

Ahora generaremos un gráfico de espectrograma de la señal. Utilizaremos el método specgram de la clase Axes de Matplotlib para generar el espectrograma. Este método devuelve cuatro objetos: Pxx, freqs, bins e im. Pxx es el periodograma, freqs es el vector de frecuencias, bins es el centro de los intervalos de tiempo e im es la instancia AxesImage que representa los datos en el gráfico.

NFFT = 1024  ## la longitud de los segmentos de ventanado
Fs = int(1.0 / dt)  ## la frecuencia de muestreo

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 el gráfico

Podemos personalizar el gráfico agregando títulos, etiquetas de eje y mapas de colores.

fig, (ax1, ax2) = plt.subplots(nrows=2)
ax1.set_title('Señal en el dominio del tiempo')
ax1.set_xlabel('Tiempo (s)')
ax1.set_ylabel('Amplitud')
ax1.plot(t, x)

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

Mostrar el gráfico

Finalmente, mostraremos el gráfico.

plt.show()

Resumen

En este laboratorio, aprendimos cómo crear un gráfico de espectrograma utilizando Matplotlib. Generamos una señal y utilizamos el método specgram de la clase Axes de Matplotlib para generar el gráfico de espectrograma. También personalizamos el gráfico agregando títulos, etiquetas de eje y mapas de colores. Los espectrogramas son útiles para analizar el contenido de frecuencia de una señal a lo largo del tiempo y se utilizan comúnmente en el reconocimiento de voz, el análisis de música y el procesamiento de señales de audio.