現在、Matlabを使用してさまざまな信号を作成し、混合行列Aで乗算して混合し、FastICAを使用して元の信号を取得しようとしています。
これまでのところ、元の信号と比較した場合、復元された信号は本当に悪いものでした。
私は何か間違ったことをしているかどうかを確認しようとしています。私が生成している信号は次のとおりです。
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が成功するための1つの条件は、最大で1つの信号がガウス分布であるということです。これは、信号生成で観察しました。
ただし、別の条件は、すべての信号が統計的に独立していることです。
私が知っているのは、これは、2つの信号AとBが与えられ、一方の信号が他方に関する情報を与えないことを意味するということです。つまり、P(A | B)= P(A)ここで、Pは確率です。
ここで私の質問は次のとおりです。私の信号は統計的に独立していますか?これを決定する方法はありますか?おそらく、いくつかのプロパティを観察する必要がありますか?
私が気づいたもう1つのことは、共分散行列の固有値を計算すると(混合信号を含む行列に対して計算されます)、固有スペクトルは1つの(主要な)主成分のみがあることを示すようです。これはどういう意味ですか?5(おそらく)独立した信号があるので、5はありませんか?
たとえば、次の混合マトリックスを使用する場合:
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
固有値は次のとおりです0.0000 0.0005 0.0022 0.0042 0.0345
(4のみ!)
アイデンティティ行列を混合行列として使用する場合(つまり、混合信号は元の信号と同じです)、固有スペクトルは次のようになり0.0103 0.0199 0.0330 0.0811 0.1762
ます。残りの値よりもはるかに大きい値が1つあります。
ご協力ありがとうございました。
私の質問に対する答えが痛々しいほど明白な場合は謝罪しますが、統計、ICA、およびMatlabは初めてです。再度、感謝します。
編集
[0.2、100]の範囲で、0.2のステップでx = 0:0.1:100の各信号のサンプルが500個あります。
また、ICAモデルを考えると、X = As + n(現時点ではノイズを追加していません)、Xの転置の固有スペクトル、つまりeig(cov(X '))を参照しています。
更新
提案されているように(コメントを参照)、2つの信号のみでFastICAを試しました。結果は非常に良好でした(下の写真を参照)。使用された混合行列はでしたA = [0.75 0.25; 0.25 0.75]
。ただし、固有スペクトルには 0.1657 0.7732
まだ主要な主成分が1つしか示されていません。
したがって、私の質問は次のように要約されます。多くの信号ベクトルが統計的に独立しているかどうかを確認するために、どの関数/方程式/プロパティを使用できますか?