Şu anda Matlab'ı kullanarak farklı sinyaller oluşturuyorum, bunları bir karıştırma matrisi A ile çarparak karıştırıyorum ve daha sonra FastICA kullanarak orijinal sinyalleri geri almaya çalışıyorum .
Şimdiye kadar, kurtarılan sinyaller orijinal sinyallerle karşılaştırıldığında gerçekten kötü, bu beklediğim değildi.
Yanlış bir şey yapıp yapmadığımı görmeye çalışıyorum. Ürettiğim sinyaller şunlardır:
s1 = (-x.^2 + 100*x + 500) / 3000; % quadratic
s2 = exp(-x / 10); % -ve exponential
s3 = (sin(x)+ 1) * 0.5; % sine
s4 = 0.5 + 0.1 * randn(size(x, 2), 1); % gaussian
s5 = (sawtooth(x, 0.75)+ 1) * 0.5; % sawtooth
ICA'nın başarılı olması için bir koşul, en fazla bir sinyalin Gauss olması ve bunu sinyal üretimimde gözlemledim.
Bununla birlikte, başka bir koşul, tüm sinyallerin istatistiksel olarak bağımsız olmasıdır.
Tek bildiğim, bunun, iki A ve B sinyali verildiğinde, bir sinyalin bilinmesi diğeriyle ilgili herhangi bir bilgi vermediği anlamına gelir, yani: P (A | B) = P (A), burada P olasılıktır .
Şimdi sorum şu: Sinyallerim istatistiksel olarak bağımsız mı? Bunu belirlememin bir yolu var mı? Belki de gözlemlenmesi gereken bazı özellikler?
Fark ettiğim başka bir şey, kovaryans matrisinin (karışık sinyalleri içeren matris için hesaplanan) özdeğerlerini hesapladığımda , eigenspektrumun sadece bir (ana) ana bileşen olduğunu gösteriyor gibi görünüyor . Bu gerçekten ne anlama geliyor? 5 (sözde) bağımsız sinyale sahip olduğum için 5 olmamalı mı?
Örneğin, aşağıdaki karıştırma matrisini kullanırken:
A =
0.2000 0.4267 0.2133 0.1067 0.0533
0.2909 0.2000 0.2909 0.1455 0.0727
0.1333 0.2667 0.2000 0.2667 0.1333
0.0727 0.1455 0.2909 0.2000 0.2909
0.0533 0.1067 0.2133 0.4267 0.2000
Özdeğerler: 0.0000 0.0005 0.0022 0.0042 0.0345
(sadece 4!)
Karıştırma matris olarak kimlik matrisi kullanıldığında (yani, karışık sinyalleri orijinal olanlar ile aynıdır), eigenspectrum olup: 0.0103 0.0199 0.0330 0.0811 0.1762
. Hala diğerlerinden çok daha büyük bir değer var.
Yardımın için teşekkürler.
Sorularımın cevapları acı verici bir şekilde açıksa özür dilerim, ancak istatistikler, ICA ve Matlab için gerçekten yeniyim. Tekrar teşekkürler.
DÜZENLE
Her sinyalden [0.2, 100] aralığında 0.2'lik adımlarla 500 örneğim var, yani x = 0: 0.1: 100.
Ayrıca, ICA Modeli göz önüne alındığında: X = As + n (şu anda herhangi bir gürültü eklemiyorum), X'in, yani eig (cov (X ')) devri eigenspektrumundan bahsediyorum.
GÜNCELLEME
Önerildiği gibi (yorumlara bakın), FastICA'yı sadece 2 sinyal üzerinde denedim . Sonuçlar oldukça iyiydi (aşağıdaki resme bakınız). Kullanılan karıştırma matrisi idi A = [0.75 0.25; 0.25 0.75]
. Bununla birlikte, eigenspectrum 0.1657 0.7732
hala sadece bir ana ana bileşen gösterdi.
Dolayısıyla sorum şu şekilde kayboluyor: Bir dizi sinyal vektörünün istatistiksel olarak bağımsız olup olmadığını kontrol etmek için hangi işlevi / denklemi / özelliği kullanabilirim?