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?
sumber
Jawaban:
Sinyal 3 dan 5 tampaknya sangat berkorelasi - mereka berbagi harmonik pertama mereka. Jika saya diberi dua campuran itu, saya tidak akan bisa memisahkan mereka, saya akan tergoda untuk menempatkan harmonik umum sebagai satu sinyal dan harmonik yang lebih tinggi sebagai sinyal kedua. Dan saya akan salah! Ini mungkin menjelaskan nilai eigen yang hilang.
Sinyal 1 dan 2 juga tidak terlihat independen.
"Pemeriksaan kesehatan" yang cepat dan kotor untuk independensi dua seri adalah dengan melakukan plot (x, y) dari satu sinyal terhadap yang lain:
dan kemudian melakukan plot (x, y) yang sama dengan satu sinyal yang dikocok:
Jika kedua plot memiliki tampilan yang berbeda, sinyal Anda tidak independen. Lebih umum, jika plot (x, y) dari data menunjukkan "fitur", disimetri dll, itu pertanda buruk.
Tes yang tepat untuk independensi (dan itu adalah fungsi objektif yang digunakan dalam loop pengoptimalan ICA) termasuk, misalnya, informasi timbal balik.
ICA memulihkan sinyal yang paling independen dengan pencampuran linier yang menghasilkan data input Anda . Ini akan berfungsi sebagai metode pemisahan sinyal dan memulihkan sinyal asli hanya jika mereka independen maksimal sesuai dengan kriteria optimasi yang digunakan dalam implementasi ICA Anda.
sumber
Saya bukan ahli ICA, tapi saya bisa memberi tahu Anda sedikit tentang kemerdekaan.
Seperti yang disebutkan oleh beberapa komentar, independensi statistik antara dua variabel acak dapat secara kasar diartikan sebagai "jumlah informasi yang diamati oleh satu variabel tentang variabel lain".
Berikut adalah beberapa kode matlab yang akan menghasilkan dua sinyal independen dari distribusi bersama yang dibangun, dan dua dari distribusi bersama non-independen, dan kemudian menghitung informasi timbal balik dari sambungan tersebut.
Fungsi "computeMIplugin.m" adalah fungsi sederhana yang saya tulis yang menghitung informasi timbal balik menggunakan rumus penjumlahan di atas.
Sekali lagi, ini mengasumsikan Anda memiliki perkiraan yang baik dari distribusi bersama (bersama dengan asumsi blithe lainnya), tetapi harus berguna sebagai patokan.
sumber
Seperti disebutkan di atas, kedua sinyal 3 dan 5 tampaknya sangat berkorelasi dan memiliki periode yang sama.
Kita dapat memikirkan dua sinyal yang dikorelasikan jika kita dapat menggeser salah satu sumber ke kiri atau ke kanan dan menambah atau mengurangi amplitudo sehingga pas di atas sumber lainnya. Catatan kami tidak mengubah frekuensi sumber, kami hanya melakukan pergeseran fase dan amplitudo.
Dalam kasus di atas, kita dapat menggeser sumber 3 sehingga puncaknya bertepatan dengan sumber 5. Ini adalah hal yang akan mengacaukan ekstraksi sumber ketika menggunakan ICA karena asumsi independensi.
Catatan : Ilustrasi yang bagus dari konsep di atas adalah memikirkan dua gelombang sinusoidal. Keduanya sama-sama deterministik. Jika mereka berdua memiliki frekuensi yang sama (bahkan dengan fase yang berbeda) maka mereka berkorelasi sempurna dan ICA tidak akan dapat memisahkan mereka. Jika sebaliknya mereka memiliki frekuensi yang berbeda (yang bukan bilangan bulat dari satu sama lain), maka mereka independen dan dapat dipisahkan.
Di bawah ini adalah beberapa kode Matlab untuk Anda lihat sendiri
Perhatikan bahwa untuk gelombang dengan frekuensi yang sama, ICA hanya mengembalikan sinyal input, tetapi untuk frekuensi yang berbeda ia mengembalikan sumber aslinya.
sumber
Rachel,
Dari penelitian saya sejauh ini saya dapat menemukan sesuatu yang disebut ' Tes Chi-Squared Untuk Kemandirian ', tetapi saya tidak yakin bagaimana cara kerjanya saat ini, tetapi mungkin layak untuk dilihat.
sumber