Einführung
In diesem Lab verwenden wir FastICA, um eine Blind Source Separation auf einem gemischten Signal durchzuführen. Blind Source Separation ist eine Technik, die verwendet wird, um gemischte Signale in ihre ursprünglichen unabhängigen Komponenten zu trennen. Dies ist in verschiedenen Bereichen wie Signalverarbeitung, Bildverarbeitung und Datenanalyse nützlich. Wir werden die scikit-learn-Bibliothek von Python verwenden, um ICA und PCA auf einem Beispielgemischten Signal durchzuführen.
Tipps für die virtuelle Maschine
Nachdem der Start der virtuellen Maschine abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.
Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen von Jupyter Notebook nicht automatisiert werden.
Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.
Beispiel-Daten generieren
Wir werden ein Beispielgemischtes Signal generieren, das aus drei unabhängigen Komponenten besteht. Wir werden Rauschen zum Signal hinzufügen und die Daten standardisieren. Wir werden auch eine Mischmatrix generieren, um unsere drei unabhängigen Komponenten zu mischen.
import numpy as np
from scipy import signal
np.random.seed(0)
n_samples = 2000
time = np.linspace(0, 8, n_samples)
s1 = np.sin(2 * time) ## Signal 1 : sinusförmiges Signal
s2 = np.sign(np.sin(3 * time)) ## Signal 2 : Rechtecksignal
s3 = signal.sawtooth(2 * np.pi * time) ## Signal 3: Sägezahnsignal
S = np.c_[s1, s2, s3]
S += 0.2 * np.random.normal(size=S.shape) ## Rauschen hinzufügen
S /= S.std(axis=0) ## Daten standardisieren
## Daten mischen
A = np.array([[1, 1, 1], [0.5, 2, 1.0], [1.5, 1.0, 2.0]]) ## Mischmatrix
X = np.dot(S, A.T) ## Beobachtungen generieren
ICA- und PCA-Modelle anpassen
Wir werden FastICA verwenden, um die unabhängigen Quellen zu schätzen. Anschließend berechnen wir PCA zum Vergleich.
from sklearn.decomposition import FastICA, PCA
## ICA berechnen
ica = FastICA(n_components=3, whiten="arbitrary-variance")
S_ = ica.fit_transform(X) ## Signale rekonstruieren
A_ = ica.mixing_ ## Geschätzte Mischmatrix erhalten
## Wir können das ICA-Modell durch Rückführung der Entmischung `beweisen`.
assert np.allclose(X, np.dot(S_, A_.T) + ica.mean_)
## Zum Vergleich PCA berechnen
pca = PCA(n_components=3)
H = pca.fit_transform(X) ## Signale basierend auf orthogonalen Komponenten rekonstruieren
Ergebnisse grafisch darstellen
Wir werden das ursprüngliche gemischte Signal, die ursprünglichen unabhängigen Quellen, die von ICA geschätzten Quellen und die von PCA geschätzten Quellen grafisch darstellen.
import matplotlib.pyplot as plt
plt.figure()
models = [X, S, S_, H]
names = [
"Beobachtungen (gemischtes Signal)",
"Wahre Quellen",
"Durch ICA wiederhergestellte Signale",
"Durch PCA wiederhergestellte Signale",
]
colors = ["rot", "stahlblau", "orange"]
for ii, (model, name) in enumerate(zip(models, names), 1):
plt.subplot(4, 1, ii)
plt.title(name)
for sig, color in zip(model.T, colors):
plt.plot(sig, color=color)
plt.tight_layout()
plt.show()
Zusammenfassung
Wir haben erfolgreich eine Blind Source Separation auf einem gemischten Signal mit FastICA und PCA durchgeführt. Wir haben ein Beispielgemischtes Signal generiert, das aus drei unabhängigen Komponenten besteht, Rauschen hinzugefügt und die Daten standardisiert. Anschließend haben wir eine Mischmatrix generiert, um unsere unabhängigen Komponenten zu mischen. Wir haben FastICA verwendet, um die unabhängigen Quellen zu schätzen und PCA berechnet zum Vergleich. Schließlich haben wir das ursprüngliche gemischte Signal, die ursprünglichen unabhängigen Quellen, die von ICA geschätzten Quellen und die von PCA geschätzten Quellen grafisch dargestellt.