www.pudn.com > zxb.rar > BSS.m


%函数定义: 
function W=BSS(X) 
%W=BSS(X)为分离阵W的离线批处理ICA学习算法 
%输入宗量:X 
%输出宗量:W 
%调用函数: 
 
 
W(:,:,1)=[1,-0.5;-0.5,1];                                                       %给定分离阵W随机初值W(1) 
Y(:,:,1)=W(:,:,1)*X;                                                            %得到Y的初值Y(1)                                
j1(1)=sign(mean(sech(Y(1,:,1)).^2)-mean(Y(1,:,1).*tanh(Y(1,:,1))));             %计算开关函数J(1) 
j2(1)=sign(mean(sech(Y(2,:,1)).^2)-mean(Y(2,:,1).*tanh(Y(2,:,1)))); 
J(:,:,1)=diag([j1(1),j2(1)]); 
Q=0; 
T=length(X); 
for i=1:T 
    Q=Y(:,i,1)*Y(:,i,1)'+J(:,:,1)*tanh(Y(:,i,1))*Y(:,i,1)'+Q; 
end 
I=diag([1,1]); 
F(:,:,1)=I-Q/T;                                                                 %计算估计函数F(1) 
D(:,:,1)=F(:,:,1)*W(:,:,1);                                                      
a(1)=0.5;                                                                      %设步幅初值a(1)为0.05 
DW(:,:,1)=a(1)*D(:,:,1);                                                        %计算W(1)的"微小变化"DW(1) 
W(:,:,2)=W(:,:,1)+DW(:,:,1);                                                    %开始迭代,设迭代次数为800次 
for k=2:800                                                                      
    Y(:,:,k)=W(:,:,k)*X;                                                                                        
    j1(k)=sign(mean(sech(Y(1,:,k)).^2)-mean(Y(1,:,k).*tanh(Y(1,:,k)))); 
    j2(k)=sign(mean(sech(Y(2,:,k)).^2)-mean(Y(2,:,k).*tanh(Y(2,:,k)))); 
    J(:,:,k)=diag([j1(k),j2(k)]); 
    Q=0; 
    for i=1:T 
        Q=Y(:,i,k)*Y(:,i,k)'+J(:,:,k)*tanh(Y(:,i,k))*Y(:,i,k)'+Q; 
    end 
    F(:,:,k)=I-Q/T; 
    D(:,:,k)=F(:,:,k)*W(:,:,k); 
    a(k)=a(1)/k;                                                                %离线算法步幅迭代公式 
    DW(:,:,k)=a(k)*D(:,:,k); 
    W(:,:,k+1)=W(:,:,k)+DW(:,:,k); 
end