Fast ICA 変数

fpica.mのコメント分を読むと
% EXAMPLE
% [E, D] = pcamat(vectors);
% [nv, wm, dwm] = whitenv(vectors, E, D);
% [A, W] = fpica(nv, wm, dwm);
と書いてあります。

pcamat(vectors)eig(cov(vectors',1))です。
Eは共分散行列の固有ベクトルからなる行列、
Dは昇順の固有値からなるの対角行列です。

白色化につかう whitenv(vectors,E,D)の返り値は、
wmはwhiteningMatrixの略で inv(sqrt(D))*E'
dwm(vectors)はdewhiteningMatrixの略で E*sqrt(D)
nvはwhitesigで wm*vectorsです。白色化により nvの行方向の平均・分散は0と1になります。

fpica(nv, wm, dwm)の返り値の
Aは混合行列、
W(vectors)は復元行列です。
N次元の脳磁図信号=混合行列×独立成分信号
独立成分信号=復元行列×N次元の脳磁図信号
の関係になります。

最終的に得られる独立成分別の波形は
IC=W*dwm*nv(vectors)
となります。先ほどのXXXaefで再現してみます。
IC=Waef*dewhiteningMatrixaef*whitesigaef;
figure;for x=1:8;subplot(8,1,x);plot(IC(x,:));end;
h=findobj(gcf,'type','axes');
set(gcf,'CurrentAxes',h(end));
title('Eight Independent Components');

同じものができました。
主成分分析で作ったようなtopography表示にしてみます。
load('.../vv_lout.mat');
W=120;x=vv_mag(:,2);y=vv_mag(:,3);
xlin=linspace(min(x),max(x),W);
ylin=linspace(min(y),max(y),W);
[X,Y]=meshgrid(xlin,ylin);

A=sum(Aaef.^2,1);
P=diag(A)*ICaef;
V=Aaef./(ones(size(Aaef,1),1)*A);
figure;set(gcf,'color',[1,1,1]);
set(gcf,'renderer','zbuffer');
nn=8;
for n=1:nn;...
subplot('position',[0,1-n/nn,0.2,1/nn]);...
z=(V(1:2:204,n).^2+V(2:2:204,n).^2).^0.5;...
Z=griddata(x,y,z,X,Y,'linear');...
h=surf(X,Y,Z);axis off;set(h,'edgecolor','none');...
axis tight;daspect([1,1,0.01]);view([0,90]);...
subplot('position',[0.25,1-n/nn+0.02,0.7,1/nn-0.06]);...
plot(time,P(n,:));axis tight;grid on;...
end;


うまく分離できているのだろうか???