我目前正在使用Matlab创建不同的信号,通过将它们乘以混合矩阵A来混合它们,然后尝试使用FastICA来恢复原始信号。
到目前为止,与原始信号相比,恢复的信号非常糟糕,这不是我的预期。
我正试图看看我做错了什么。我正在生成的信号如下:(幅度在[0,1]范围内。)
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是概率。
现在我的问题是:我的信号在统计上是独立的吗?我有什么办法可以确定吗?也许一些必须遵守的财产?
我注意到的另一件事是,当我计算协方差矩阵的特征值(针对包含混合信号的矩阵计算)时,本征谱似乎表明只有一个(主要)主成分< / strong>即可。这究竟意味着什么?不应该有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'))
。
答案 0 :(得分:1)
您的信号是相关的(不是独立的)。蝙蝠,锯齿和正弦是同一时期。告诉我一个人的价值我会告诉你另一个完美的相关性的价值。
如果你改变其中一个的周期,那将使他们更加独立。
S1和S2也有点相关。
至于特征值,首先你的信号不是独立的(参见上文)。
其次,你的滤波器矩阵A也没有很好的条件,进一步扩展你的特征值。
即使你要输入五个完全独立的(iid,yada yada)信号,协方差也将是:
E[ A y y' A' ] = E[ A I A' ] = A A'
特征值是:
eig(A*A')
ans =
0.000167972216475
0.025688510850262
0.035666735304024
0.148813869149738
1.042451912479502
所以你真的将所有信号过滤/压缩到一个基本功能/自由度上,当然,无论你使用什么方法,它们都很难恢复。
答案 1 :(得分:0)
要查找信号是否相互独立,您可以查看所描述的技术here通常,如果两个随机变量是正交的,则它们是独立的。这意味着:E {s1 * s2} = 0意味着随机变量s1乘以随机变量s2的期望值为零。这种正交性条件在统计和概率中极为重要,并且随处可见。不幸的是,它一次适用于2个变量。有多变量技术,但没有一个我会觉得舒服推荐。我挖出的另一个链接是one,不知道你的申请是什么,但那篇论文非常做得很好。
当我计算协方差矩阵时,我得到:
cov(A) =
0.0619 -0.0284 -0.0002 -0.0028 -0.0010
-0.0284 0.0393 0.0049 0.0007 -0.0026
-0.0002 0.0049 0.1259 0.0001 -0.0682
-0.0028 0.0007 0.0001 0.0099 -0.0012
-0.0010 -0.0026 -0.0682 -0.0012 0.0831
使用特征向量,V
和值D
:
[V,D] = eig(cov(A))
V =
-0.0871 0.5534 0.0268 -0.8279 0.0063
-0.0592 0.8264 -0.0007 0.5584 -0.0415
-0.0166 -0.0352 0.5914 -0.0087 -0.8054
-0.9937 -0.0973 -0.0400 0.0382 -0.0050
-0.0343 0.0033 0.8050 0.0364 0.5912
D =
0.0097 0 0 0 0
0 0.0200 0 0 0
0 0 0.0330 0 0
0 0 0 0.0812 0
0 0 0 0 0.1762
这是我的代码:
x = transpose(0.2:0.2:100);
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(length(x), 1); % gaussian
s5 = (sawtooth(x, 0.75)+ 1) * 0.5; % sawtooth
A = [s1 s2 s3 s4 s5];
cov(A)
[V,D] = eig(cov(A))
让我知道我是否可以提供帮助,或者如果我误解了。
EDIT 正确引用特征值和向量,使用0.2采样间隔添加代码。