⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subspace.m

📁 子空间分解matlab程序。采用PCA主成元分析方法。
💻 M
字号:
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);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -