FastICA---对称正则化方法

根据信息论可知,等方差分布中高斯分布的熵最大。而根据概率论的中心极限定理可知,若一随机变量由许多相互独立的随机变量组成,只要具有有限的均值与方差,则无论其为何种分布,随机变量较更接近高斯分布。反之,对一个混合信号来说,如果完成对信号的分离,则会使得分离后的结果之间的非高斯性变大,即信号之间可看成相互独立的。故引入负熵来度量,其公式定义为 

这里写图片描述 
式中这里写图片描述是与这里写图片描述具有相同方差的高斯变量。从式子可以看出,当且仅当信号这里写图片描述满足高斯分布时,其负熵才会为零。而这里写图片描述不满足高斯分布是,负熵都会大于零,特别的当负熵达到最大时可以知道此时信号这里写图片描述的熵为零,亦即可以得出此时信号之间的独立性最大。故在分离信号的时候用可用负熵来度量。详细的推导过程见李云霞的博士论文《盲信号分离算法及其应用》。 
我们在看完其推导之后,往往会发现其实际编程的时候会有困难,基于此,我在这里详细讲解如何实现编程。编程的步骤一般如下: 
1)对接收信号中心化与预白化 
2)设置迭代次数,选择初始权 
3)程序主体 
4)正交化,这是避免提取出重复的源信号 
5)对迭代权值归一化 
6)判断是否收敛,没有的话返回3)继续,知道收敛为止。 
好了,不多说,我们讲解如何编写: 
我们分离正定信号,4个信源,4个传感器,2000个采样点;接收信号为X,其行列为4*2000。 
%%去均值与预白化

       [~,n]=size(X);%获的输入数据的行列   % X列表示采样数据,行表示变量
       Zerox=X-mean(X,2)*ones(1,n);
       Rxx=Zerox*Zerox'/n;
       [V,D]=eig(Rxx);
       WhiteMartix=D^(-1/2)*V';
       Z=WhiteMartix*Zerox; 
     
     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

上面处理过后,Z为白化之后的数据,接着我们处理白化后的数据即可

%设置收敛门限与最大的迭代次数 
设置最大的迭代次数的迭代次数是防止收敛门限设置过小的时候程序达不到为陷入死循环。

[m,n] = size(Z);a1 = 1; a2 = 1;W = orth (randn (m, m)); %设定初始的权矢量
W=W*real(inv(W'*W)^(1/2));%采用对称正交化
Wold=zeros(m,m);
crit=zeros(1,m);
epsilon=1E-6;%设定收敛的门限值
while(1-min(crit)>epsilon)
    Wold=W;
%     %选择的G函数是G(y)=logcosh(ay)/a    %超高斯与亚高斯都存在可以用
      hypTan = tanh(a1 * Z' * W);
      W = Z * hypTan / n - ones(size(W,1),1) * sum(1 - hypTan .^ 2) .* W / n * a1;

%     %选择的G函数是G(y)=-exp(-y^2/2)      %适用于超高斯信源
%        U = Z' * W;
%       Usquared=U .^ 2;
%       ex = exp(-a2 * Usquared / 2);
%       gauss =  U .* ex;
%       dGauss = (1 - a2 * Usquared) .*ex;
%       W = Z * gauss / n - ones(size(W,1),1) * sum(dGauss).* W / n ;

      %选择的G函数是G(y)=y^4/4           %适用于亚高斯信源  % 速度快
%      W=(Z*((Z'*W).^ 3))/n-3*W; 
          
      W=W*real(inv(W'*W)^(1/2));%采用对称正交化
      crit=abs(sum(W.*Wold));  % crit = abs(diag(W*Wold)); 结果相同
end
Z=W'*Z;
     
     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

转载: http://blog.csdn.net/zf_suan/article/details/53039576    并主要修改并完善代码


另外参考:

http://blog.csdn.net/yjjat1989/article/details/22593489

https://www.cs.helsinki.fi/u/ahyvarin/whatisica.shtml

http://www.cnblogs.com/gisalameda/p/5336943.html

http://chunqiu.blog.ustc.edu.cn/?p=413

https://math.stackexchange.com/questions/695194/is-my-implementation-of-fastica-right

http://si.utia.cas.cz/CODE/FicaCPLX.html



  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值