我目前正在使用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成功的一个条件是,至多一个信号是高斯信号,我在信号生成过程中已经观察到了这一点。
但是,另一个条件是所有信号在统计上都是独立的。
我所知道的是,这意味着在给定两个信号A和B的情况下,知道一个信号不会给出关于另一个信号的任何信息,即:P(A | B)= P(A)其中P是概率。
现在我的问题是:我的信号在统计上是否独立?有什么办法可以确定吗?也许必须注意一些属性?
我注意到的另一件事是,当我计算协方差矩阵的特征值(针对包含混合信号的矩阵计算)时,特征谱似乎表明只有一个(主要)主成分。这到底是什么意思?因为我有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
。还有一个值要比其他值大得多。
谢谢您的帮助。
对于问题的答案是否显而易见,我深表歉意,但是我真的是统计学,ICA和Matlab的新手。再次感谢。
编辑
我对每个信号有500个样本,范围为[0.2,100],步长为0.2,即x = 0:0.1:100。
同样,给定ICA模型:X = As + n(我现在不添加任何噪声),我指的是X转置的本征谱,即eig(cov(X'))。
更新
根据建议(请参阅注释),我仅在2个信号上尝试了FastICA。结果是相当不错的(见下图)。使用的混合基质为A = [0.75 0.25; 0.25 0.75]
。但是,本征谱 0.1657 0.7732
仍然仅显示一个主要主成分。
因此,我的问题归结为以下几点:我可以使用哪些函数/方程式/属性来检查多个信号矢量在统计上是否独立?