Independent Component Analysis (ICA) is an algorithm for accomplishing Blind Source Separation. That is, if there exists an n by t matrix U of n source signals of length t (in this case, assumed to be functions of time, such as sound, although that is not a requirement), and you have an m by t matrix X of m mixed signals (m>=n) of length t that consist of different linear mixtures of U (i.e., X = AU where A is an m by n matrix such that Ai,j is the weight of the jth source signal in the ith mixed signal), then, under certain conditions, you can recover the original signals U, up to a scale factor.
This is accomplished by assuming that there is no correlation between source signals and so any correlation between different mixed signals is due to a common signal showing through the mixture. Our task is to find a matrix W that recovers the original n source signals (possibly in a different order and with different scale factors).There are several algorithms for decreasing the mutual information between signals, for this project, we will use a gradient descent method as described in class:
Your assignment is to do the following:
To debug your algorithm on a small set, you can try this one. Click on this link to download "icaTest.mat". Load the file in matlab with load 'icaTest.mat'. This will give you two matrices: U (3 by 40) and A (3 by 3). You can use A to mix U and get X and then work from there.
This is what I got after running it. The bottom signals are the original signals, the middle signals are the mixed, and the top signals are the recovered signals (all signals have been scaled to fit between 0 and 1). Notice that in the recovered signals, the top and bottom signals are reversed from the original signals. Also notice that the recovery is not perfect, but is surprisingly close. I used η=0.01 and 1000000 iterations. The matrix W had initial values chosen from a uniform distribution with values between 0 and 0.1.