1 ICA基本原理
独立分量分析旨在对独立信源产生且经过未知混合的观测信号进行盲分离,从而重现原独立信源,其应用主要集中在盲源分离和特征提取两方面。ICA问题可简单描述为:
设有N个未知的源信号Si(t),i=1,…,N构成一个列向量S(t)=[S1(t),…,SN(t)]T,其中,t是离散时刻,取值为0,1,2,…。设A是一个M×N维矩阵,一般称为混合矩阵(mixing matrix)。设X(t)=[Xl(t),…,XM(t)]T是由M个可观察信号Xi(t),i=1,…,M,构成的列向量,且满足下列方程:
X(t)=AS(t),M≥N (1)
BSS的问题是,对任意t,根据已知的X(t)在A未知的条件下求未知的S(t)。这构成一个无噪声的盲分离问题。设N(t)=[Nl(t),…,NM(t)]T是由M个白色、高斯、统计独立噪声信号Ni(t)构成的列向量,且X(t)满足下列方程:
X(t)=AS(t)+N(t),M≥N (2)
则由已知的X(t)在A未知时求S(t)的问题是一个有噪声盲分离问题。
ICA的目的是对任何t,根据已知的X(t)在A未知的情况下求未知的S(t),ICA的思路是设置一个N×N维反混合阵W=(wij),X(t)经过W变换后得到N维输出列向量Y(t)=[Yl(t),…,YN(t)]T,即有
Y(t)=WX(t)=WAS(t) (3)
整个过程可以表示成如图l:
如果通过学习得以实现WA=I(I是N×N维单位阵),则Y(t)=S(t),从而达到了源信号分离目标。
2 FastICA算法
FastICA算法本质上是一种最小化估计分量互信息的神经网络方法,利用最大熵原理来近似负熵,并通过一个合适的非线性函数g使其达到最优。其算法具有很多神经算法里的优点:并行的、分布的、计算简单、要求内存小。如果要估计多个分量,我们可以按如下步骤计算:
1)对观测数据进行中心化,使它的均值为0;
2)对数据进行白化,X→Z。
3)选择需要估计的分量的个数m,设迭代次数p←1。
4)选择一个初始权矢量(随机的)Wp。
5)令Wp=E{Zg(WTpZ)}一E{g’(WTpZ)}W,非线性函数g的选取见前文。
8)假如Wp不收敛的话,返回第5步。
9)令p=p十l,如果p≤m,返回第4步。
3 试验仿真结果及主要Matlab代码
盲源分离已经在图像处理领域得以应用,在仿真数据下验证FastICA算法对图像盲分离的效果如图2所示。原始图像为3幅彩色图像,产生随机混合矩阵,将原始图像混合后得到混合图像,可见原始图像已经看不出来。用FastICA对上面的混合图像进行盲分离,即假定在未知源图像和混合矩阵下对混合图像进行分离,得到分离后的结果,由于ICA问题本身具有一些不确定因素,包括:1)分离后结果的排序与源信号会不一致;2)分离后的信号可能会与源信号相差一个负号。由于仿真实验在源图像未知情况下进行,因此我们在分离后的图形中可能会发现图像的排序发生变化,不过这些不会影响该算法对实际问题的处理。