📄 infomaxica.m
字号:
%基于信息最大化的infomaxica算法,
%注意:可以选择不同的非线性函数,这里选用了tanh(y)
function[w]=infomaxica(x,A)
%求W.
r=2;%对两个信源混合信号进行分离
c=30000;
W= randn(r);
for i = 1:c,
x(:,i);
y=x(:,i);
% y= features(:,i);
dW= 0.01*(eye(r) - 2*tanh(y)*y')*W;
%如果收敛,跳出
if (max(max(dW)) > 1e3),
disp(['Algorithm diverged after ' num2str(i) ' iterations'])
break
end
W = W + dW;
% %%%%%%%%%%%%%%%计算串音误差
% c=W*A;
% for p=1:5
% max1(p)=abs(c(p,1));
% for q=1:5
% if max1(p)<=abs(c(p,q))
% max1(p)=abs(c(p,q));
% else max1(p)=max1(p);
% end
% end
% end
% s2=0;
% for p=1:5
% s1=0;
% for q=1:5
% s1=s1+abs(c(p,q))/max1(p);
% end
% s2=s2+abs(s1-1);
% end
%
%
% for q=1:5
% max2(q)=abs(c(1,q));
% for p=1:5
% if max2(q)<=abs(c(p,q))
% max2(q)=abs(c(p,q));
% else max2(q)=max2(q);
% end
% end
% end
%
% s4=0;
% for q=1:5
% s3=0;
% for p=1:5
% s3=s3+abs(c(p,q))/max2(q);
% end
% s4=s4+abs(s3-1);
% end
% % k=4000;
% % t=1:k;
% e(i)=s2+s4;
% %%%%%%%%%%%%%%%%%%%%%%%%
%如果算法收敛,跳出得,到算法收敛的步数
if (max(max(W)) < 1e-2),
disp(['Algorithm converged after ' num2str(i) ' iterations'])
break
end
end
%找到最独立的方向
power= sum(abs(W)');
[m, in]= sort(power);
% W= W(in(r-2+1:r),:);
w=W;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -