function [Us,Ds,Un,Dn]=subspace(mixedsig)
if nargin==0,
error('You must supply the mixed data as input argument.');
end
if length(size(mixedsig))>2,
error('Input data can not hae more than two dimensions.');
end
if any(any(isnan(mixedsig))),
error('Input data contains NaN''s.');
end
meanValue=mean(mixedsig')';
mixedsig=mixedsig-meanValue*ones(1,size(mixedsig,2));
[Dim,NumOfSampl]=size(mixedsig);
oldDimension=Dim;
%fprintf('Number of signals:%d\n',Dim);
%fprintf('Number of samples:%d\n',NumOfSampl);
covarianceMatrix=cov(mixedsig',1);
[E,D]=eig(covarianceMatrix);
rankTolerance=1.5;
maxLastEig=sum(diag(D)>rankTolerance);
lastEig=maxLastEig;
eigenvalues=flipud(sort(diag(D)));
Columns=diag(D)>rankTolerance;
%calculate Us
numTaken=0;
for i=1:size(Columns,1),
if Columns(i,1)==1,
takingMask(1,numTaken+1)=i;
numTaken=numTaken+1;
end
end
Us=E(:,takingMask);
%calculate Ds
numTaken=0;
for i=1:size(Columns,1),
if Columns(i,1)==1,
takingMask(1,numTaken+1)=i;
numTaken=numTaken+1;
end
end
Ds=D(takingMask,takingMask);
%calculate Un
numTaken=0;
for i=1:size(Columns,1),
if Columns(i,1)==0,
takingMask(2,numTaken+1)=i;
numTaken=numTaken+1;
end
end
Un=E(:,takingMask);
%calculate Dn
numTaken=0;
for i=1:size(Columns,1),
if Columns(i,1)==0,
takingMask(1,numTaken+1)=i;
numTaken=numTaken+1;
end
end
Un=E(:,takingMask);
%calculate Dn
numTaken=0;
for i=1:size(Columns,1),
if Columns(i,1)==0,
takingMask(1,numTaken+1)=1;
numTaken=numTaken+1;
end
end
Dn=D(takingMask,takingMask);
评论0