Calcular la Densidad Espectral Cruzada en Python

Beginner

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

Introducción

En el procesamiento de señales, la Densidad Espectral Cruzada (Cross Spectral Density, CSD) es una medida de la correlación entre dos señales en el dominio de la frecuencia. Se utiliza para determinar cuánto están relacionadas dos señales entre sí en términos de su contenido de frecuencia. En este laboratorio, aprenderás cómo calcular la CSD de dos señales utilizando la biblioteca Matplotlib de Python.

Consejos para la MV

Después de que la máquina virtual (VM) haya terminado de iniciar, haz clic en la esquina superior izquierda para cambiar a la pestaña Notebook y acceder a Jupyter Notebook para practicar.

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

Si encuentras problemas durante el aprendizaje, no dudes en preguntar a Labby. Proporciona comentarios después de la sesión y resolveremos rápidamente el problema para ti.

Importar las bibliotecas necesarias

Necesitamos importar las siguientes bibliotecas: numpy y matplotlib.pyplot.

import matplotlib.pyplot as plt
import numpy as np

Generar señales

Necesitamos generar dos señales. Estas señales contienen una parte coherente y una parte aleatoria. La parte coherente de ambas señales tiene una frecuencia de 10 Hz. La parte aleatoria de las señales se genera utilizando ruido blanco que se pasa a través de un filtro pasa-bajos para crear ruido coloreado.

dt = 0.01
t = np.arange(0, 30, dt)

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

nse1 = np.random.randn(len(t))                 ## white noise 1
nse2 = np.random.randn(len(t))                 ## white noise 2
r = np.exp(-t / 0.05)

cnse1 = np.convolve(nse1, r, mode='same') * dt   ## colored noise 1
cnse2 = np.convolve(nse2, r, mode='same') * dt   ## colored noise 2

## two signals with a coherent part and a random part
s1 = 0.01 * np.sin(2 * np.pi * 10 * t) + cnse1
s2 = 0.01 * np.sin(2 * np.pi * 10 * t) + cnse2

Graficar las señales

Podemos graficar las dos señales generadas utilizando la función plot de Matplotlib.

fig, ax = plt.subplots()
ax.plot(t, s1, label='s1')
ax.plot(t, s2, label='s2')
ax.set_xlabel('Time')
ax.set_ylabel('Amplitude')
ax.legend()
plt.show()

Calcular la Densidad Espectral Cruzada (CSD)

Para calcular la Densidad Espectral Cruzada (Cross Spectral Density, CSD) de dos señales, necesitamos utilizar la función csd de Matplotlib. La función toma las dos señales, el número de puntos para la Transformada Rápida de Fourier (FFT) y la frecuencia de muestreo como entradas.

fig, ax = plt.subplots()
cxy, f = ax.csd(s1, s2, 256, 1. / dt)
ax.set_ylabel('CSD (dB)')
plt.show()

Interpretar los resultados

La gráfica resultante muestra la Densidad Espectral Cruzada (CSD) de las dos señales. El eje x representa la frecuencia y el eje y representa la fuerza de la correlación entre las dos señales a esa frecuencia. La gráfica muestra un pico a 10 Hz, que es la frecuencia de la parte coherente de las señales. Esto indica que las dos señales están fuertemente correlacionadas a esta frecuencia.

Resumen

En este laboratorio, aprendiste cómo calcular la Densidad Espectral Cruzada (Cross Spectral Density) de dos señales utilizando la biblioteca Matplotlib de Python. Generamos dos señales con una parte coherente y una parte aleatoria, graficamos las señales, calculamos la CSD e interpretamos los resultados. La CSD es una herramienta útil para determinar la correlación entre dos señales en el dominio de la frecuencia.