永发信息网

急求FastICA 的源程序 matlab,包括数据的预处理(中心化和白化),注释详细点,谢谢!

答案:1  悬赏:50  手机版
解决时间 2021-12-03 04:38
急求FastICA 的源程序 matlab,包括数据的预处理(中心化和白化),注释详细点,谢谢!
最佳答案
% function [Ahat2, shat, n_iteration Test] = nc_fastica_svd(xold,typeStr,N,A)
function [shat Ahat2] = nc_fastica_svd(xold,typeStr,N)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% non-circular complex FastICA算法,基于Newton迭代法,类似与fastICA
% ************************input***************************
% xold: 混合信号,m*n,m为阵元数,n为快拍数
% typeStr: 非线性函数,'log', 'kurt', or 'sqrt'
% **************************output**************************
% Ahat: 解混矩阵
% shat: 估计的源信号
% ********************************************************
% Reference
% Mike Novey and T. Adali, "On Extending the complex FastICA algorithm
% to noncircular sources" in
% (To appear 2007/2008) IEEE Journel on Signal Processing.,
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
type = 0;
if strcmp(typeStr,'log') == 1
type = 1;
elseif strcmp(typeStr,'kurt') == 1
type = 2;
elseif strcmp(typeStr,'sqrt') == 1
type = 3;
end
tol = 1e-5;
a2 = 0.1;
defl = 1; % components are estimated one by one in a deflationary manner; set this to 0 if you want them all estimated simultaneously
maxcounter = 50;
[n,m] = size(xold);
% Whitening of s:
yyy = zeros(1,m);
[Ex, Dx] = svd(cov(xold'));
E = Ex(:,1:N);
D = Dx(1:N,1:N);
Q = mtimes(sqrt(inv(D)),E');
x = Q * xold;
%Pseudo-covariance
pC = (x*transpose(x))/m;
% FIXED POINT ALGORITHM
W = eye(N);
Wold = zeros(N);
k = 0;
while (norm(abs(Wold'*W)-eye(N),'fro')>(N*1e-12) && k < 15*N)
k = k+1;
Wold = W;
for kk=1:N %Loop thru sources
yy = W(:,kk)'*x;
absy =abs(yy).^2;
%%Fixed point
if type == 1 %%log
g = 1./(a2 + absy);
gp = -1./(a2 + absy).^2;
elseif type == 2 %Kurt
g = absy;
gp = ones(size(absy));
elseif type == 3 %sqrt
g = 1./(2*sqrt(a2 + absy));
gp = -1./(4*(a2 + absy).^(3/2));
end
gRad = mean(ones(N,1)*(g.*conj(yy)).*x,2);
ggg = mean(gp.*absy + g);
B = mean(gp .* conj(yy).^2)*pC;
W(:,kk) = Wold(:,kk)*(ggg) -(gRad) + (B*conj(Wold(:,kk)));

end
%Orthonormalization
[E,D] = eig(W'*W);
W = W * E * inv(sqrt(D)) * E';
end; %Loop thru sources
n_iteration = k;
shat = W'*x; %Estimated sources
% Ahat1 = inv(Q)*W;
Ahat2 = W'*Q;

这个是NC-fastica,可以用。稍微注释了些
原始程序,不知道是谁写的了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
有知道五棵松老头酱肉价钱吗?味道怎样
MyEclipse中为什么每次在JSP里面做了更改只有
手机是不是不支持css3三维动画
“宸”字和“宬”字有什么含义吗?
全部世界名著的书名?
photoshop 多余头发怎么弄掉
对待伤害过自己的人残忍无情,,丝毫没有半点
寻简单好学的短小京剧一首
120斤的女生穿l还是xl
男人跳舞到底好不好
参加抗日老兵死后怎样补助
汇瑜伽地址在哪,我要去那里办事,
1959年8月10日生是什么星座
请问一下2018广东文科492排位五万四千八左右
现在的cmcc收费吗
推荐资讯
海淘婴儿车哪个牌子好
已知集合A={α|30°+k?180°<α<90°+k?180
人家上妈,我上奶奶
梦见自己被警察抓要坐七年牢
中国工商银行股份有限公司包头土右支行营业室
5英寸的960×540的屏幕ppi是多少
jsp显示项目外的图片如果实现
怎么评价电影《负重前行》?
天籁二手车2007年230jk跑180000万公里值多少
为什么多玩我的世界盒子下不了我的世界了,现
强制执行,拍卖房产,要给被执行人留住所吗
莒南县城南派出所在什么地方啊,我要处理点事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?