我试图在4 x 400,000的混合信号矩阵上进行快速ICA。 (要分离的组件数量是4)。
这是我的代码,但我认为我对删除组件感到困惑,因此每个wp与另一个wp正交。我按照FastICA上的wikipedia页面删除了多个组件。
我做错了什么? (数据是线性混合,所以我不必担心线性化数据)。
for i = 1:1:4
wp = rand(vectorSize,1);
while (true)
wp_new = ((((wp'*XX).^3)*XX')'/numSamples) - 3*wp;
sum_wp_new = zeros(vectorSize,1);
% To remove contributions from previous updates
for j = 1:1:i-1
toMul = wp_new'*W(j,:)';
toMul_new = toMul * W(j,:)';
sum_wp_new = sum_wp_new + toMul_new;
end
wp_new = wp_new - sum_wp_new;
wp_new = wp_new / norm(wp_new,2);
check1 = norm(wp_new-wp);
check2 = norm(wp_new + wp);
if(check1 > epsilon) || (check2 > epsilon) % loop should go on until wp changes
break;
end
wp = wp_new;
end
W(i,:) = wp';
end
S = W'*X;