www.pudn.com > ica_demo.rar > icacovb.m
%[z,W,w] = icacovb(x,tol,wb);
%x input data stream
%tol tolerance on stopping (dw/w)
%wb 'y' - shows waitbar
%z output set
%W mixing matrix with time
%w mixing matrix (final)
function [z,W,w] = icacovb(x,tol,wb)
if size(x,1) > size(x,2)
error('x should be in D,N format');
end;
[DIM,N] = size(x);
w = eye(DIM);
if (wb=='y')
waitbar(0,'Covariant ICA - B');
end;
%%x = normalis(x,x); % zero mean unit variance
eta = 0.2/max(eig(cov(x')))
change = 1;
n = 1;
while (change > tol)
a = (w*x);
z = -tanh(a);
xp = w*a;
dw = eta*(w + xp*z'/N);
w = w + dw;
change = mean(mean(abs(dw)./abs(w)));
if (max(abs(w))>1e10)
disp('blow out, rescaling learning rate');
w = eye(DIM);
eta = eta/2
change = 1;
end;
W(n,:) = reshape(w,1,DIM*DIM);
if (wb == 'y')
waitbar(tol/change);
end;
n = n+1;
end;
a = w*x;
z = -tanh(a);
z = z';
if (wb=='y'),close;end; % the waitbar
return;