0001 function r=nt_sns0(c,nneighbors,skip,wc)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 n=size(c,1);
0015
0016 if nargin<2 || isempty(nneighbors); error('need to specify nneighbors'); end
0017 if nargin<3 || isempty(skip); skip=0; end
0018 if nargin<4 || isempty(wc); wc=c; end
0019
0020 nneighbors=min(nneighbors,n-skip-1);
0021
0022 r=zeros(size(c));
0023
0024
0025 d=sqrt(1./(diag(c)+eps));
0026 c=nt_vecmult(nt_vecmult(c,d),d');
0027
0028 for iChan=1:n
0029
0030 c1=c(:,iChan);
0031 [c1,idx]=sort(c1.^2,1,'descend');
0032 idx=idx(skip+2:skip+1+nneighbors);
0033
0034
0035 c2=wc(idx,idx);
0036 [topcs,eigenvalues]=nt_pcarot(c2);
0037 topcs=topcs*diag(1./sqrt(eigenvalues));
0038 topcs(find(isinf(topcs)|isnan(topcs)))=0;
0039
0040
0041 topcs=[1,zeros(1,nneighbors);zeros(nneighbors,1),topcs];
0042
0043
0044 c3=topcs'*wc([iChan;idx],[iChan;idx])*topcs;
0045
0046
0047 c4=c3(1,2:end)*topcs(2:end,2:end)';
0048
0049
0050 r(idx,iChan)=c4;
0051
0052 end