ActiveX Software for Visual Basic 6/.NET, C++ 6/.NET, Delphi, Borland C++ Builder: Matrix Maths, Time Series
 Home   |   Products   |   Testimonials   |   Prices   |   Support   |   Contact   |   Publications   |   About   |   Buy Now
Quick Links   Home   Purchase   Support
Products   Product Home   ActiveX/COM Components   .NET Components   Version History
Support   Support Home   Installation Help
About Us   Company Info   Clients   Testimonials   Publications   Contact Us

   Independent Component Analysis (ICA) Software

    ICA/X 5.0
ICA ActiveX Control and COM Object

Product Features  Download  Product FAQ  Screen Shots!   Prices Buy Now

Would you like to use Independent Component Analysis in your Windows programs: Visual Basic, Visual C++, Borland C++ Builder, Excel, Access etc?

ICA/X ActiveX Component drops into most windows application programs and with just a few lines of code you will be able to implement ICA. With full source samples you will be able to quickly and easily include independent component analysis functionality in your applications, royalty free! Download ICA/X Trial Version now and you can try it out, even compile programs.

ICA/X ActiveX Control implements an independent component analysis algorithm. ICA/X is both an ActiveX Control and a COM object, so it can be used in a wide range of applications that support these standards. This includes Visual Basic, Visual C++, Excel, Visual FoxPro, Delphi and Borland C++ Builder.

The control is written as a lightweight ATL C/C++ object, and does not require bulky MFC DLLs. Because the control is written in ATL it is efficient and small in size. The numerical processing is written in C for speed, and integrated into the lightweight ATL/C++ framework.

Screen shot of an application built in Visual Basic using ICA/X.

Independent Component Analysis

Independent component analysis can be considered an extension of principal component analysis (PCA). In PCA, the input data is decorrelated to find the componentsthat are maximally correlated according to second order statistics. PCA gives orthogonalized and normalized outputs according to the second order statistics by minimizing the second order moments. The principal components can still be dependent however. In ICA, the aim is to process a number of measured signal vectors X and extract a set of statistically independent vectors Y which are estimates of some unknown source signals S which have been linearly mixed together via a mixing matrix A to form the observed input data. ICA seeks to ensure maximum independence, typically by minimizing the higher order moments of the outputs. When the higher order moments are zero (for non-gaussian input signals), the outputs are independent.

The problem of independent component analysis or blind source separation of signals mixed instantaneously, is defined as follows. We have available to us, a multivariate time series {xi(t)}, i = 1,...,n. It is assumed that these signals are the result of a mixing process defined by
xi(t) = n

j = 1
aijsj(t) .

We seek estimate the unknown signals sj (t) using only the observed data vector x(t) = [x1(t),x2(t),...,xn(t)]T . The problem is to find a demixing matrix B such that y(t)  = Bx(t)= BAs(t), where A is the unknown mixing matrix. This matrix mixes signals instantaneously in time. It is possible for there to be differing numbers of sensors than sources, that is, A may not be square. If the number of sources is the same as the number of sensors or observed inputs n, then A is a square nn matrix. If B = A-1, then y(t) = s(t), and perfect separation occurs. In practice, the optimum y will be some permutated and scaled version of s , since it is only possible to find B such that BA = PD where P is a permutation matrix and D is a diagonal scaling matrix (Tong, et. al. 1991).

ICA is useful in a wide range of data analysis tasks where we seek to understand and analyse sequential or time-based data in terms of their underlying composition, where the composition signals are as independent of each other as possible.

Many algorithms have been proposed to perform ICA. These may be divided into block-based or on-line adaptive techniques. Block-based algorithms take all the data in at once and produce the output. On-line adaptive algorithms process each data point in a continuous sense. A disadvantage of many algorithms, especially on-line adaptive algorithms, is the need to select tuning parameters such as the learning rate. If the learning rate is chosen to be too small, then the solution may not be found or it may be found very slowly. If the learning rate is chosen too large, then the algorithm may 'blow-up'. For many practical problems, it is useful to be able to have an algorithm that is capable of finding a solution without user intervention at all.

ICA/X ActiveX and COM Control

ICA/X is based on the JADE algorithm (Cardoso, 1993) and is capable of separating linearly mixed input signals in a block-based manner without user intervention. The quality of the solution can vary depending on the specific characteristics of the data.

ICA/X supports threaded blocking and non-blocking modes. This means for lengthy computations, you can use the control ina program, pass it some data for processing andthe program can then run other tasks and respond to user input while the computations are occurring. When processing is complete, an event is fired and the program continues from the data processing step. This blocking/non-blocking mode is under program control. Error codes are returned from the event indicating the success or otherwise of the data processing. The computations can also be interrupted under program control by the user, for example, it is straight forward to implement a "Stop" button to direct the computations to be stopped.

Matrix data used with ICA/X and returned from the control can have different index starting values. This means that you can choose to index your data from 0 or 1. ICA/X will pass the data back in an array indexed from the value you specify in a property of the control. All data used and returned with ICA/X is in double format. This means it is suitable for use with Visual Basic and Visual C++. Moreover, the data is in a format compatible with further numeric processing. Hence, if you wish to use the data with other controls that can use double format arrays, this presents no problems.


  1. Jean-Francois Cardoso. Blind Signal Separation: Statistical Principles. Proc. IEEE, Special issue on blind identification and estimation, pp. 2009-2025, Vol 86, No. 10, 1998.
  2. S. Amari and A. Cichocki. Blind signal processing - neural network approaches. Proc. IEEE, Special issue on blind identification and estimation, pp. 2026-2048, Vol 86, No. 10, 1998.
  3. S. Amari, A. Cichocki, and H.H. Yang. A new learning algorithm for blind signal separation. In G. Tesauro, D.S. Touretzky, and T.K. Leen, editors, Advances in Neural Information Processing Systems 8 (NIPS*95), pages 757-763, Cambridge, MA, 1996. The MIT Press.
  4. J.F. Cardoso and A. Souloumiac. Blind beamforming for non-Gaussian signals. IEE Proc. F., 140(6):771-774, December 1993.
  5. A. Cichocki and L. Moszczynski. New learning algorithm for blind separation of sources. Electronics Letters, 28(21):1986-1987, October 8 1992.
  6. P. Comon. Independent component analysis - a new concept? Signal Processing, 36(3):287-314, 1994.
  7. C. Jutten and J. Herault. Blind separation of sources, Part I: An adaptive algorithm based on neuromimetic architecture. Signal Processing, 24:1-10, 1991.
  8. E. Oja. Neural networks, principal components and subspaces. International Journal of Neural Systems, 1:61-68, 1989.
  9. L. Tong, R.W. Liu, V.C. Soon, and Y.F. Huang. Indeterminacy and identifiability of blind identification. IEEE Trans. Circuits, Syst., 38(5):499-509, May 1991.