📄 subspace.m
字号:
function [Us,Ds,Un,Dn] = subspace(mixedsig)
%
%2005.12.5
if nargin == 0,
error ('You must supply the mixed data as input argument.');
end
if length (size (mixedsig)) > 2,
error ('Input data can not have 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 = 0.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(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) = i;
numTaken = numTaken + 1;
end
end
Dn = D(takingMask, takingMask);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -