快速ICA分离混合图像

时间:2013-11-20 16:00:24

标签: matlab image-processing signal-processing

我试图在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;

0 个答案:

没有答案