In signal processing, independent component analysis (ICA) is a computational method for separating a multivariate signal into additive subcomponents. This is done by assuming that at most one subcomponent is Gaussian and that the subcomponents are statistically independent from each other. ICA was invented by Jeanny Hérault and Christian Jutten in 1985.
Introduction
300px|thumb|right|ICA on four randomly mixed videos. Top row: The original source videos. Middle row: Four random mixtures used as input to the algorithm. Bottom row: The reconstructed videos.
Independent component analysis attempts to decompose a multivariate signal into independent non-Gaussian signals. As an example, sound is usually a signal that is composed of the numerical addition, at each time t, of signals from several sources. The question then is whether it is possible to separate these contributing sources from the observed total signal. When the statistical independence assumption is correct, blind ICA separation of a mixed signal gives very good results. It is also used for signals that are not supposed to be generated by mixing for analysis purposes.
A simple application of ICA is the "cocktail party problem", where the underlying speech signals are separated from a sample data consisting of people talking simultaneously in a room. Usually the problem is simplified by assuming no time delays or echoes. Note that a filtered and delayed signal is a copy of a dependent component, and thus the statistical independence assumption is not violated.
Mixing weights for constructing the <math display="inline">M</math> observed signals from the <math display="inline">N</math> components can be placed in an <math display="inline">M \times N</math> matrix. An important thing to consider is that if <math display="inline">N</math> sources are present, at least <math display="inline">N</math> observations (e.g. microphones if the observed signal is audio) are needed to recover the original signals. When there are an equal number of observations and source signals, the mixing matrix is square (<math display="inline">M = N</math>). Other cases of underdetermined (<math display="inline">M < N</math>) and overdetermined (<math display="inline">M > N</math>) have been investigated.
The success of ICA separation of mixed signals relies on two assumptions and three effects of mixing source signals. Two assumptions:
- The source signals are independent of each other.
- The values in each source signal have non-Gaussian distributions.
Three effects of mixing source signals:
- Independence: As per assumption 1, the source signals are independent; however, their signal mixtures are not. This is because the signal mixtures share the same source signals.
- Normality: According to the Central Limit Theorem, the distribution of a sum of independent random variables with finite variance tends towards a Gaussian distribution.<br />Loosely speaking, a sum of two independent random variables usually has a distribution that is closer to Gaussian than any of the two original variables. Here we consider the value of each signal as the random variable.
- Complexity: The temporal complexity of any signal mixture is greater than that of its simplest constituent source signal.
Those principles contribute to the basic establishment of ICA. If the signals extracted from a set of mixtures are independent and have non-Gaussian distributions or have low complexity, then they must be source signals.
Another common example is image steganography, where ICA is used to embed one image within another. For instance, two grayscale images can be linearly combined to create mixed images in which the hidden content is visually imperceptible. ICA can then be used to recover the original source images from the mixtures. This technique underlies digital watermarking, which allows the embedding of ownership information into images, as well as more covert applications such as undetected information transmission. The method has even been linked to real-world cyberespionage cases. In such applications, ICA serves to unmix the data based on statistical independence, making it possible to extract hidden components that are not apparent in the observed data.
Steganographic techniques, including those potentially involving ICA-based analysis, have been used in real-world cyberespionage cases. In 2010, the FBI uncovered a Russian spy network known as the "Illegals Program" (Operation Ghost Stories), where agents used custom-built steganography tools to conceal encrypted text messages within image files shared online.
In another case, a former General Electric engineer, Xiaoqing Zheng, was convicted in 2022 for economic espionage. Zheng used steganography to exfiltrate sensitive turbine technology by embedding proprietary data within image files for transfer to entities in China.
Defining component independence
ICA finds the independent components (also called factors, latent variables or sources) by maximizing the statistical independence of the estimated components. We may choose one of many ways to define a proxy for independence, and this choice governs the form of the ICA algorithm. The two broadest definitions of independence for ICA are
- Minimization of mutual information
- Maximization of non-Gaussianity
The Minimization-of-Mutual information (MMI) family of ICA algorithms uses measures like Kullback-Leibler Divergence and maximum entropy. The non-Gaussianity family of ICA algorithms, motivated by the central limit theorem, uses kurtosis and negentropy. and dimensionality reduction as preprocessing steps in order to simplify and reduce the complexity of the problem for the actual iterative algorithm.
Mathematical definitions
Linear independent component analysis can be divided into noiseless and noisy cases, where noiseless ICA is a special case of noisy ICA. Nonlinear ICA should be considered as a separate case.
General Derivation
In the classical ICA model, it is assumed that the observed data <math>\mathbf{x}_i \in \mathbb{R}^m</math> at time <math>t_i</math> is generated from source signals <math>\mathbf{s}_i \in \mathbb{R}^m</math> via a linear transformation <math>\mathbf{x}_i = A \mathbf{s}_i</math>, where <math>A</math> is an unknown, invertible mixing matrix. To recover the source signals, the data is first centered (zero mean), and then whitened so that the transformed data has unit covariance. This whitening reduces the problem from estimating a general matrix <math>A</math> to estimating an orthogonal matrix <math>V</math>, significantly simplifying the search for independent components.
If the covariance matrix of the centered data is <math>\Sigma_x = A A^\top</math>, then using the eigen-decomposition <math>\Sigma_x = Q D Q^\top</math>, the whitening transformation can be taken as <math>D^{-1/2} Q^\top</math>. This step ensures that the recovered sources are uncorrelated and of unit variance, leaving only the task of rotating the whitened data to maximize statistical independence. This general derivation underlies many ICA algorithms and is foundational in understanding the ICA model.
Reduced Mixing Problem
Independent component analysis (ICA) addresses the problem of recovering a set of unobserved source signals <math>s_i = (s_{i1}, s_{i2}, \dots, s_{im})^T</math> from observed mixed signals <math>x_i = (x_{i1}, x_{i2}, \dots, x_{im})^T</math>, based on the linear mixing model:
<math>x_i = A\,s_i,</math>
where the <math>A</math> is an <math>m \times m</math> invertible matrix called the mixing matrix, <math>s_i</math> represents the m‑dimensional vector containing the values of the sources at time <math>t_i</math>, and <math>x_i</math> is the corresponding vector of observed values at time <math>t_i</math>. The goal is to estimate both <math>A</math> and the source signals <math>\{s_i\}</math> solely from the observed data <math>\{x_i\}</math>.
After centering, the Gram matrix is computed as:
<math>
(X^*)^T X^* = Q\,D\,Q^T,
</math>
where D is a diagonal matrix with positive entries (assuming <math>X^*</math> has maximum rank), and Q is an orthogonal matrix. This identifiability requires that:
- At most one of the sources <math>s_k</math> is Gaussian,
- The number of observed mixtures, <math>m</math>, must be at least as large as the number of estimated components <math>n</math>: <math>m \ge n</math>. It is equivalent to say that the mixing matrix <math>\boldsymbol{A}</math> must be of full rank for its inverse to exist.
Binary ICA
A special variant of ICA is binary ICA in which both signal sources and monitors are in binary form and observations from monitors are disjunctive mixtures of binary independent sources. The problem was shown to have applications in many domains including medical diagnosis, multi-cluster assignment, network tomography and internet resource management.
Let <math>{x_1, x_2, \ldots, x_m}</math> be the set of binary variables from <math>m</math> monitors and <math>{y_1, y_2, \ldots, y_n}</math> be the set of binary variables from <math>n</math> sources. Source-monitor connections are represented by the (unknown) mixing matrix <math display="inline">\boldsymbol{G}</math>, where <math>g_{ij} = 1</math> indicates that signal from the i-th source can be observed by the j-th monitor. The system works as follows: at any time, if a source <math>i</math> is active (<math>y_i=1</math>) and it is connected to the monitor <math>j</math> (<math>g_{ij}=1</math>) then the monitor <math>j</math> will observe some activity (<math>x_j=1</math>). Formally we have:
:<math>
x_i = \bigvee_{j=1}^n (g_{ij}\wedge y_j), i = 1, 2, \ldots, m,
</math>
where <math>\wedge</math> is Boolean AND and <math>\vee</math> is Boolean OR. Noise is not explicitly modelled, rather, can be treated as independent sources.
The above problem can be heuristically solved by assuming variables are continuous and running FastICA on binary observation data to get the mixing matrix <math display="inline">\boldsymbol{G}</math> (real values), then apply round number techniques on <math display="inline">\boldsymbol{G}</math> to obtain the binary values. This approach has been shown to produce a highly inaccurate result.
Another method is to use dynamic programming: recursively breaking the observation matrix <math display="inline">\boldsymbol{X}</math> into its sub-matrices and run the inference algorithm on these sub-matrices. The key observation which leads to this algorithm is the sub-matrix <math display="inline">\boldsymbol{X}^0</math> of <math display="inline">\boldsymbol{X}</math> where <math display="inline">x_{ij} = 0, \forall j</math> corresponds to the unbiased observation matrix of hidden components that do not have connection to the <math>i</math>-th monitor. Experimental results from show that this approach is accurate under moderate noise levels.
The Generalized Binary ICA framework introduces a broader problem formulation which does not necessitate any knowledge on the generative model. In other words, this method attempts to decompose a source into its independent components (as much as possible, and without losing any information) with no prior assumption on the way it was generated. Although this problem appears quite complex, it can be accurately solved with a branch and bound search tree algorithm or tightly upper bounded with a single multiplication of a matrix with a vector.
Methods for blind source separation
Projection pursuit
Signal mixtures tend to have Gaussian probability density functions, and source signals tend to have non-Gaussian probability density functions. Each source signal can be extracted from a set of signal mixtures by taking the inner product of a weight vector and those signal mixtures where this inner product provides an orthogonal projection of the signal mixtures. The remaining challenge is finding such a weight vector. One type of method for doing so is projection pursuit.
Projection pursuit seeks one projection at a time such that the extracted signal is as non-Gaussian as possible. This contrasts with ICA, which typically extracts M signals simultaneously from M signal mixtures, which requires estimating a M × M unmixing matrix. One practical advantage of projection pursuit over ICA is that fewer than M signals can be extracted if required, where each source signal is extracted from M signal mixtures using an M-element weight vector.
We can use kurtosis to recover the multiple source signal by finding the correct weight vectors with the use of projection pursuit.
The kurtosis of the probability density function of a signal, for a finite sample, is computed as
:<math>
K=\frac{\operatorname{E}[(\mathbf{y}-\mathbf{\overline{y)^4]}{(\operatorname{E}[(\mathbf{y}-\mathbf{\overline{y)^2])^2}-3
</math>
where <math>\mathbf{\overline{y</math> is the sample mean of <math>\mathbf{y}</math>, the extracted signals. The constant 3 ensures that Gaussian signals have zero kurtosis, Super-Gaussian signals have positive kurtosis, and Sub-Gaussian signals have negative kurtosis. The denominator is the variance of <math>\mathbf{y}</math>, and ensures that the measured kurtosis takes account of signal variance. The goal of projection pursuit is to maximize the kurtosis, and make the extracted signal as non-normal as possible.
Using kurtosis as a measure of non-normality, we can now examine how the kurtosis of a signal <math>\mathbf{y} = \mathbf{w}^T \mathbf{x}</math> extracted from a set of M mixtures <math>\mathbf{x}=(x_1,x_2,\ldots,x_M)^T</math> varies as the weight vector <math>\mathbf{w}</math> is rotated around the origin. Given our assumption that each source signal <math>\mathbf{s}</math> is super-gaussian we would expect:
- the kurtosis of the extracted signal <math>\mathbf{y}</math> to be maximal precisely when <math>\mathbf{y} = \mathbf{s}</math>.
- the kurtosis of the extracted signal <math>\mathbf{y}</math> to be maximal when <math>\mathbf{w}</math> is orthogonal to the projected axes <math>S_1</math> or <math>S_2</math>, because we know the optimal weight vector should be orthogonal to a transformed axis <math>S_1</math> or <math>S_2</math>.
For multiple source mixture signals, we can use kurtosis and Gram-Schmidt Orthogonalization (GSO) to recover the signals. Given M signal mixtures in an M-dimensional space, GSO project these data points onto an (M-1)-dimensional space by using the weight vector. We can guarantee the independence of the extracted signals with the use of GSO.
In order to find the correct value of <math>\mathbf{w}</math>, we can use gradient descent method. We first of all whiten the data, and transform <math>\mathbf{x}</math> into a new mixture <math>\mathbf{z}</math>, which has unit variance, and <math>\mathbf{z}=(z_1,z_2,\ldots,z_M)^T</math>. This process can be achieved by applying Singular value decomposition to <math>\mathbf{x}</math>,
: <math>\mathbf{x} = \mathbf{U} \mathbf{D} \mathbf{V}^T</math>
Rescaling each vector <math>U_i=U_i/\operatorname{E}(U_i^2)</math>, and let <math>\mathbf{z} = \mathbf{U}</math>. The signal extracted by a weighted vector <math>\mathbf{w}</math> is <math>\mathbf{y} = \mathbf{w}^T \mathbf{z}</math>. If the weight vector w has unit length, then the variance of y is also 1, that is <math>\operatorname{E}[(\mathbf{w}^T \mathbf{z})^2]=1</math>. The kurtosis can thus be written as:
:<math>
K=\frac{\operatorname{E}[\mathbf{y}^4]}{(\operatorname{E}[\mathbf{y}^2])^2}-3=\operatorname{E}[(\mathbf{w}^T \mathbf{z})^4]-3.
</math>
The updating process for <math>\mathbf{w}</math> is:
:<math>\mathbf{w}_{new}=\mathbf{w}_{old}-\eta\operatorname{E}[\mathbf{z}(\mathbf{w}_{old}^T \mathbf{z})^3 ].</math>
where <math>\eta</math> is a small constant to guarantee that <math>\mathbf{w}</math> converges to the optimal solution. After each update, we normalize <math>\mathbf{w}_{new}=\frac{\mathbf{w}_{new{|\mathbf{w}_{new}|}</math>, and set <math>\mathbf{w}_{old}=\mathbf{w}_{new}</math>, and repeat the updating process until convergence. We can also use another algorithm to update the weight vector <math>\mathbf{w}</math>.
Another approach is using negentropy instead of kurtosis. Using negentropy is a more robust method than kurtosis, as kurtosis is very sensitive to outliers. The negentropy methods are based on an important property of Gaussian distribution: a Gaussian variable has the largest entropy among all continuous random variables of equal variance. This is also the reason why we want to find the most nongaussian variables. A simple proof can be found in Differential entropy.
:<math>J(x) = S(y) - S(x)\,</math>
y is a Gaussian random variable of the same covariance matrix as x
:<math>S(x) = - \int p_x(u) \log p_x(u) du</math>
An approximation for negentropy is
:<math>J(x)=\frac{1}{12}(E(x^3))^2 + \frac{1}{48}(kurt(x))^2</math>
A proof can be found in the original papers of Comon; This approximation also suffers from the same problem as kurtosis (sensitivity to outliers). Other approaches have been developed.
:<math>J(y) = k_1(E(G_1(y)))^2 + k_2(E(G_2(y)) - E(G_2(v))^2</math>
A choice of <math>G_1</math> and <math>G_2</math> are
:<math>G_1 = \frac{1}{a_1}\log(\cosh(a_1u))</math> and <math>G_2 = -\exp(-\frac{u^2}{2})</math>
Based on infomax
Infomax ICA is essentially a multivariate, parallel version of projection pursuit. Whereas projection pursuit extracts a series of signals one at a time from a set of M signal mixtures, ICA extracts M signals in parallel. This tends to make ICA more robust than projection pursuit.
The projection pursuit method uses Gram-Schmidt orthogonalization to ensure the independence of the extracted signal, while ICA use infomax and maximum likelihood estimate to ensure the independence of the extracted signal. The Non-Normality of the extracted signal is achieved by assigning an appropriate model, or prior, for the signal.
The process of ICA based on infomax in short is: given a set of signal mixtures <math>\mathbf{x}</math> and a set of identical independent model cumulative distribution functions(cdfs) <math>g</math>, we seek the unmixing matrix <math>\mathbf{W}</math> which maximizes the joint entropy of the signals <math>\mathbf{Y}=g(\mathbf{y})</math>, where <math>\mathbf{y}=\mathbf{Wx}</math> are the signals extracted by <math>\mathbf{W}</math>. Given the optimal <math>\mathbf{W}</math>, the signals <math>\mathbf{Y}</math> have maximum entropy and are therefore independent, which ensures that the extracted signals <math>\mathbf{y}=g^{-1}(\mathbf{Y})</math> are also independent. <math>g</math> is an invertible function, and is the signal model. Note that if the source signal model probability density function <math>p_s</math> matches the probability density function of the extracted signal <math>p_{\mathbf{y</math>, then maximizing the joint entropy of <math>Y</math> also maximizes the amount of mutual information between <math>\mathbf{x}</math> and <math>\mathbf{Y}</math>. For this reason, using entropy to extract independent signals is known as infomax.
Consider the entropy of the vector variable <math>\mathbf{Y}=g(\mathbf{y})</math>, where <math>\mathbf{y}=\mathbf{Wx}</math> is the set of signals extracted by the unmixing matrix <math>\mathbf{W}</math>. For a finite set of values sampled from a distribution with pdf <math>p_{\mathbf{y</math>, the entropy of <math>\mathbf{Y}</math> can be estimated as:
:<math>
H(\mathbf{Y})=-\frac{1}{N}\sum_{t=1}^N \ln p_{\mathbf{Y(\mathbf{Y}^t)
</math>
The joint pdf <math>p_{\mathbf{Y</math> can be shown to be related to the joint pdf <math>p_{\mathbf{y</math> of the extracted signals by the multivariate form:
:<math>
p_{\mathbf{Y(Y)=\frac{p_{\mathbf{y(\mathbf{y})}{|\frac{\partial\mathbf{Y{\partial \mathbf{y|}
</math>
where <math>\mathbf{J}=\frac{\partial\mathbf{Y{\partial \mathbf{y</math> is the Jacobian matrix. We have <math>|\mathbf{J}|=g'(\mathbf{y})</math>, and <math>g'</math> is the pdf assumed for source signals <math>g'=p_s</math>, therefore,
:<math>
p_{\mathbf{Y(Y)=\frac{p_{\mathbf{y(\mathbf{y})}{|\frac{\partial\mathbf{Y{\partial \mathbf{y|}=\frac{p_\mathbf{y}(\mathbf{y})}{p_\mathbf{s}(\mathbf{y})}
</math>
therefore,
:<math>
H(\mathbf{Y})=-\frac{1}{N}\sum_{t=1}^N \ln\frac{p_\mathbf{y}(\mathbf{y})}{p_\mathbf{s}(\mathbf{y})}
</math>
We know that when <math>p_{\mathbf{y=p_s</math>, <math>p_{\mathbf{Y</math> is of uniform distribution, and <math>H({\mathbf{Y)</math> is maximized. Since
:<math>
p_{\mathbf{y(\mathbf{y})=\frac{p_\mathbf{x}(\mathbf{x})}{|\frac{\partial\mathbf{y{\partial\mathbf{x|}=\frac{p_\mathbf{x}(\mathbf{x})}{|\mathbf{W}|}
</math>
where <math>|\mathbf{W}|</math> is the absolute value of the determinant of the unmixing matrix <math>\mathbf{W}</math>. Therefore,
:<math>
H(\mathbf{Y})=-\frac{1}{N}\sum_{t=1}^N \ln\frac{p_\mathbf{x}(\mathbf{x}^t)}{|\mathbf{W}|p_\mathbf{s}(\mathbf{y}^t)}
</math>
so,
:<math>
H(\mathbf{Y})=\frac{1}{N}\sum_{t=1}^N \ln p_\mathbf{s}(\mathbf{y}^t)+\ln|\mathbf{W}|+H(\mathbf{x})
</math>
since <math>H(\mathbf{x})=-\frac{1}{N}\sum_{t=1}^N\ln p_\mathbf{x}(\mathbf{x}^t)</math>, and maximizing <math>\mathbf{W}</math> does not affect <math>H_{\mathbf{x</math>, so we can maximize the function
:<math>
h(\mathbf{Y})=\frac{1}{N}\sum_{t=1}^N \ln p_\mathbf{s}(\mathbf{y}^t)+\ln|\mathbf{W}|
</math>
to achieve the independence of the extracted signal.
If there are M marginal pdfs of the model joint pdf <math>p_{\mathbf{s</math> are independent and use the commonly super-gaussian model pdf for the source signals <math>p_{\mathbf{s=(1-\tanh(\mathbf{s})^2)</math>, then we have
:<math>
h(\mathbf{Y})=\frac{1}{N}\sum_{i=1}^M\sum_{t=1}^N \ln (1-\tanh(\mathbf{w}_i^\mathsf{T}\mathbf{x}^t)^2)+\ln|\mathbf{W}|
</math>
In the sum, given an observed signal mixture <math>\mathbf{x}</math>, the corresponding set of extracted signals <math>\mathbf{y}</math> and source signal model <math>p_{\mathbf{s=g'</math>, we can find the optimal unmixing matrix <math>\mathbf{W}</math>, and make the extracted signals independent and non-gaussian. Like the projection pursuit situation, we can use gradient descent method to find the optimal solution of the unmixing matrix.
Based on maximum likelihood estimation
Maximum likelihood estimation (MLE) is a standard statistical tool for finding parameter values (e.g. the unmixing matrix <math>\mathbf{W}</math>) that provide the best fit of some data (e.g., the extracted signals <math>y</math>) to a given a model (e.g., the assumed joint probability density function (pdf) <math>p_s</math> of source signals). further developed by Christian Jutten in 1985 and 1986, and refined by Pierre Comon in 1991, and popularized in his paper of 1994. In 1995, Tony Bell and Terry Sejnowski introduced a fast and efficient ICA algorithm based on infomax, a principle introduced by Ralph Linsker in 1987. A link exists between maximum-likelihood estimation and Infomax approaches. A quite comprehensive tutorial on the maximum-likelihood approach to ICA has been published by J-F. Cardoso in 1998.
There are many algorithms available in the literature which do ICA. A largely used one, including in industrial applications, is the FastICA algorithm, developed by Hyvärinen and Oja, which uses the negentropy as cost function, already proposed 7 years before by Pierre Comon in this context. Their method does not require a priori knowledge about the number of independent sources.
Applications
ICA can be extended to analyze non-physical signals. For instance, ICA has been applied to discover discussion topics on a bag of news list archives.
Some ICA applications are listed below:
- optical Imaging of neurons
- neuronal spike sorting
- face recognition
- modelling receptive fields of primary visual neurons
- predicting stock market prices
- mobile phone communications
- colour based detection of the ripeness of tomatoes
- removing artifacts, such as eye blinks, from EEG data.
- predicting decision-making using EEG
- analysis of changes in gene expression over time in single cell RNA-sequencing experiments.
- studies of the resting state network of the brain.
- astronomy and cosmology
- finance
Availability
ICA can be applied through the following software:
- SAS PROC ICA
- R ICA package
- scikit-learn Python implementation sklearn.decomposition.FastICA
- mlpack C++ implementation of RADICAL (The Robust Accurate, Direct ICA aLgorithm (RADICAL).) [https://github.com/mlpack/mlpack/tree/master/src/mlpack/methods/radical]
See also
- Blind deconvolution
- Factor analysis
- Hilbert spectrum
- Image processing
- Non-negative matrix factorization (NMF)
- Nonlinear dimensionality reduction
- Projection pursuit
- Varimax rotation
Notes
References
- Comon, Pierre (1994): "Independent Component Analysis: a new concept?" , Signal Processing, 36(3):287–314 (The original paper describing the concept of ICA)
- Hyvärinen, A.; Karhunen, J.; Oja, E. (2001): Independent Component Analysis, New York: Wiley, ( Introductory chapter )
- Hyvärinen, A.; Oja, E. (2000): "Independent Component Analysis: Algorithms and Application", Neural Networks, 13(4-5):411-430. (Technical but pedagogical introduction).
- Comon, P.; Jutten C., (2010): Handbook of Blind Source Separation, Independent Component Analysis and Applications. Academic Press, Oxford UK.
- Lee, T.-W. (1998): Independent component analysis: Theory and applications, Boston, Mass: Kluwer Academic Publishers,
- Acharyya, Ranjan (2008): A New Approach for Blind Source Separation of Convolutive Sources - Wavelet Based Separation Using Shrinkage Function (this book focuses on unsupervised learning with Blind Source Separation)
External links
- What is independent component analysis? by Aapo Hyvärinen
- Independent Component Analysis: A Tutorial by Aapo Hyvärinen
- A Tutorial on Independent Component Analysis
- FastICA as a package for Matlab, in R language, C++
- ICALAB Toolboxes for Matlab, developed at RIKEN
- High Performance Signal Analysis Toolkit provides C++ implementations of FastICA and Infomax
- ICA toolbox Matlab tools for ICA with Bell-Sejnowski, Molgedey-Schuster and mean field ICA. Developed at DTU.
- Demonstration of the cocktail party problem
- EEGLAB Toolbox ICA of EEG for Matlab, developed at UCSD.
- FMRLAB Toolbox ICA of fMRI for Matlab, developed at UCSD
- MELODIC, part of the FMRIB Software Library.
- Discussion of ICA used in a biomedical shape-representation context
- FastICA, CuBICA, JADE and TDSEP algorithm for Python and more...
- Group ICA Toolbox and Fusion ICA Toolbox
- Tutorial: Using ICA for cleaning EEG signals
