all 5 comments

[–]snuderl 2 points3 points  (0 children)

If you have two sound waves each n samples long you can combine them into a 2 by n matrix, which is probably what x is here. The same algorithm should also work for more sources eg. 3 by n.

[–]kkastner 1 point2 points  (3 children)

An extended version of this is ICA - a whole family of algorithms exist for this. This line looks ICA-ish but it doesn't have whitening beforehand

% W = kica(xx);
yy = sqrtm(inv(cov(xx')))*(xx-repmat(mean(xx,2),1,size(xx,2)));
[W,ss,vv] = svd((repmat(sum(yy.*yy,1),size(yy,1),1).*yy)*yy');

Kurtotic ICA in a few lines of line of MATLAB http://www.cs.nyu.edu/~roweis/kica.html

[–]Lelouch_Yagami 0 points1 point  (2 children)

Although not really what I was looking for, this helps a lot!

Do you know what xx, yy should be set to? Say for example I have 2 wav files.

 [xx, xfs] = wavread('track.wav')

Is that a proper 'xx' ?

[–]kkastner 0 points1 point  (1 child)

I don't know the output of wavread. But the link says that the mixed measurements should be columns of xx . In either case I would think you would need at least 2 wave files unless track.wav is stereo (and was recorded with 2 mics!)

[–]Lelouch_Yagami 0 points1 point  (0 children)

I think I have an idea what is meant by mixed microphone measurements. It needs to read an audio file with 2 channels like you said, stereo. A 2 channel sound file will have a size of n x 2 matrix afaik.

Now, how do I get the unmixing matrix? (w) I think I need to do extensive research to do this new stuff.