Home  Products  Testimonials  Prices  Support  Contact  Publications  About   
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 
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.
Independent Component AnalysisIndependent 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 nongaussian 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 {x_{i}(t)}, i = 1,...,n. It is assumed that these signals are the result of a mixing process defined by
We seek estimate the unknown signals s_{j} (t) using only the observed data vector x(t) = [x_{1}(t),x_{2}(t),...,x_{n}(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 n×n 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 timebased 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 blockbased or online adaptive techniques. Blockbased algorithms take all the data in at once and produce the output. Online adaptive algorithms process each data point in a continuous sense. A disadvantage of many algorithms, especially online 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 'blowup'. 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 ControlICA/X is based on the JADE algorithm (Cardoso, 1993) and is capable of separating linearly mixed input signals in a blockbased 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 nonblocking 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/nonblocking 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. References


