• 大小: 1KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-09
  • 语言: Matlab
  • 标签: MATLAB  

资源简介

ICA原理及matlab实现

资源截图

代码片段和文件信息

function Z=ICA(X)
%-----------去均值---------
[MT] = size(X); %获取输入矩阵的行/列数,行数为观测数据的数目,列数为采样点数      
average= mean(X‘)‘;  %均值
for i=1:M
    X(i:)=X(i:)-average(i)*ones(1T); 
end
%---------白化/球化------
Cx = cov(X‘1);    %计算协方差矩阵Cx
[eigvectoreigvalue] = eig(Cx); %计算Cx的特征值和特征向量
W=eigvalue^(-1/2)*eigvector‘;   %白化矩阵
Z=W*X;   %正交矩阵
 
%----------迭代-------
Maxcount=10000;        %最大迭代次数
Critical=0.00001;   %判断是否收敛
m=M;                %需要估计的分量的个数
W=rand(m);
for n=1:m  
    WP=W(:n);  %初始权矢量(任意)
%     Y=WP‘*Z;
%     G=Y.^3;%G为非线性函数,可取y^3等
%     GG=3*Y.^2;  %G的导数
    count=0;
    LastWP=zeros(m1);
    W(:n)=W(:n)/norm(W(:n));
    while abs(WP-LastWP) & abs(WP+LastWP)>Critical
        count=count+1;   %迭代次数
        LastWP=WP;      %上次迭代的值
       % WP=1/T*Z*((LastWP‘*Z).^3)‘-3*LastWP;
        for i=1:m     
            WP(i)=mean(Z(i:).*(tanh((LastWP)‘*Z)))-(mean(1-(tanh((LastWP))‘*Z).^2)).*LastWP(i);
        end
        WPP=zeros(m1);
        for j=1:n-1
            WPP=WPP+(WP‘*W(:j))*W(:j);
        end
        WP=WP-WPP;
        WP=WP/(norm(WP));
        
        if count==Maxcount
            fprintf(‘未找到相应的信号‘); 
            return; 
        end
    end
    W(:n)=WP;
end
Z=W‘*Z;

end


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1387  2014-05-29 11:11  ICA\ICA.m

     文件        909  2014-05-29 11:09  ICA\TEST_ICA.m

     目录          0  2014-05-29 11:20  ICA

----------- ---------  ---------- -----  ----

                 2296                    3


评论

共有 条评论