Saat ini saya membuat sinyal yang berbeda menggunakan Matlab, mencampurnya dengan mengalikannya dengan matriks pencampuran A, dan kemudian mencoba untuk mendapatkan kembali sinyal asli menggunakan FastICA .
Sejauh ini, sinyal yang dipulihkan benar-benar buruk jika dibandingkan dengan yang asli, yang tidak seperti yang saya harapkan.
Saya mencoba melihat apakah saya melakukan kesalahan. Sinyal yang saya hasilkan adalah sebagai berikut:
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
Satu syarat untuk ICA untuk menjadi sukses adalah bahwa paling banyak satu sinyal adalah Gaussian, dan saya telah mengamati ini dalam generasi sinyal saya.
Namun, kondisi lain adalah bahwa semua sinyal secara statistik independen.
Yang saya tahu adalah bahwa ini berarti bahwa, mengingat dua sinyal A & B, mengetahui satu sinyal tidak memberikan informasi berkaitan dengan yang lain, yaitu: P (A | B) = P (A) di mana P adalah probabilitas .
Sekarang pertanyaan saya adalah ini: Apakah sinyal saya secara statistik independen? Apakah ada cara saya dapat menentukan ini? Mungkin beberapa properti yang harus diperhatikan?
Hal lain yang saya perhatikan adalah ketika saya menghitung nilai eigen dari matriks kovarians (dihitung untuk matriks yang berisi sinyal campuran), eigenspectrum tampaknya menunjukkan bahwa hanya ada satu komponen utama (utama) . Apa maksudnya ini? Bukankah seharusnya ada 5, karena saya memiliki 5 (seharusnya) sinyal independen?
Misalnya, saat menggunakan matriks pencampuran berikut:
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
Nilai eigen adalah: 0.0000 0.0005 0.0022 0.0042 0.0345
(hanya 4!)
Bila menggunakan matriks identitas sebagai matriks pencampuran (yaitu sinyal campuran adalah sama dengan yang asli), eigenspectrum adalah: 0.0103 0.0199 0.0330 0.0811 0.1762
. Masih ada satu nilai yang jauh lebih besar daripada yang lain ..
Terima kasih untuk bantuannya.
Saya minta maaf jika jawaban atas pertanyaan saya sangat jelas, tetapi saya benar-benar baru dalam statistik, ICA dan Matlab. Terima kasih lagi.
EDIT
Saya memiliki 500 sampel setiap sinyal, dalam kisaran [0,2, 100], dalam langkah-langkah 0,2, yaitu x = 0: 0,1: 100.
Juga, mengingat Model ICA: X = As + n (saya tidak menambahkan suara saat ini), saya mengacu pada eigenspectrum dari transpos X, yaitu eig (cov (X ')).
MEMPERBARUI
Seperti yang disarankan (lihat komentar), saya mencoba FastICA hanya pada 2 sinyal. Hasilnya cukup bagus (lihat gambar di bawah). Matriks pencampuran yang digunakan adalah A = [0.75 0.25; 0.25 0.75]
. Namun, eigenspectrum 0.1657 0.7732
masih menunjukkan hanya satu komponen utama.
Oleh karena itu pertanyaan saya intinya adalah sebagai berikut: Apa fungsi / persamaan / properti yang dapat saya gunakan untuk memeriksa apakah sejumlah vektor sinyal secara statistik independen?