我目前正在使用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'))。

UPDATE

按照建议(请参阅注释),我仅对2个信号尝试了FastICA。结果是相当不错的(见下图)。使用的混合基质为A = [0.75 0.25; 0.25 0.75]。但是,本征谱0.1657 0.7732仍然只显示了一个主要主成分。

因此,我的问题归结为以下几点:我可以使用什么函数/方程式或属性来检查多个信号向量在统计上是否独立?



评论

很好的问题。我曾问过我们如何知道两个信号何时独立(dsp.stackexchange.com/questions/1242/…),但并没有太过分。 :-)我也是ICA的新手,但我也许可以阐明一些想法。

@Mohammad您仍然对回答该问题感兴趣吗?我会很乐意为它吸引赏金。

@Mohammad我支持您的问题。希望您能得到一个好的答案,这确实与我有关。到目前为止,我一直在阅读有关它的评论,并且有很多我不了解的统计数据。您是否设法提出一种确定两种信号是否独立的明确方法?

@Rachel目前尚未,但我会对其进行更多研究,并告知您。这是一个非常重要的概念,不幸的是,我通常觉得这个概念很模糊。

谢谢@Mohammad。我同意。独立信号观察到E(s1,s2)= E(s1)x E(s2)的性质,但我不知道如何为真实信号实际计算它。

#1 楼

信号3和5似乎很相关-它们共享其一次谐波。如果给了我这些信号的两种混合,我将无法分离它们,我很想将普通谐波作为一个信号,将较高次谐波作为第二个信号。我会错的!这可能解释了缺失的特征值。

信号1和2看起来也不是独立的。

对两个序列的独立性进行快速而肮脏的“合理性检查”是为了​​:绘制一个信号相对于另一个的(x,y)图:

plot (sig3, sig5)


,然后对一个信号进行混洗来绘制相同的(x,y)图:

indices = randperm(length(sig3))
plot(sig3(indices), sig5)


如果两个图的外观不同,则您的信号不是独立的。更一般而言,如果数据的(x,y)图显示“特征”,不对称性等,则预兆不好。

正确的独立性测试(而这是ICA中使用的目标函数优化循环)包括例如相互信息。

ICA正在恢复最独立的信号,线性混合产生的信号将产生您的输入数据。它会用作信号分离方法,并且仅当原始信号根据ICA实现中使用的优化标准最大独立时,才恢复原始信号。

评论


$ \ begingroup $
问:如果她的案例中的5个信号实际上都是独立的,那么我们期望没有正确的主成分吗? (换句话说,所有特征值都是相同的)。从几何学上讲,我们将在5个维度上拥有一个“云”,同意吗?
$ \ endgroup $
–太空
2012年2月21日在18:14

$ \ begingroup $
我还与ICA的一位作者联系过,内容涉及从混合物中去除两种正弦曲线,他说实际上可以用ICA来完成。根据您对信号3和5的说法,这使我有些困惑,因为(我同意),它们确实是相关的。
$ \ endgroup $
–太空
2012年2月21日在18:17

$ \ begingroup $
@pichenettes我按照您的建议绘制了这些图形-而且这些图形的确具有不同的外观。不幸的是,我仍然对如何测试独立性感到困惑。我确实需要一种生成统计上独立的信号的方法,以便评估FastICA的性能。
$ \ endgroup $
–雷切尔(Rachel)
2012-2-22在11:51

$ \ begingroup $
@Rachel您现在可以尝试做的一件事是发出统计上独立的信号:记录您的声音并说些什么。 (在MATLAB中,您可以使用“ wavrecord”命令)。保存该向量$ x_1 [n] $,然后再次录制一些正在播放的音乐。将其另存为$ x_2 [n] $。现在应用混合矩阵,看看FastICA是否可以将它们分开。也许您编辑问题以为我们显示一些结果。我很好奇。 :-)
$ \ endgroup $
–太空
2012-2-22在18:33

$ \ begingroup $
@Mohammad我没有录制自己的声音,但是我尝试在正弦信号和高斯信号的混合物中使用FastICA。我想他们是独立的。FastICA表现不错,但本征光谱仍然很奇怪。我将更新问题以显示结果。
$ \ endgroup $
–雷切尔(Rachel)
2012年2月25日在11:19

#2 楼

我不是ICA方面的专家,但我可以告诉您一些有关独立性的信息。

正如一些评论所提到的,两个随机变量之间的统计独立性可以粗略地解释为“观察一个变量给出的信息量”。

但是,因为我们在谈论统计独立性,所以所有这些都是关于分布的。特别是,如果您观察到两个随机变量$ X $和$ Y $,则$ X $和$ Y $的独立性等同于它们的联合分布$ p(x,y)$的条件。特别是,当且仅当$ p(x,y)= p(x)p(y)$时,$ X $和$ Y $是独立的。

此条件基本上是先前的评论建议您使用。绘制两个变量的散点图是联合分布$ p(x,y)$的一种可视化形式。当两个变量是独立的时,置换观察值应给出相同的基础联合分布。

有很多测试独立性的方法。在实践中(例如,得出科学结论),您可能希望使用仔细的假设检验,该陈述检验可让您陈述自己的假设和结论的置信度(例如卡方检验)。在这里,我将忽略它,并假定您具有有关发行版的完善信息。然后,请注意,当$ X $和$ Y $独立时,$ X $和$ Y $之间的相互信息恰好为零。为了计算互信息,让您的联合分布为$ p(X = i,Y = j)= p_ {ij} $,并且$ P(X = i)= p_i $和$ P(Y = j)= p_j $是您的边际收益。然后,

$ I(X,Y)= \ sum_i \ sum_j p_ {ij} \ log \ frac {p_ {ij}} {p_i p_j} $

这里是一些matlab代码将根据构造的关节分布生成两个独立的信号,并根据非独立的关节分布生成两个,然后计算关节的互信息。

函数“ computeMIplugin.m”是我编写的一个简单函数,它使用上述求和公式来计算互信息。

Ndist = 25;
xx = linspace(-pi, pi, Ndist);

P1 = abs(sin(xx)); P2 = abs(cos(xx)); 
P1 = P1/sum(P1); P2 = P2/sum(P2); % generate marginal distributions

%% Draw independent samples.
Nsamp = 1e4;
X = randsample(xx, Nsamp, 'true', P1);
Y = randsample(xx, Nsamp, 'true', P2);

Pj1 = P1'*P2;
computeMIplugin(Pj1)

% I get approx 8e-15 ... independent!

% Now Sample the joint distribution 
cnt = {}; cnt{1} = xx; cnt{2} = xx; % bin centers
Pj1_samp= hist3([X' Y'],cnt); Pj1_samp = Pj1_samp/sum(Pj1_samp(:));
computeMIplugin(Pj1_samp)
% I get approx .02; since we've estimated the distribution from
% samples, we don't know the true value of the MI. This is where
% a confidence interval would come in handy. We'd like to know 
% whether value of MI is significantly different from 0. 

% mean square difference between true and sampled?
% (this is small for these parameter settings... 
% depends on the sample size and # bins in the distribution).
mean( (Pj1_samp(:) - Pj1(:)).^2)

%% Draw samples that aren't independent. 

tx = linspace(0,30,Nsamp);
X = pi*sin(tx);
Y = pi*cos(tx);

% estimate the joint distribution
cnt = {}; cnt{1} = xx; cnt{2} = xx; % bin centers
Pj2= hist3([X' Y'],cnt); Pj2 = Pj2/sum(Pj2(:));
computeMIplugin(Pj2)

% I get 1.9281  - not independent!

%% make figure
figure(1); 
colormap gray
subplot(221)
imagesc(xx,xx,Pj1_samp)
title('sampled joint distribution 1')
subplot(222)
imagesc(xx,xx,Pj2)
title('sampled joint distribution 2')
subplot(223)
imagesc(xx,xx,Pj1)
title('true joint distribution 1')


同样,这假设您对关节的分布有很好的估计(连同其他假设),但作为经验法则应该有用。

评论


$ \ begingroup $
sydeulissie,这是一个很好的答案,谢谢,我不得不对其进行更深入的研究。
$ \ endgroup $
–太空
2012年3月3日19:18

$ \ begingroup $
首先,感谢您的冗长回答,它非常有用。我只是有几个问题。您提到使用卡方检验。我研究了它,看起来确实很有趣,但是如何在信号上使用它呢?不能仅将其应用于分类数据吗?
$ \ endgroup $
–雷切尔(Rachel)
2012年5月5日12:33

$ \ begingroup $
另外,您正在使用Pj1 = P1'* P2计算关节分布,对吗?但是,从技术上讲,我认为这是不可能做到的。也许您正在执行此操作,因为您假设原始信号是独立的,因此结果成立了吗?但是,您如何计算相互信息-因为结果取决于联合分布。可能是我误会了一些东西,但是请澄清一下。
$ \ endgroup $
–雷切尔(Rachel)
2012年5月5日12:37

$ \ begingroup $
我很乐意-尽管要花点时间才可以:)。
$ \ endgroup $
–是的
2012年3月8日在20:56

$ \ begingroup $
谢谢@sydeulissie。我想要一个不以我自己知道联合分配知识的答案。
$ \ endgroup $
–雷切尔(Rachel)
2012年10月10日在12:04

#3 楼

如上所述,信号3和5似乎很相关并且具有相似的周期。

如果我们可以左右移动一个信号源并增大或减小信号,我们可以想到两个信号是相关的。减小其振幅,使其适合其他光源的顶部。请注意,我们并没有改变信号源的频率,我们只是在进行相移和幅度移位。

在上述情况下,我们可以对信号源3进行移位,使其峰值与信号源5重合。这是

注意:上述概念的一个很好的例证是想到两个正弦波。这些都是完全确定的。如果它们都具有相同的频率(甚至具有不同的相位),那么它们将具有完美的相关性,ICA将无法将它们分开。相反,如果它们具有不同的频率(不是彼此的整数倍),则它们是独立的并且可以分开。

下面是一些Matlab代码,供您自己查看

%Sine waves of equal frequency
X = 1:1000;
Y(1,:) = sin(2*pi*X*10/1000);
Y(2,:) = sin(1+2*pi*X*10/1000);

figure
subplot(3,2,1)
plot(Y(1,:))
title('Initial Source 1')
subplot(3,2,2)
plot(Y(2,:))
title('Initial Source 2')
A = [1, 2; 4, -1];
Y = A*Y;
subplot(3,2,3)
plot(Y(1,:))
title('Signal 1')
subplot(3,2,4)
plot(Y(2,:))
title('Signal 2')

Z = fastica(Y);

subplot(3,2,5)
plot(Z(1,:))
title('Source 1')
subplot(3,2,6)
plot(Z(2,:))
title('Source 2')

%Sine waves of different frequency
X = 1:1000;
Y(1,:) = sin(2*pi*X*10/1000);
Y(2,:) = sin(1+2*pi*X*8/1000);

figure
subplot(3,2,1)
plot(Y(1,:))
title('Initial Source 1')
subplot(3,2,2)
plot(Y(2,:))
title('Initial Source 2')
A = [1, 2; 4, -1];
Y = A*Y;
subplot(3,2,3)
plot(Y(1,:))
title('Signal 1')
subplot(3,2,4)
plot(Y(2,:))
title('Signal 2')

Z = fastica(Y);

subplot(3,2,5)
plot(Z(1,:))
title('Source 1')
subplot(3,2,6)
plot(Z(2,:))
title('Source 2')


请注意,对于相同频率的波,ICA仅返回输入信号,而对于不同频率的波,则返回原始信号。

#4 楼

瑞秋(Rachel),

通过我的研究,到目前为止,我已经能够找到一种名为“ Chi-Squared独立性测试”的方法,但目前尚不确定它如何工作,但可能值得看。

评论


$ \ begingroup $
我找到了这两个教程来解释如何执行卡方测试:ling.upenn.edu/~clight/chisquared.htm和math.hws.edu/javamath/ryan/ChiSquare.html。但是,只能对分类数据执行测试。我不知道这是否可以应用于我们的信号观测。
$ \ endgroup $
–雷切尔(Rachel)
2012年2月28日10:37