Vous êtes sur la page 1sur 2

Blind Source Separation in 2 lines of MATLAB code (BSS):

Lucas C Parra
Publications
% BSS MATLAB code:
[W,D] = eig(X*X',Q); % compute unmixing matrix W
S = W'*X; % compute sources S.
Notes:
X is a N*T matrix containing T samples of N sensor readings presumably generated by X=A*S, with
A=inv(W').
[V,D]=eig(A,B) is the generalized eigenvalue procedure such that A*V = B*V*D, i.e. V jointly diagonalizes A
and B.

Use
if you
assume
sources S
are
Details
simple
version of
reference
Q=X(:,1:T-
tau)*X(:,tau+1:T)'+X(:,tau+1:T)*(:,1:T-
tau)';
non-white
and
decorrelated.
Q is the symmetrized cross-
correlation for some time
delay tau. Use tau with
non-zero auto-correlation in
the sources.
simultaneous
decorrelation
[1,2,4,6]
Q = X(:,1:t)*X(:,1:t)';
non-
stationary
and
decorrelated.
Q is the covariance computed
for the first t samples. Use t in
the order of magnitude of the
stationarity time of the signal.
simultaneous
decorrelation
[1,3,6]
Q=
((T*ones(N,1)*sum(abs(X).^2)).*X)*X'
... -X*X'*X*X'-X*X'*trace(X*X')-
(X*X.')*conj(X*X.');
non-
Gaussian and
independent.
Q is the sum over 4th order
cumulants:
sum
kl
Cum(x
i
,x
j
,x
k
,x
l
)
This method is really not
robust. Included here only for
tutorial purposes.
ICA [1,2]
Q = eye(N);
decorrelated
and mixing A
is
orthogonal.
Q is identity, which reduces
generalized eigenvalue to
regular eigenvalue.
PCA
any
linear
algebra
book
Time t and time delay tau can be replaced by distance and shift in space if dealing with images and volumes
rather than time series.
Disclaimer:
No claims are made for correlated sources. The method above is thoroughly unrobust with poor statistical and
numerical performance, in particular in high dimensional problems (where you do not have T>>N) and in
1/13/2014 Blind Source Separation MATLAB code
bme.ccny.cuny.edu//quickiebss.html 1/2
particular for the higher moments case. But what can you expect from two lines of code?! This information is
provided for people with little patience to read papers or implement code. It's just a teaser really. If you want to
get good results consider diagonalizing for multiple tau, t, or multiple cumulant terms. How? Not in two lines ...
you will have to read some papers.
References:
[1] Lucas Parra, Paul Sajda, "Blind Source Separation via Generalized Eigenvalue Decomposition", Journal of
Machine Learning Research, vol. 4, pp. 1261-1269, 2003 (.pdf)
[2] Cardoso, J.F., Souloumiac A., "Blind beamforming for non Gaussian signals", IEE Proceedings-F, vol. 140,
no. 6, pp. 362-370, December 1993
[3] Weinstein, E. and Feder, M. and Oppenheim, A.V, "Multi-Channel Signal Separation by Decorrelation",
IEEE Trans. Speech Audio Processing, vol. 1, no. 4, pp. 405-413, April 1993
[4] Molgedey, L. and Schuster, H.,G., "Separation of a mixture of independent signals using time delayed
correlations", Physical Review Letters, vol. 72, no. 23, pp. 3634-3637, 1994
[5] Cardoso, J.F. "Blind signal separation: statistical principles", Proc. of the IEEE, vol. 9, no. 10, pp. 2009-
2026, October 1998
[6] Parra L., Spence C., "Convolutive blind source separation of non-stationary sources", IEEE Trans. on
Speech and Audio Processing pp. 320-327, May 2000.
[7] Roberts, S., Everson, R. "Independent Components Analysis : Principles and Practice" Cambridge University
Press, June 2001
Tutorial:
Find here a short tutorial talk and overview on some of my work in BSS: slides.
Lucas Parra, Jan 12, 2003

1/13/2014 Blind Source Separation MATLAB code
bme.ccny.cuny.edu//quickiebss.html 2/2

Vous aimerez peut-être aussi