function [yn,y,W,A,Q,d,B,Devals]=ICA_normal(X,cont)
[m,n]=size(X); %获取输入矩阵的行/列数,行数为观测数据的数目,列数为采样点数
%---------白化/球化------
Cx = cov(X',1); %计算协方差矩阵Cx
[evecs,evals,V] = svd(Cx); %计算Cx的特征值和特征向量
Q=evals^(-1/2)*evecs'; %白化矩阵
z=Q*X; %正交矩阵
Evals=diag(evals);
for i=1:m
ICa(i)=sum(Evals(1:i))/sum(Evals);
if ICa(i)>=cont
d=i;
break;
end;
end;
Devals=diag(Evals(1:d));
Devecs=evecs(:,1:d);
%---------正交矩阵B------
B=[eye(d,d);zeros(m-d,d)];% 初始化列向量B的寄存矩阵,B=[b1 b2 ... bd]
for r=1:d % 迭代求取每一个独立元
b=B(:,r);
i=1;maxIterationsNum=1000;j=1; % 设置最大迭代次数(即对于每个独立分量而言迭代均不超过此次数)
while i<=maxIterationsNum+1
if i==maxIterationsNum % 循环结束处理
fprintf('\n第%d分量在%d次迭代内并不收敛。',r,maxIterationsNum);
break;
end
b0=b;
t=z'*b;
g=tanh(t);
dg=1-tanh(t).^2;
b=z*g/n-mean(dg)*b; % 核心公式,见参考文献[qinsizhao]
%%%%%%%%%%%% 对b正交化
for k=1:r-1
b=b-(b'*B(:,k))*B(:,k);
end
b=b/norm(b);
%%%%%%%%%%% 收敛性判断
if abs(abs(b'*b0)-1)<1e-6 % 如果收敛,则保存b
B(:,r)=b;
break;
end
i=i+1;
end
end
yn=B'*z; % ICA分离的独立元
y=sqrt(Devals)*yn;
W=sqrt(Devals)*B'*Q; % X=W*S
A=evecs*sqrt(evals)*B*Devals^(-1/2);
没有合适的资源?快使用搜索试试~ 我知道了~
改进 ICA故障监测含Matlab源码.zip
共15个文件
m:9个
jpg:4个
dat:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 2 下载量 171 浏览量
2022-04-01
20:20:03
上传
评论
收藏 300KB ZIP 举报
温馨提示
改进 ICA故障监测含Matlab源码
资源推荐
资源详情
资源评论
收起资源包目录
改进 ICA故障监测含Matlab源码.zip (15个子文件)
改进 ICA故障监测含Matlab源码
ICA_monitor.m 1KB
control_limit.m 199B
sort_IC_VRE.m 293B
variable_c.m 187B
运行结果4.jpg 24KB
运行结果3.jpg 16KB
ICA_modified
d10.dat 390KB
main_n.m 1KB
ICA_normal.m 2KB
ComCon.m 1KB
运行结果1.jpg 48KB
d10_te.dat 781KB
sort_IC_negentropy.m 293B
运行结果2.jpg 54KB
sort_IC_cum.m 313B
共 15 条
- 1
资源评论
- qq_408962202023-04-08资源有一定的参考价值,与资源描述一致,很实用,能够借鉴的部分挺多的,值得下载。
- 2201_758863742023-10-16非常有用的资源,可以直接使用,对我很有用,果断支持!
天天Matlab科研工作室
- 粉丝: 3w+
- 资源: 7259
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功