Recuperación de señal esparsa con Orthogonal Matching Pursuit

Beginner

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

Introducción

La Búsqueda de Perseguimiento Ortogonal (OMP, por sus siglas en inglés) es un método para recuperar una señal esparsa a partir de una medición ruidosa codificada con un diccionario. En este laboratorio, usaremos scikit-learn para implementar la OMP y recuperar una señal esparsa a partir de una medición ruidosa.

Consejos sobre la VM

Una vez que se haya iniciado 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

import matplotlib.pyplot as plt
import numpy as np
from sklearn.linear_model import OrthogonalMatchingPursuit
from sklearn.linear_model import OrthogonalMatchingPursuitCV
from sklearn.datasets import make_sparse_coded_signal

Generar los datos

n_components, n_features = 512, 100
n_nonzero_coefs = 17

## generar los datos

## y = Xw
## |x|_0 = n_nonzero_coefs

y, X, w = make_sparse_coded_signal(
    n_samples=1,
    n_components=n_components,
    n_features=n_features,
    n_nonzero_coefs=n_nonzero_coefs,
    random_state=0,
)
X = X.T

(idx,) = w.nonzero()

## distorsionar la señal limpia
y_noisy = y + 0.05 * np.random.randn(len(y))

Graficar la señal esparsa

plt.figure(figsize=(7, 7))
plt.subplot(4, 1, 1)
plt.xlim(0, 512)
plt.title("Señal esparsa")
plt.stem(idx, w[idx])

Graficar la reconstrucción sin ruido

omp = OrthogonalMatchingPursuit(n_nonzero_coefs=n_nonzero_coefs)
omp.fit(X, y)
coef = omp.coef_
(idx_r,) = coef.nonzero()
plt.subplot(4, 1, 2)
plt.xlim(0, 512)
plt.title("Señal recuperada a partir de mediciones sin ruido")
plt.stem(idx_r, coef[idx_r])

Graficar la reconstrucción con ruido

omp.fit(X, y_noisy)
coef = omp.coef_
(idx_r,) = coef.nonzero()
plt.subplot(4, 1, 3)
plt.xlim(0, 512)
plt.title("Señal recuperada a partir de mediciones con ruido")
plt.stem(idx_r, coef[idx_r])

Graficar la reconstrucción con ruido con el número de ceros no nulos establecido por CV

omp_cv = OrthogonalMatchingPursuitCV()
omp_cv.fit(X, y_noisy)
coef = omp_cv.coef_
(idx_r,) = coef.nonzero()
plt.subplot(4, 1, 4)
plt.xlim(0, 512)
plt.title("Señal recuperada a partir de mediciones con ruido con CV")
plt.stem(idx_r, coef[idx_r])

plt.subplots_adjust(0.06, 0.04, 0.94, 0.90, 0.20, 0.38)
plt.suptitle("Recuperación de señal esparsa con Orthogonal Matching Pursuit", fontsize=16)
plt.show()

Resumen

En este laboratorio, hemos aprendido cómo usar Orthogonal Matching Pursuit (OMP) para recuperar una señal esparsa a partir de una medición ruidosa codificada con un diccionario. Hemos utilizado scikit-learn para implementar OMP y generar una señal codificada esparsa. También hemos trazado la señal esparsa, la reconstrucción sin ruido, la reconstrucción con ruido y la reconstrucción con ruido con el número de ceros no nulos establecido por CV.