Восстановление разреженного сигнала с использованием Ортогонального Метода Сопоставления

Beginner

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

Введение

Orthogonal Matching Pursuit (OMP) - это метод восстановления разреженного сигнала из шумного измерения, закодированного с использованием словаря. В этом лабораторном занятии мы будем использовать scikit-learn для реализации OMP для восстановления разреженного сигнала из шумного измерения.

Советы по использованию ВМ

После завершения запуска ВМ нажмите в верхнем левом углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Импорт библиотек

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

Генерация данных

n_components, n_features = 512, 100
n_nonzero_coefs = 17

## генерируем данные

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

## искажаем чистый сигнал
y_noisy = y + 0.05 * np.random.randn(len(y))

Построение графика разреженного сигнала

plt.figure(figsize=(7, 7))
plt.subplot(4, 1, 1)
plt.xlim(0, 512)
plt.title("Разреженный сигнал")
plt.stem(idx, w[idx])

Построение графика восстановления без шума

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("Восстановленный сигнал из измерений без шума")
plt.stem(idx_r, coef[idx_r])

Построение графика восстановления с шумом

omp.fit(X, y_noisy)
coef = omp.coef_
(idx_r,) = coef.nonzero()
plt.subplot(4, 1, 3)
plt.xlim(0, 512)
plt.title("Восстановленный сигнал из измерений с шумом")
plt.stem(idx_r, coef[idx_r])

Построение графика восстановления с шумом с количеством ненулевых элементов, заданным кросс-валидацией

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("Восстановленный сигнал из измерений с шумом с использованием кросс-валидации")
plt.stem(idx_r, coef[idx_r])

plt.subplots_adjust(0.06, 0.04, 0.94, 0.90, 0.20, 0.38)
plt.suptitle("Восстановление разреженного сигнала с использованием Ортогонального Метода Сопоставления", fontsize=16)
plt.show()

Резюме

В этом практическом занятии мы научились использовать Ортогональный Метод Сопоставления (OMP) для восстановления разреженного сигнала из зашумленных измерений, закодированных с использованием словаря. Мы использовали scikit-learn для реализации OMP и генерации разреженного кодированного сигнала. Мы также построили график разреженного сигнала, восстановление без шума, восстановление с шумом и восстановление с шумом с количеством ненулевых элементов, заданным кросс-валидацией.