⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ica2.m

📁 基于峭度极大的一种独立分量分析的算法
💻 M
字号:
%基于峭度极大的ICA算法
clear
%模拟数据
a=0:pi/4:100;
b=sin(a);
[m,n]=size(b);
c=rand(m,n);
data=zeros(2,n);
data(1,:)=b+c;
data(2,:)=0.5*b+2*c;
[M,N]=size(data);


%画出数据
for(i=1:M)
    subplot(M,1,i);
    plot(data(M,:));
end

%去均值
mean1=mean(data,2);
X=zeros(M,N);
for(i=1:M)
   X(i,:)=data(i,:)-mean1(i,1);
end

%whiten
[U1,S1,V1]=svd(X); %对观测数据进行奇异值分解
P=U1'*X;         %主分量分解
C=P*P';
Z=C^(-1/2)*P;  %观测数据的白化


        

%对W赋初值,设置迭代步长
W=eye(M,M);
u=0.01;            %迭代步长

%算法迭代
W1=zeros(M,M);

%step
i=1;

    W1(:,i)=W(:,i);
    partial=4*sign(mean((W1(:,i)'*Z).^4,2)-3)*mean((W1(:,i)'*Z).^3*Z',2);
    W0=zeros(M,1);
    W0=W1(:,i);
    W1(:,i)=W0+u*partial;
    W1(:,i)=W1(:,i)/norm(W1(:,i));
    while((norm(W1(:,i)-W0))>=0.0001)
        W0=W1(:,i);
        W1(:,i)=W0+u*partial;
        W1(:,i)=W1(:,i)/norm(W1(:,i));
    end


%step
i=2;
    W1(:,i)=W(:,i);
    partial=4*sign(mean((W1(:,i)'*Z).^4,2)-3)*mean((W1(:,i)'*Z).^3*Z',2);
    W0=zeros(N,1);
    W0=W1(:,i);
    W1(:,i)=W0+u*partial;
    W1(:,i)=W1(:,i)/norm(W1(:,i));
    while((norm(W1(:,i)-W0))>=0.0001)
        W0=W1(:,i);
        W1(:,i)=W0+u*partial;
        W1(:,i)=W1(:,i)/norm(W1(:,i));
    end
    %判断是否正交
    
        while(W1(:,2)'*W1(:,1)>=0.01)
             W1(:,i)=W(:,i);
             partial=4*sign(mean((W1(:,i)'*Z).^4,2)-3)*mean((W1(:,i)'*Z).^3*Z',2);
             W0=zeros(N,1);
             W0=W1(:,i);
             W1(:,i)=W0+u*partial;
             W1(:,i)=W1(:,i)/norm(W1(:,i));
             while((norm(W1(:,i)-W0))>=0.0001)
                  W0=W1(:,i);
                  W1(:,i)=W0+u*partial;
                  W1(:,i)=W1(:,i)/norm(W1(:,i));
             end
        end
   
   % W(:,i)=W1(:,i);


%分离后矩阵
Y=zeros(M,N);
Y=W1'*Z;




%画出分离后的图形
for(i=1:M)
    subplot(4,1,i);
    plot(Y(i,:));
end

subplot(4,1,3);
plot(b);
subplot(4,1,4);
plot(c);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -