Generando y visualizando señales senoidales con Python

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

Esta práctica te guiará a través de la generación y visualización de una señal senoidal con ruido aditivo utilizando la librería Matplotlib de Python. En particular, crearemos diferentes representaciones del espectro de la señal utilizando la transformada rápida de Fourier (FFT).

Consejos sobre la VM

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

En ocasiones, es posible que tengas 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 tienes problemas durante el aprendizaje, no dudes en preguntar a Labby. Proporciona retroalimentación después de la sesión y resolveremos rápidamente el problema para ti.

Importar las bibliotecas necesarias

En primer lugar, necesitamos importar las bibliotecas necesarias. Vamos a utilizar NumPy y Matplotlib.

import matplotlib.pyplot as plt
import numpy as np

Establecer variables

A continuación, estableceremos las variables para nuestra señal. Utilizaremos un intervalo de muestreo de 0,01, lo que nos da una frecuencia de muestreo de 100 Hz. Crearemos una matriz de tiempo desde 0 hasta 10 segundos con un paso de 0,01 segundos. También generaremos ruido utilizando la función randn de NumPy y lo convolucionaremos con una función de decaimiento exponencial para crear una señal ruidosa.

np.random.seed(0)

dt = 0.01  ## intervalo de muestreo
Fs = 1 / dt  ## frecuencia de muestreo
t = np.arange(0, 10, dt)

## generar ruido:
nse = np.random.randn(len(t))
r = np.exp(-t / 0.05)
cnse = np.convolve(nse, r) * dt
cnse = cnse[:len(t)]

s = 0.1 * np.sin(4 * np.pi * t) + cnse  ## la señal

Crear gráficos

Ahora crearemos los gráficos para nuestras diferentes representaciones del espectro. Utilizaremos la función subplots de Matplotlib para crear una cuadrícula de 3x2 de gráficos. Graficaremos la señal en el primer gráfico y los diferentes tipos de espectro en los gráficos restantes.

fig, axs = plt.subplots(nrows=3, ncols=2, figsize=(7, 7))

## graficar la señal en el tiempo:
axs[0, 0].set_title("Señal")
axs[0, 0].plot(t, s, color='C0')
axs[0, 0].set_xlabel("Tiempo")
axs[0, 0].set_ylabel("Amplitud")

## graficar diferentes tipos de espectro:
axs[1, 0].set_title("Espectro de Magnitud")
axs[1, 0].magnitude_spectrum(s, Fs=Fs, color='C1')

axs[1, 1].set_title("Espectro de Magnitud Logarítmica")
axs[1, 1].magnitude_spectrum(s, Fs=Fs, scale='dB', color='C1')

axs[2, 0].set_title("Espectro de Fase ")
axs[2, 0].phase_spectrum(s, Fs=Fs, color='C2')

axs[2, 1].set_title("Espectro de Ángulo")
axs[2, 1].angle_spectrum(s, Fs=Fs, color='C2')

axs[0, 1].remove()  ## no mostrar el eje vacío

fig.tight_layout()
plt.show()

Interpretar los gráficos

Podemos ver que el primer gráfico muestra la señal en el dominio del tiempo. El segundo gráfico muestra el espectro de magnitud de la señal, que nos dice la fuerza de los diferentes componentes de frecuencia en la señal. El tercer gráfico muestra el espectro de magnitud logarítmica, que es útil para visualizar todo el espectro cuando hay valores muy grandes y muy pequeños. El cuarto gráfico muestra el espectro de fase, que nos dice el desplazamiento de fase de cada componente de frecuencia en la señal. Finalmente, el quinto gráfico muestra el espectro de ángulo, que es similar al espectro de fase pero utiliza radianes en lugar de grados.

Resumen

En este laboratorio, generamos una señal senoidal con ruido aditivo y creamos diferentes representaciones del espectro de la señal utilizando la biblioteca Matplotlib de Python. Aprendimos cómo interpretar los diferentes tipos de espectro y cómo pueden ser útiles en el análisis de señales.