fastICA

合集下载

fastica用到的公式(一)

fastica用到的公式(一)

fastica用到的公式(一)FastICA用到的公式FastICA(Fast Independent Component Analysis)是一种非监督的信号处理方法,用于从混合信号中提取独立信号。

它通过最大化非高斯性来估计信号的独立性,并且可以用于很多实际的应用,包括语音分离、图像处理等领域。

以下是FastICA方法中涉及到的一些公式及其解释:第一步:数据预处理白化(Whitening)•公式:X w=D−1/2⋅W T⋅X白化是指将输入数据进行预处理,使其协方差矩阵为单位矩阵。

上述公式中,X为输入数据矩阵,D−1/2为输入数据的协方差矩阵的特征值的平方根的倒数矩阵,W为白化矩阵。

第二步:非高斯性估计趋势函数的定义•公式:g(u)=u⋅e−u2/2√2π趋势函数是FastICA中用于估计非高斯性的函数。

u为输入变量,g(u)即为输出变量,其形状类似于钟型曲线。

非高斯性的度量•公式:J(y)=E[g(y T⋅x)]−k非高斯性的度量J(y)是根据趋势函数g(u)定义的。

y是独立信号的估计值,x为经过白化后的数据,E[g(y T⋅x)]为趋势函数的期望值,k为一个常数。

第三步:独立信号的估计对称正交化•公式:W n+1=(E[z⋅g(y T⋅x)]−E[g′(y T⋅x)]⋅y)/∥E[z⋅g(y T⋅x)]−E[g′(y T⋅x)]⋅y∥对称正交化是在每次迭代中,将新的正交基向量添加到估计的混合矩阵中。

上述公式中,W n+1为新的正交基向量,z为y的一阶导数,g′(u)为趋势函数g(u)的一阶导数。

FastICA算法迭代•公式:W n+1=(E[X⋅g(W n T⋅X)]−E[g′(W n T⋅X)]⋅W n)/∥E[X⋅g(W n T⋅X)]−E[g′(W n T⋅X)]⋅W n∥FastICA算法通过不断迭代,利用上述公式更新估计的混合矩阵W,直到满足收敛条件。

示例解释以图像处理为例,假设有两个图像信号被线性混合,我们希望从混合信号中分离出这两个信号。

FastICA 1.2-4 快速独立成分分析算法说明书

FastICA 1.2-4 快速独立成分分析算法说明书

Package‘fastICA’November27,2023Version1.2-4Date2023-11-27Title FastICA Algorithms to Perform ICA and Projection PursuitAuthor J L Marchini,C Heaton and B D Ripley<***************>Maintainer Brian Ripley<***************>Depends R(>=4.0.0)Suggests MASSDescription Implementation of FastICA algorithm to perform IndependentComponent Analysis(ICA)and Projection Pursuit.License GPL-2|GPL-3NeedsCompilation yesRepository CRANDate/Publication2023-11-2708:34:50UTCR topics documented:fastICA (1)ica.R.def (5)ica.R.par (6)Index7 fastICA FastICA algorithmDescriptionThis is an R and C code implementation of the FastICA algorithm of Aapo Hyvarinen et al.(https: //www.cs.helsinki.fi/u/ahyvarin/)to perform Independent Component Analysis(ICA)and Projection Pursuit.1UsagefastICA(X,p,alg.typ=c("parallel","deflation"),fun=c("logcosh","exp"),alpha=1.0,method=c("R","C"),row.norm=FALSE,maxit=200,tol=1e-04,verbose=FALSE,w.init=NULL)ArgumentsX a data matrix with n rows representing observations and p columns representing variables.p number of components to be extractedalg.typ if alg.typ=="parallel"the components are extracted simultaneously(the default).if alg.typ=="deflation"the components are extracted one at atime.fun the functional form of the G function used in the approximation to neg-entropy (see‘details’).alpha constant in range[1,2]used in approximation to neg-entropy when fun== "logcosh"method if method=="R"then computations are done exclusively in R(default).The code allows the interested R user to see exactly what the algorithm does.ifmethod=="C"then C code is used to perform most of the computations,whichmakes the algorithm run faster.During compilation the C code is linked to anoptimized BLAS library if present,otherwise stand-alone BLAS routines arecompiled.row.norm a logical value indicating whether rows of the data matrix X should be standard-ized beforehand.maxit maximum number of iterations to perform.tol a positive scalar giving the tolerance at which the un-mixing matrix is considered to have converged.verbose a logical value indicating the level of output as the algorithm runs.w.init Initial un-mixing matrix of dimension c(p,p).If NULL(default) then a matrix of normal r.v.’s is used.DetailsIndependent Component Analysis(ICA)The data matrix X is considered to be a linear combination of non-Gaussian(independent)compo-nents i.e.X=SA where columns of S contain the independent components and A is a linear mixing matrix.In short ICA attempts to‘un-mix’the data by estimating an un-mixing matrix W where XW =S.Under this generative model the measured‘signals’in X will tend to be‘more Gaussian’than the source components(in S)due to the Central Limit Theorem.Thus,in order to extract the independent components/sources we search for an un-mixing matrix W that maximizes the non-gaussianity of the sources.In FastICA,non-gaussianity is measured using approximations to neg-entropy(J)which are more robust than kurtosis-based measures and fast to compute.The approximation takes the formJ(y)=[E{G(y)}−E{G(v)}]2where v is a N(0,1)r.v.log cosh(αu)and G(u)=−exp(u2/2).The following choices of G are included as options G(u)=1αAlgorithmFirst,the data are centered by subtracting the mean of each column of the data matrix X.The data matrix is then‘whitened’by projecting the data onto its principal component directionsi.e.X->XK where K is a pre-whitening matrix.The number of components can be specified bythe user.The ICA algorithm then estimates a matrix W s.t XKW=S.W is chosen to maximize the neg-entropy approximation under the constraints that W is an orthonormal matrix.This constraint en-sures that the estimated components are uncorrelated.The algorithm is based on afixed-point iteration scheme for maximizing the neg-entropy.Projection PursuitIn the absence of a generative model for the data the algorithm can be used tofind the projection pursuit directions.Projection pursuit is a technique forfinding‘interesting’directions in multi-dimensional datasets.These projections and are useful for visualizing the dataset and in density estimation and regression.Interesting directions are those which show the least Gaussian distribu-tion,which is what the FastICA algorithm does.ValueA list containing the following componentsX pre-processed data matrixK pre-whitening matrix that projects data onto thefirst p principal compo-nents.W estimated un-mixing matrix(see definition in details)A estimated mixing matrixS estimated source matrixAuthor(s)J L Marchini and C HeatonReferencesA.Hyvarinen and E.Oja(2000)Independent Component Analysis:Algorithms and Applications,Neural Networks,13(4-5):411-430See Alsoica.R.def,ica.R.parExamples#---------------------------------------------------#Example1:un-mixing two mixed independent uniforms#---------------------------------------------------S<-matrix(runif(10000),5000,2)A<-matrix(c(1,1,-1,3),2,2,byrow=TRUE)X<-S%*%Aa<-fastICA(X,2,alg.typ="parallel",fun="logcosh",alpha=1,method="C",row.norm=FALSE,maxit=200,tol=0.0001,verbose=TRUE)par(mfrow=c(1,3))plot(a$X,main="Pre-processed data")plot(a$X%*%a$K,main="PCA components")plot(a$S,main="ICA components")#--------------------------------------------#Example2:un-mixing two independent signals#--------------------------------------------S<-cbind(sin((1:1000)/20),rep((((1:200)-100)/100),5))A<-matrix(c(0.291,0.6557,-0.5439,0.5572),2,2)X<-S%*%Aa<-fastICA(X,2,alg.typ="parallel",fun="logcosh",alpha=1,method="R",row.norm=FALSE,maxit=200,tol=0.0001,verbose=TRUE)par(mfcol=c(2,3))plot(1:1000,S[,1],type="l",main="Original Signals",xlab="",ylab="")plot(1:1000,S[,2],type="l",xlab="",ylab="")plot(1:1000,X[,1],type="l",main="Mixed Signals",xlab="",ylab="")plot(1:1000,X[,2],type="l",xlab="",ylab="")plot(1:1000,a$S[,1],type="l",main="ICA source estimates",xlab="",ylab="")plot(1:1000,a$S[,2],type="l",xlab="",ylab="")#-----------------------------------------------------------#Example3:using FastICA to perform projection pursuit on a#mixture of bivariate normal distributions#-----------------------------------------------------------if(require(MASS)){x<-mvrnorm(n=1000,mu=c(0,0),Sigma=matrix(c(10,3,3,1),2,2)) x1<-mvrnorm(n=1000,mu=c(-1,2),Sigma=matrix(c(10,3,3,1),2,2)) X<-rbind(x,x1)a<-fastICA(X,2,alg.typ="deflation",fun="logcosh",alpha=1,ica.R.def5 method="R",row.norm=FALSE,maxit=200,tol=0.0001,verbose=TRUE)par(mfrow=c(1,3))plot(a$X,main="Pre-processed data")plot(a$X%*%a$K,main="PCA components")plot(a$S,main="ICA components")}ica.R.def R code for FastICA using a deflation schemeDescriptionR code for FastICA using a deflation scheme in which the components are estimated one by one.This function is called by the fastICA function.Usageica.R.def(X,p,tol,fun,alpha,maxit,verbose,w.init)ArgumentsX data matrixp number of components to be extractedtol a positive scalar giving the tolerance at which the un-mixing matrix is consideredto have converged.fun the functional form of the G function used in the approximation to negentropy.alpha constant in range[1,2]used in approximation to negentropy when fun=="logcosh"maxit maximum number of iterations to performverbose a logical value indicating the level of output as the algorithm runs.w.init Initial value of un-mixing matrix.DetailsSee the help on fastICA for details.ValueThe estimated un-mixing matrix W.Author(s)J L Marchini and C HeatonSee AlsofastICA,ica.R.par6ica.R.par ica.R.par R code for FastICA using a parallel schemeDescriptionR code for FastICA using a parallel scheme in which the components are estimated simultaneously.This function is called by the fastICA function.Usageica.R.par(X,p,tol,fun,alpha,maxit,verbose,w.init)ArgumentsX data matrix.p number of components to be extracted.tol a positive scalar giving the tolerance at which the un-mixing matrix is consideredto have converged.fun the functional form of the G function used in the approximation to negentropy.alpha constant in range[1,2]used in approximation to negentropy when fun=="logcosh".maxit maximum number of iterations to perform.verbose a logical value indicating the level of output as the algorithm runs.w.init Initial value of un-mixing matrix.DetailsSee the help on fastICA for details.ValueThe estimated un-mixing matrix W.Author(s)J L Marchini and C HeatonSee AlsofastICA,ica.R.defIndex∗multivariatefastICA,1∗utilitiesica.R.def,5ica.R.par,6fastICA,1,5,6ica.R.def,3,5,6ica.R.par,3,5,67。

fastica算法原理

fastica算法原理

fastica算法原理
FastICA算法是一种独立成分分析算法,它可以将多个信号分离成独立的成分。

该算法的原理是基于统计学的方法,通过最大化非高斯性来实现信号的分离。

FastICA算法的基本思想是:假设有n个信号源,每个信号源可以表示为一个n维向量,将这些向量组成一个n×m的矩阵X,其中m表示信号源的数量。

FastICA算法的目标是找到一个n×n的矩阵W,使得W*X的每一列都是独立的信号成分。

FastICA算法的实现过程如下:
1. 对原始信号进行中心化处理,即将每个信号的均值设为0。

2. 随机初始化一个n×n的矩阵W。

3. 对W进行正交化处理,使得W的每一列都是单位向量。

4. 通过最大化非高斯性来更新W,即使得W*X的每一列都是非高斯分布的。

这一步可以通过对W进行旋转来实现,旋转的角度可以通过最大化Kurtosis来确定。

5. 重复步骤4,直到W的每一列都是独立的信号成分。

FastICA算法的优点是可以处理非高斯分布的信号,而且不需要对信号进行任何假设。

它在信号处理、图像处理、语音识别等领域都有广泛的应用。

总之,FastICA算法是一种非常有效的独立成分分析算法,它可以将多个信号分离成独立的成分。

该算法的原理是基于统计学的方法,通过最大化非高斯性来实现信号的分离。

FastICA算法在信号处理、图像处理、语音识别等领域都有广泛的应用。

一种改进的FastICA算法及其在含噪盲源分离中的应用

一种改进的FastICA算法及其在含噪盲源分离中的应用
De c . 2 01 3
DOI : 1 0 . 3 9 6 9 / j . i s s n . 1 6 7 1 - 0 6 7 3 . 2 0 1 3 . 0 6 . 0 1 1

种改进 的 F a s t I C A算 法 及 其在 含 噪 盲源 分 离 中的应 用
昊 微 , 彭 华 , 周 正 康
( 1 . 信息工程大学 , 河南 郑州 4 5 0 0 0 1 ; 2 . 西安通信学 院, 陕西 西 安 7 1 0 1 0 6 )
摘要 : 针对含 噪环 境下 的盲 源 分 离 问题 , 将 一 种稳 健 的含 噪条 件 下 的 白化 预处 理 方 法 应用 于
F a s t I C A算法 中, 提 出了一种 改进 的 F a s t I C A 算 法。 实验 仿 真 结果 表 明: 该 算 法 的抗 噪 声 性 能 比经典 的 F a s t I C A算 法和 R o b u s t l C A算 法有 了较大地 改善 , 而运 算量基 本 不变。
t i o n i n n o i s y c i r c u ms t a n c e s , wh i c h c o mb i n e s t he r o b u s t wh i t e n i ng a l g o r i t hm i n n o i s y c i r c ums t a n c e s
Ab s t r a c t :An i mp r o v e d Fa s t I CA a l g o r i t h m i s p r o p o s e d a i mi n g a t t h e p r o b l e m o f b l i n d s o u r c e s e p a r a —

ICA快速算法原理和matlab算法程序

ICA快速算法原理和matlab算法程序




顿迭代法解方程(3.8) 。用 F 表示式(3.8)左边的函数,可得 F 的雅可比矩阵 JF W 如 下:
JF W E XX T g ' W T X I



(2.9)
为了简化矩阵的求逆,可以近似为(3.9)式的第一项。由于数据被球化, E XX T I , 所 以,E XX T g ' W T X
Y=WP'*Z; G=Y.^3;%G为非线性函数,可取y^3等 GG=3*Y.^2; %G的导数 count=0; LastWP=zeros(m,1); 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((






(2.10)
这里, W 是 W 的新值, E W T Xg W T X ,规格化能提高解的稳定性。简化后就可 以得到 FastICA 算法的迭代公式:

W E Xg W T X E g ' W T X W W W / W


T

T
I ,其中: I 为单位矩阵,我
T
们称这个向量为白化向量。白化的本质在于去相关,这同主分量分析的目标是一样的。在 ICA 中 , 对 于 为 零 均 值 的 独 立 源 信 号 S t S1 t ,..., S N t , 有 :

独立分量分析-FastICA

独立分量分析-FastICA

其中,KI是正的常量;V是标准的高斯随机变量,函 数G是非二次型函数,较好地选择G可以得到稳健的 估计器。通常情况下,G的形式为
其中, a1, a2 [1,2]
FAST-ICA反演化探数据元素组合模型 为使负熵最大化,获得最优的
根据KUHN-TUCHKER条件,经过简化给出的FAST-ICA迭代

其中,W+ 是新的W值。
对于FAST-ICA算法,数据预处理是一个最基本、最必要 的过程。该过程包括去均值和白化(或球化)。
去均值过程起到简化ICA算法的作用
白化[63][65]也是信号源盲分离算法中一个经常用到的 预处理方法,对于某些盲分离算法,白化还是一个必须的 预处理过程。对混合信号的白化实际上就是去除信号各个 分量之间的相关性。
Y=0.7213×AU+0.3829×AG+0.5361×CU+0.2011×PB0.068×ZN
由系数可以看出,对独立分量Y的影响较大的元 素是CU和AU,所以可以判定Y是我们要寻求的成矿元 素组合,而CU和AU是矿致的指示元素。
为解决寻求最优的成矿元素组合的问题,将单元 素地球化学数据视为多道观测信号X(T),将影响元素 组合的各种因素视为混合矩阵A,在影响因素难以确 定的前提下,从统计独立性的角度出发,将分离出 各独立分量中能量最大的分量视为成矿元素组合。
应用FAST-ICA算法对所给地化数据得到能量最大 的独立分量为:
FAST-ICA算法能够更科学的去除元素组合之间的相 关性,得到的元素组合比传统方法更具有说服力。
从处理技术上看,依据独立性分解势必涉及概论 密度函数或高阶统计量,而处理过程常常要引入非 线性环节。而地球化学数据从本质上将也是非线性 的,所以应用该技术来对地球化学数据进行处理是 合理的、可行的。从这一意义上看,FAST-ICA技术优 越于常用的只建立在二阶统计量的线性处理技术。

fastica算法步骤

fastica算法步骤

fastica算法步骤1.数据预处理首先,对输入数据进行预处理。

这通常包括去均值操作,将数据集的均值调整为零。

这对于独立分量估计是非常重要的,因为FastICA算法是基于非高斯性的原理。

2.中心化操作对数据集进行中心化操作,将数据的均值调整为零。

这是通过对原始数据做减法操作来实现的,即减去数据集的均值。

3.数据白化白化操作的目的是将数据的协方差矩阵变成一个单位矩阵,从而使得各个维度之间具有相同的方差。

白化操作可以通过对数据进行线性变换来实现,变换后的数据具有零均值和单位方差。

这可以通过将数据集乘以数据矩阵的逆平方根来实现。

4.初始化初始化分离矩阵W。

分离矩阵W的维度与数据的维度相同,它包含了用于分离源信号的权重。

可以随机初始化W矩阵,也可以使用其他方法进行初始化。

5.ICA迭代在每次迭代中,根据FastICA算法的公式更新分离矩阵W,直到满足停止准则。

6.盲源分离使用更新后的分离矩阵W来对数据进行盲源分离。

通过将数据乘以分离矩阵的转置,可以还原原始的独立源信号。

接下来,我们将对每个步骤进行更详细的解释:1.数据预处理:数据预处理是为了确保使用FastICA算法得到的独立分量是非高斯的。

如果数据集存在较高的均值,或者出现线性相关性,那么得到的独立分量可能是混合的。

因此,需要对原始数据进行预处理,确保数据集的均值调整为零。

2.中心化操作:中心化操作是将数据的均值调整为零。

通过对每个样本数据减去数据集的均值,可以将数据的中心移到零点。

这样做有助于通过独立分量分析来获取独立的源信号。

3.数据白化:白化操作是将数据的协方差矩阵变成单位矩阵的过程。

它可以通过线性变换来实现,变换后的数据具有零均值和单位方差。

这对于FastICA算法的有效性至关重要,因为FastICA算法是建立在非高斯性的原理上的。

白化操作可以通过将数据集乘以数据矩阵的逆平方根来实现。

4.初始化分离矩阵W:初始化分离矩阵W是通过随机初始化或其他方法来对分离矩阵进行初始化。

基于独立分量分析的FastICA心电消噪

基于独立分量分析的FastICA心电消噪

基于独立分量分析的Fa stI CA 心电消噪王永飞(安徽大学,安徽合肥230039)王永飞(),男,安徽贵池人,安徽大学计算机学院级硕士研究生,铜陵职业技术学院讲师。

研究方向生物医学信息处理。

作者简介收稿日期6摘要:本文介绍基于独立分量分析的一种算法FastICA ,根据FastICA 算法对脑电中心电噪声的消除,实验结果表明,采用该算法成功地消除了脑电中的心电信号,实现了脑电信号在噪声中的有效提取。

关键词:独立分量分析;FastICA ;消噪中图分类号:TP39文献标识码:A文章编号:1671-752X (2006)03-0067-022006年第3期铜陵职业技术学院学报一、引言脑电图(EEG )是一种有效的神经功能成像和分析工具,具有时间分辨率高、信号微弱、非平稳性等特点,随着一系列现代分析技术的发展如高分辨率脑电、脑电成像技术、非线性动力学分析、偶极子追踪等,EEG 在研究人类思维和疾病的过程中将发挥越来越大的作用。

但是脑电信号幅值低,变异性大,在实际应用中极易受噪音信号的干扰,严重影响信号采集和分析的效率。

独立分量分析是从上世纪九十年代中期发展起来的一项信号处理新技术,由于该技术与EEG 信号产生机制具有某种天然的联系,很快就用于脑电研究,并取得了一系列成果。

其中独立分量分析消除脑电噪音干扰就是一个研究方向。

本研究综合了国内外学者成果,进一步深入研究了独立分量分析消除脑电干扰的优选算法,采用FastICA 算法成功的从32导联早老性痴呆症患者EEG 信号中分离出心电噪音干扰,表现出FastICA 算法的优越性。

二、独立分量分析(ICA )独立分量分析是近年来由盲信源分解技术发展而来的多道信号处理方法。

通过假定传感器阵列所采集到的信号是多个具有统计独立性的内在信源信号的线性叠加,再采用某种特定的优化准则将所谓的独立分量一一分解出来。

1995年芬兰学者Hyvarinen 提出了基于互信息最大和牛顿下降法的快速ICA 算法,即FastICA 。

复信号fastica算法

复信号fastica算法

复信号fastica算法
FastICA算法是一种用于盲源信号分离的算法,它可以从混合信号中分离出独立的源信号。

以下是FastICA控制台指令的使用方法:
1. 打开控制台:在命令行中输入“control”并按回车键,即可打开控制台。

2. 选择FastICA算法:在控制台中选择“信号处理”选项卡,然后在“盲源信号分离”中选择“FastICA”算法。

3. 导入数据:使用“import”命令导入需要分离的混合信号数据。

4. 参数设置:根据具体情况设置FastICA算法的参数,例如迭代次数、收敛阈值等。

5. 运行算法:使用“run”命令运行FastICA算法,开始分离源信号。

6. 查看结果:在控制台中查看分离出的源信号结果,可以使用绘图命令将结果可视化。

7. 保存结果:使用“save”命令将分离出的源信号结果保存到文件中,以便后续处理和分析。

需要注意的是,以上控制台指令的具体命令可能因不同版本或不同平台而有所不同,用户需根据具体的软件环境或编程环境进行调整和修改。

独立分量分析在脑电信号混合噪声分离中的应用

独立分量分析在脑电信号混合噪声分离中的应用

独立分量分析在脑电信号混合噪声分离中的应用摘要:在脑电信号的采集和处理过程中,常常受到各种噪声伪迹的干扰。

本文将独立分量分析(Independent Component Analysis,ICA)技术应用在脑电信号的眼电噪声分离问题上。

本文分别使用四种常用的ICA算法:二阶盲识别(SOBI)、Hyvarinen不动点算法(FastICA)、Infomax和联合逼近特征矩阵对角化(JADE)用于脑电信号的眼电伪迹分离,并使用MATLAB作为实验平台,采用格茨数据集2a,针对四种算法的运行时间及分配内存进行了实验对比。

实验结果表明,SOBI算法的MATLAB实现表现了最好的综合性能。

相较其他三个ICA算法,SOBI 算法能够在分配内存较小的情况下快速准确地去除脑电信号中的噪声。

关键词:独立分量分析(ICA);脑电信号(EEG);盲源分离(BSS);1.引言脑电信号(ElectroEncephaloGrapgy,EEG)是一类反映大脑活动的微弱生物电信号,其中包含了大量的生理和病理信息,在研究人脑功能、疾病预防及诊断等方面,EEG信号发挥了非常重要的作用。

但是在脑电信号的采集过程中,经常受到诸如眼电、肌电、心电等外界的干扰,使得采集到的脑电信号中包含了严重的噪声伪迹,影响了脑电信号的分析及分类识别。

因此,如何在确保不丢失脑电信号的前提下消除噪声伪迹,是脑电信号预处理阶段的一个首要研究内容。

盲源分离(Blind Sourse Separation,BSS)是盲信号处理领域中的一个主要研究方向,盲源分离算法能从观测到的混合信号中,提出未知的“源”信号。

多导联采集到的EEG信号是由多个脑电“源”信号经由头部的容积传导效应混合形成的,因此,利用盲源分离的脑电信号分析方法能够有效地基于头皮空间域进行脑电信号分析。

国内外学者提出了许多盲信源分离方法,其中基于统计独立性的独立分量分析(Independent Component Analysis,ICA)方法应用最为广泛。

改进的FastICA算法研究

改进的FastICA算法研究

改进的FastICA算法研究张杰;刘辉;欧伦伟【摘要】独立分量分析是目前盲源分离算法中最常用的一种方法,其中快速独立分量分析(FastICA)以其收敛速度快而被广泛应用,但FastICA对初始值的选择比较敏感,而且在使用牛顿迭代法时,每迭代一步都需要计算一次函数值和一次导数值,当函数比较复杂时,计算它的导数值往往不方便,用单点弦截法进行迭代,将最速下降法与单点弦截法结合,在保证分离效果的同时使FastICA的迭代次数减少,同时使计算式更加简洁,而且减小了对初始值的敏感性,仿真实验验证了其有效性。

%Independent Component Analysis(ICA)is the blind source separation algorithm which is one of the most com-monly used methods. And the Fast Independent Component Analysis(FastICA)with its convergence speed is widely used. But FastICA is sensitive to the choice of initial value, and in the use of Newton iterative method, each iteration step is needed to calculate a function value and a derivative value. When the function is more complex, computing its derivatives is often not convenient. This paper uses the single point string section method to iterate. Combining the steepest descent method with the single point string section method, while ensuring the separation effect, it makes FastICA iterative times reduce. At the same time it makes the calculation type more concise, and reduces the sensitivity to the initial value.【期刊名称】《计算机工程与应用》【年(卷),期】2014(000)006【总页数】4页(P210-212,218)【关键词】Fast独立分量分析(ICA);牛顿法;弦截法;最速下降法;负熵【作者】张杰;刘辉;欧伦伟【作者单位】湖南师范大学物理与信息科学学院,长沙 410081;湖南师范大学物理与信息科学学院,长沙 410081;湖南师范大学物理与信息科学学院,长沙410081【正文语种】中文【中图分类】TN911.7独立分量分析(Independent Component Analysis,ICA)[1]是为解决盲信号分离而逐渐发展起来的,近些年成为信号处理和数据分析的有力工具。

fastICA工具箱使用攻略

fastICA工具箱使用攻略

北京理工大学 计算机学院 刘茜 倾心制作
出,如下 ‘pcaE’ (矩阵)特征向量 ‘pcaD’ (矩阵)特征值 如果已经知道白化数据,可以直接在算法中以参数给出,如下 ’whiteSig ’ (矩阵)白化信号 ‘whiteMat ’ (矩阵)白化矩阵 ‘dewhiteMat ’ (矩阵)去白化矩阵 如果只想进行一些预处理,比如只白化或 pca,那么使用 only 选项 ‘only’ ‘white’只进行白化 程序调用方法: [whitesig, WM, DWM] = fastica(mixedsig, 'only', 'white') 返回白化的信号、白化矩阵、去白化矩阵。在fastICA这个算 法中白化矩阵主要用来白化和降维, 去白化矩阵是白化矩阵 的伪逆。 ‘pca’只进行 pca 降维 程序调用方法: [E, D] = fastica(mixedsig, 'only', 'pca') 返回特征向量和对角特征值矩阵 ‘all’默认值,进行白化-降维-ICA 函数调用的例子: %使用'tanh' g(u)=tanh(a1*u)进行非线性,并行进行独立成分估计 [icasig] = fastica (mixedsig, 'approach', 'symm', 'g', 'tanh'); %降维到10维,只估计出3个独立成分(IC) [icasig] = fastica (mixedsig, 'lastEig', 10, 'numOfIC', 3); %不输出收敛报告,不画独立成分的图 [icasig] = fastica (mixedsig, 'verbose', 'off', 'displayMode', 'off');

fastica用到的公式

fastica用到的公式

fastica用到的公式FastICA算法的目标是找到一个矩阵W,使得Y = WX,其中Y是分离后的信号矩阵。

为了实现这个目标,FastICA算法使用最高高波幅度(non-gaussianity)的度量,如峭度(kurtosis),来度量成分的非高斯性,从而区分成分之间的独立性。

具体来说,FastICA使用以下公式:1.中心化:首先,对混合信号矩阵X进行中心化操作,即减去每一列的均值,得到矩阵X_c:X_c = X - mean(X)2.随机初始化:对于混合信号的维度d,随机初始化投影矩阵W为一个d×d的正交矩阵。

正交矩阵满足WTW=I,其中I是单位矩阵。

3.迭代更新:迭代更新W,使得Y=WX的各个维度非高斯。

具体的迭代更新公式为:w_new = E{Xg(w_old^T X)} - E{g_prime(w_old^T X)}w_old其中,g是一个非线性函数,常用的选择有tanh、exp、cube等。

w_old是上一轮迭代得到的投影矩阵w,w_new是本轮迭代得到的新的投影矩阵w,E代表求期望。

g(w_old^T X)和g_prime(w_old^T X)分别代表g函数和g的导数关于w_old^T X的值。

4.正交化:在每次迭代更新后,为了保证投影矩阵W正交,需要对W进行正交化处理。

一般采用Gram-Schmidt正交化方法来实现。

5.终止条件:迭代更新的终止条件可以是达到设定的最大迭代次数,或者前后两次更新之间的变化小于一些阈值。

上述的迭代步骤会不断进行,直到满足终止条件为止。

最终得到的投影矩阵W即为所求的独立成分。

需要注意的是,FastICA算法对信号的非高斯性做了一定的假设,因此在实际应用中,对信号的非高斯性检验是必要的。

如果信号的成分是高斯分布的,FastICA算法可能无法正确地将其分离出来。

此外,对于信号混合过程中存在非线性映射的情况,FastICA算法的效果也有可能受到影响。

独立成分分析全

独立成分分析全

代码实现
算法结果
5、infomaxICA
infomaxICA---- 非线性去相关
是美国Salk Institute计算神经生物学实验室的研究者没 首先提出的。其特点就是在输出y之后逐分量的引入一 个非线性函数ri=gi(yi)来代替高阶统计量的估计。
B
Infomax法的判据是:经过B阵解混后对所得的y的每一个 分量yi分别用一个非线性的函数gi(yi)加以处理,得
白化操作:
均匀分布的两 个独立成分S1, S2的联合分布
观测混合量 X1,X2的联 合分布
均匀分布的两 个独立成分白 化混合的联合 分布
正交系统
E WT Z 2 W 2 1
fastICA实际上是一种寻找wTz(Y= wTz )的非高斯最大的不动点迭代 方案。为了推导近似牛顿法,首先wTz的近似负熵的极大值通常在 E{g(wTz) }极值点处取得。根据拉格朗日条件, E{g(wTz) }在约束
M
H(r,B)=H (x) log | B | log gi '( yi) i 1
式中Ex(.)是 指P(x)为概 率的函数的均 值。在做梯度 处理时,取消 总集的均值过 程,得:
M
H(r,B)=H (x) log | B | log gi '( yi)
i 1
将上式对B求导
第一项:与B无关;
xij
由于 gi ( yi ) p( y)dy 得 gi' ( yi ) p( yi ) 要使y接近S,则应使p(yi)接近于信源的p(si)
实际中p(si)一般是未知的。所以gi选取不是很苛刻。某些单调增长函数可以
选择(如:sigmoid函数、tanh函数)。
当满足 gi' ( yi ) p( yi ) 时意味着各非线性函数与各p(yi)匹配,因而输出的ri接近于均匀

vivado的fastica代码实例

vivado的fastica代码实例

vivado的fastica代码实例FastICA(Fast Independent Component Analysis)是一种常用的独立成分分析算法,用于从混合信号中提取出独立的成分。

在Vivado中,我们可以使用HLS(High-Level Synthesis)工具来实现FastICA算法的硬件加速。

本文将介绍如何使用Vivado HLS编写FastICA的代码,并给出一个实例。

首先,我们需要创建一个新的Vivado HLS项目。

打开Vivado HLS软件,选择“New Project”,然后选择一个目录和项目名称。

接下来,选择“RTL Project”作为项目类型,并点击“Next”。

在“Add Files”页面,我们需要添加FastICA算法的源代码文件。

这里我们假设已经有一个名为“fastica.cpp”的源代码文件。

点击“Add Files”,然后选择“fastica.cpp”文件,并点击“Finish”。

在“Solution”页面,我们可以设置一些项目选项。

例如,我们可以选择使用哪种综合器、设置时钟频率等。

这里我们使用默认选项,然后点击“Next”。

在“Source”页面,我们可以看到我们添加的源代码文件。

点击“RunC Simulation”按钮,可以对代码进行仿真测试,以确保其正确性。

如果仿真通过,我们可以继续进行下一步。

在“Solution”页面,点击“Run C Synthesis”按钮,进行C综合。

综合完成后,我们可以在“Solution”页面的“Reports”选项卡中查看综合报告,以了解综合结果。

接下来,我们需要将C代码转换为RTL(Register Transfer Level)代码。

在“Solution”页面,点击“Run C/RTL Co-Simulation”按钮,进行C/RTL协同仿真。

协同仿真完成后,我们可以在“Solution”页面的“Reports”选项卡中查看协同仿真报告。

独立成分分析中的常用工具软件介绍(九)

独立成分分析中的常用工具软件介绍(九)

独立成分分析中的常用工具软件介绍(九)独立成分分析(Independent Component Analysis, ICA)是一种用于从混合信号中分离出独立成分的数据分析方法。

它在信号处理、机器学习、神经科学等领域都有广泛的应用。

在进行独立成分分析时,需要使用一些专门的工具软件来帮助实现算法。

本文将介绍一些常用的独立成分分析工具软件,以及它们的特点和适用范围。

MATLABMATLAB是一种流行的科学计算软件,它提供了丰富的工具箱和函数库,可以方便地实现独立成分分析算法。

MATLAB的信号处理工具箱和统计工具箱中均包含了ICA算法的实现。

用户可以使用这些工具箱中的函数来进行数据预处理、独立成分分析、以及结果的可视化和验证。

由于MATLAB具有较高的灵活性和可扩展性,因此可以根据具体的需求自定义算法实现,适用于各种规模和类型的数据集。

PythonPython是另一种流行的科学计算语言,它的生态系统中也包含了丰富的独立成分分析工具。

scikit-learn是Python中一个常用的机器学习库,其中包含了ICA算法的实现。

此外,Python还有许多其他专门用于信号处理和数据分析的库,如NumPy、SciPy和Pandas,它们都提供了ICA算法的实现。

Python的优势在于其简洁而强大的语法和丰富的库支持,适用于快速原型设计和大规模数据处理。

FastICAFastICA是一个专门用于独立成分分析的开源工具软件,它提供了多种算法实现和性能优化。

FastICA不仅提供了基本的ICA算法,还包括了对各种数据类型和分布假设的适应性。

用户可以通过调整参数来实现对非高斯信号的分离,以及对数据分布的估计和建模。

FastICA还提供了Python和MATLAB的接口,便于与其他库和工具集成使用。

JADEJADE(Joint Approximate Diagonalization of Eigenmatrices)是另一个常用的ICA算法,它专门用于处理高维数据和多个传感器的混合信号。

fastICA

fastICA

fastICA%说明:%FastICA programs:%fascita —command line version of FastICA%Separate functions used by FastICA programs:%fpica —main algorithm for calculating ICA%whitenv —function for whitening data%pcamat —caculates the PCA for data%dispsig —plots the data vectors%remmean —function for removing mean%selcol —function used by pcamat%demosig —generates some test signals%程序:function[Out1,Out2,Out3]=fastica(mixedsig,s1,v1,s2,v2,s3,v3,s4,v4,s5 ,v5,s6,v6,s7,v7,s8,v8,s9,v9,s10,v10,s11,v11,s12,v12,s13,v13,s14,v14,s15,v15,s16,v16,s17,v17,s18,v18,s19,v19,s20,v20); %FASTICA——fast independent component analysis .% FASTICA(mixedsig)estimates the independent components from given multidimensional signals.%each row of matrix mixedsig is one observed signal .%[icasig]=FASTICA(mixedsig);the rows of icasig contain the estimated independent components . %[icasig,A,W]=FASTICA(mixedsig);outputs theestimated separating matrix W and the corresponding mixing matrixA(obtained as pseudoinverse of W)as well. %[A,W]=FASTICA(mixedsig);gives only the estimated mixing matrix A and the separating matrix W.%optional parameters :%’approach ’ (string) the decorrelation approach used。

基于负熵最大化的FastICA算法

基于负熵最大化的FastICA算法

基于负熵最大化的FastICA 算法一.算法原理:独立分量分析(ICA )的过程如下图所示:在信源()s t 中各分量相互独立的假设下,由观察()x t 通过结婚系统B 把他们分离开来,使输出()y t 逼近()s t .图1—ICA 的一般过程ICA 算法的研究可分为基于信息论准则的迭代估计方法和基于统计学的代数方法两大类,从原理上来说,它们都是利用了源信号的独立性和非高斯性。

基于信息论的方法研究中,各国学者从最大熵、最小互信息、最大似然和负熵最大化等角度提出了一系列估计算法。

如FastICA 算法, Infomax 算法,最大似然估计算法等。

基于统计学的方法主要有二阶累积量、四阶累积量等高阶累积量方法。

本实验主要讨论FastICA 算法。

1。

数据的预处理一般情况下,所获得的数据都具有相关性,所以通常都要求对数据进行初步的白化或球化处理,因为白化处理可去除各观测信号之间的相关性,从而简化了后续独立分量的提取过程,而且,通常情况下,数据的白化处理能大大增强算法的收敛性。

若一零均值的随机向量()T M Z Z Z ,,1 =满足{}I ZZ E T =,其中:I 为单位矩阵,我们称这个向量为白化向量。

白化的本质在于去相关,这同主分量分析的目标是一样的。

在ICA 中,对于为零均值的独立源信号()()()[]T N t S t S t S ,...,1=,有:{}{}{}j i S E S E S S E j i j i ≠==当,0,且协方差矩阵是单位阵()I S =cov ,因此,源信号()t S 是白色的。

对观测信号()t X ,我们应该寻找一个线性变换,使()t X 投影到新的子空间后变成白化向量,即:()()t X W t Z 0= (2.1) 其中,0W 为白化矩阵,Z 为白化向量。

利用主分量分析,我们通过计算样本向量得到一个变换T U W 2/10-Λ=其中U 和Λ分别代表协方差矩阵X C 的特征向量矩阵和特征值矩阵。

ICA算法介绍

ICA算法介绍

ICA算法介绍⼀种基于独⽴分量分析的识别算法引⾔在模式识别领域中,仅获得待识别⽬标的原始数据是不够的,需要从原始数据中发掘潜在的本质信息。

通常待识别⽬标的原始数据的数据量相当⼤,处于⼀个⾼维空间中,直接⽤原始数据进⾏分类识别,计算复杂度⾼且影响了分类器的性能。

为了有效实现分类识别,需要从待识别⽬标的原始数据映射到⼀个低维空间,提取到最⼤可能反映待识别⽬标的本质信息。

⽬前常⽤的提取特征的⽅法有主分量分析(PCA)和独⽴分量分析(ICA)。

(1)PCA(Principal Component Analysis)是⼀种最⼩均⽅意义上的最优变换,它的⽬标是去除输⼊随机向量之间的相关性,突出原始数据中的隐含特性。

其优势在于数据压缩以及对多维数据进⾏降维。

但PCA⽅法利⽤⼆阶的统计信息进⾏计算,并未考虑到信号数据的⾼阶统计特性,变换后的数据间仍有可能存在⾼阶冗余信息。

[⽂献1,2](2)ICA(Independent Component Analysis)是20世纪90年代Jutten和Herault 提出的⼀种新的信号处理⽅法。

该⽅法的⽬的是将观察到的数据进⾏某种线性分解,使其分解成统计独⽴的成分。

从统计分析的⾓度看,ICA和PCA同属多变量数据分析⽅法,但ICA处理得到的各个分量不仅去除了相关性,还是相互统计独⽴的,⽽且是⾮⾼斯分布。

因此,ICA能更加全⾯揭⽰数据间的本质结构。

所以,ICA在许多⽅⾯对传统⽅法的重要突破使得其越来越成为信号处理中⼀个极具潜⼒的⼯具,并已在模式识别、信号除噪、图像处理等诸多领域中得到了⼴泛应⽤。

[⽂献3,4,5]原理[⽂献6,7,8](1)ICA步骤1、标准化:数据标准化的主要⽬的是从观测数据中除去其均值。

2、⽩化:⽩化的主要⽬的是去除数据的相关性。

数据的⽩化处理可以使随后的计算⼤为简化,并且还可以压缩数据。

我们通常使⽤特征值分解的⽅法进⾏数据的⽩化。

3、ICA判据:在设计ICA算法的过程中,最实际的困难是如何可靠地验证源信号分量间的独⽴性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

%说明:%FastICA programs:%fascita —command line version of FastICA%Separate functions used by FastICA programs:%fpica —main algorithm for calculating ICA%whitenv —function for whitening data%pcamat —caculates the PCA for data%dispsig —plots the data vectors%remmean —function for removing mean%selcol —function used by pcamat%demosig —generates some test signals%程序:function[Out1,Out2,Out3]=fastica(mixedsig,s1,v1,s2,v2,s3,v3,s4,v4,s5,v5,s6,v6,s7,v7,s8,v8,s9,v9,s 10,v10,s11,v11,s12,v12,s13,v13,s14,v14,s15,v15, s16,v16,s17,v17,s18,v18,s19,v19,s20,v20);%FASTICA——fast independent component analysis .% FASTICA(mixedsig)estimates the independent components from given multidimensional signals.%each row of matrix mixedsig is one observed signal .%[icasig]=FASTICA(mixedsig);the rows of icasig contain the estimated independent components . %[icasig,A,W]=FASTICA(mixedsig);outputs the estimated separating matrix W and the corresponding mixing matrix A(obtained as pseudoinverse of W)as well.%[A,W]=FASTICA(mixedsig);gives only the estimated mixing matrix A and the separating matrix W.%optional parameters :%’approach ’(string) the decorrelation approach used。

%’numOfIC’(integer) Number of independent components to be estimated . Ignored if ‘approach ’=’symm’.Default equals the dimension of data .%——Choosing the nonlinearity :%’g’(string)Choose nonlinearity g used in the fixed-point algorithm .Possible values :Value of ‘g’:Nnlinerity used:’pow3’(default) g(u)=u^3 ’tanh’g(u)=tanh(a1*u) ‘gaus’g(u) =u*exp(-a2*u^2/2)%’a1’(number) Parameter a1 used when g=’tanh’.%’a2’(number) Parameter a2 used when g=’gaus’.%——Controlling convergence :%’epsilon’(number)stopping criterion .default is 0.0001.%’maxnumiterations’(integer)maximum number of iterations .%’initguess’(matrix)initial guess for A.default is random.%——graphics and text output%’VERSOSE ’(string)either ‘on’or ‘off’.default is ‘on’:report progress of algorithm in text format .%’displaymode’(string) plot running estimates of independent components :’on’or ‘off’. default ‘on’.%’displayinterval’number of iteration between plots .%if you already know the eigenvalue decomposition of the convariance matrix ,you can avoidcomputing it again by giving it with the following options:%’pcaD’(matrix) eigenvectors%’pcaE’(matrix) eigenvalues%if you already know the whritened data,you can give it directly to the algorithm using the following options :%’whiteSig ’(matrix )whitened signal%’whiteMat’(matrix )whitening matrix%’dewhiteMat ’(matrix ) dewhitening matrix%if values for all the ’whiteSig ’, ’whiteMat’and ’dewhiteMat ’are suplied ,they will be used in computing the ica .pca and whitening are not performed .though ‘mixedsig’is not used in the main algorithm it still must be entered –some values are still calculated from it .%performing preprocessing only is possible by the option:’only ’(string )cmpute only pca i.e. reduction of dimendion (‘pca’)or only pca puls whitening (‘white ’).Dewhitening%marix is the pseudoinverse of whitening marix.%[E,D]=fastica(mixesig,’only’,’pca’)%return the eigrnvector(E) anddiagnal eigenvalue (D) matrices containing the seckected subspaces.%examples%[icasig]=fastica(mixedsig,’approach’,’symm’,’g’,’tanh’);%do ica with tanh nonlinearity and in parallelmiedsig=remmean(mixedsig);[Dim,NumOfSampl]=size(mixedsig);firstEig=1;lastEig=Dim;interactivePCA='off';approach='def1';numOfIC=Dim;g='pow3';a1=1;a2=1;epsilon=0.0001;maxNumIterations=1000;initState='rand';guess=0;displayMode='on';displayInterval=1;b_verbose=1;jumpPCA=0;jumpWhitening=0;only=3;userNumOfIC=0;if(rem(nargin-1,2)==1)error('optional patamters should always go by pairs');eslefori=1:(nargin-1)/2str_param=eval(['s'int2str(i)]);val_param=eval(['s'int2str(i)]);if strcmp(str_param,'verbose')verbos=val_param;if strcmp(verbose,'off'),b_verbose=0;endelseif strcmp(str_param,'firstEig')firstEig=val_param;elseif strcmp(str_param,'lastEig')lastEig=val_param;elseif strcmp(str_param,'interactivePCA') interactivePCA=val_param;elseif strcmp(str_param,'approach') approach=val_param;elseif strcmp(str_param,'numOfIC') numOfIC=val_param;usernumOfIC=1;elseif strcmp(str_param,'g')g=val_param;elseif strcmp(str_param,'a1')a1=val_param;elseif strcmp(str_param,'a2')a2=val_param;elseif strcmp(str_param,'epsilon')epsilon=val_param;elseif strcmp(str_param,'maxNumIterations') maxNumIterations=val_param;elseif strcmp(str_param,'initGuess') initSate='guess';guess=val_param;elseif strcmp(str_param,'displayMode') displayMode=val_param;elseif strcmp(str_param,'displayInterval') displayInterval=val_param;elseif strcmp(str_param,'pcaE')jumpPCA=jumpPCA+1;E=val_param;elseif strcmp(str_param,'pcaD')D=val_param;elseif strcmp(str_param,'whiteSig') jumpWhitening=jumpWhitening+1; whitesig=val_param;elseif strcmp(str_param,'whiteMat') jumpWhitening=jumpWhitening+1; whiteningMatrix=val_param;elseif strcmp(str_param,'dewhiteMat')jumpWhitening=jumpWhitening+1;dewhiteningMatrix=val_param;elseif strcmp(str_param,'only')if strcmp(val_param,'pca')only=1;elseif strcmp(val_param,'white')only=2;elseif strcmp(val_param,'all')only=3;endelseerror(['unrecognized parameter:'''str_param'''']);end;end;endif Dim>NumOfSampleif b_versosefprintf('warning');fprintf('the signal matrix may be oriented in the wrong way .\n'); fprintf('in that case transpose the matrix.\n');endendif jumpWhitening==3if b_versose,fprintf('whitened signal and corresponding matrises suplied.\n'); fprintf('PCA calculations not needed.\n');end;elseif jumpPCA==2,if b_versose,fprintf('values for PCA calculations suplies.\n');fprintf('PCA calculations not needed.\n');end;elseif (jumpPCA>0)&(b_versose),printf('you must suply all of these in order to jump PCA:');printf('"pcaE","pcaD".\n');end;[E,D]=pcamat(mixedsig,firstEig,lastEig,interactivePCA,verbose); endendif only>1if jumpWhitening ==3,if b_verbose,printf('whitening not needed.\n')end;elseif (jumpWhitening>0)&(b_versose),printf('you must suply all of these in order to jumpwhitening:');printf('"whiteSig","whiteMat","dewhiteMat".\n');end;[whitesig,whiteningMatrix,dewhiteningMatrix]=...whitenv(mixedsig,E,D,verbose);endif only >2Dim=size(whitesig,1);if strcmp(approach,'symm')if numOfIC~=DimnumOfIC=Dim;if (b_versose&userNumOfIC)fprintf('warning :estimatng %d independent comoponents\n',numOfIC);fprintf('(in symmetric approach we estimate all available independent compnents)\n');endendelseif numOfIC>DimnumOfIC=Dim;if (b_versose&userNumOfIC)fprintf('warning :estimatng %d independent comoponents\n',numOfIC);fprintf('(can't estimate more independent compnents thandimension of data)\n');endendend[A,W]=fpica(whitesig,whiteningMatrix,dewhiteningMatrix...approach ,numOfIC,g,a1,a2,epsilon,m axNumIterations...initSate,guess,displayMode,displayInterval,verbose);endif only==1Out1=E;Out2=D;elseif only ==2if nargout==2Out1=whiteningMatrix;Out2=dewhiteningMatrix;elseOut1=whitesig;Out2=whiteningMatrix;Out3=dewhiteningMatrix;endelseif nargout==2Out1=A;Out2=W;elseOut1=W*mixedsig;Out2=A;Out3=W;endendfunction[A,W]=fpica(X,whiteningMatrix,dewhiteningMatrix...approach ,numOfIC,g,a1,a2,epsilon, maxNumIterations...initSate,guess,displayMode,displayInterval,s_verbose):if nargin<3,error('not enough arguments!');end[vectorSize,numSamples]=size(X);if nargin<15,s_verbose='on';endif nargin<14,displayInterval=1;endif nargin<13,displayMode='on';endif nargin<12,guess=1;endif nargin<11,initSate='rand';endif nargin<10,maxNumIterations=1000;endif nargin<9,epsilon=0.0001;endif nargin<8,a2=1;endif nargin<7,a1=1;endif nargin<6,g='pow3';endif nargin<5,numOfIC=vectorSize;endif nargin<4,approach='defl';endif max(max(abs(imag(X))))>0,error('input has an imaginary part.');endif strcmp(lower(s_verbose),'on'),b_verbose=1;elseif strcmp(lower(s_verbose),'off'),b_verbose=0;elseerror(sprintf('illegal value [%s] for parameter:"verbose"\n',s_verbose));endif strcmp (lower(approach),'symm')approachMode=1;if strcmp (lower(approach),'defl')approachMode=2;elseerror(sprintf('illegal value [%s] for parameter:"approach"\n',approach));endif b_verbose,fprintf('used approach[%s].\n',approach);endif (approachMode==1)&(vectorSize~=numOfIC)error(symmetric approach must have :numOfIC=Dimension。

相关文档
最新文档