0001 function [c,tw]=nt_cov(x,shifts,w);
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026 if nargin<3; w=[]; end;
0027 if nargin<2||isempty(shifts); shifts=0; end;
0028 if prod(size(x))==0; error('data empty'); end
0029 shifts=shifts(:);
0030 nshifts=numel(shifts);
0031
0032
0033 if isempty(w)
0034
0035 if isnumeric(x)
0036
0037 [m,n,o]=size(x);
0038 c=zeros(n*nshifts);
0039 for k=1:o
0040 xx=nt_multishift(x(:,:,k),shifts);
0041 c=c+xx'*xx;
0042 end
0043 tw=size(xx,1)*o;
0044 elseif iscell(x)
0045
0046 [m,n]=size(x{1});
0047 o=length(x);
0048 c=zeros(n*nshifts);
0049 for k=1:o;
0050 if size(x{k},2)~=n; disp([size(x{k}),n, k]); error('!'); end
0051 xx=nt_multishift(x{k}(:,:),shifts);
0052 c=c+xx'*xx;
0053 end
0054 tw=size(xx,1)*o;
0055 else error('!'); end
0056 else
0057
0058 if isnumeric(x)
0059
0060 [m,n,o]=size(x);
0061 c=zeros(n*nshifts);
0062 for k=1:o
0063 if ~all(shifts == [0]);
0064 xx=nt_multishift(x(:,:,k),shifts);
0065 ww=nt_multishift(w(:,:,k),shifts);
0066 ww=min(ww,[],2);
0067 else
0068 xx=x(:,:,k); ww=w(:,:,k);
0069 end
0070 xx=nt_vecmult(xx,ww);
0071 c=c+xx'*xx;
0072 end
0073 tw=sum(w(:));
0074 else
0075
0076 c=zeros(n*nshifts);
0077 [m,n]=size(x{1});
0078 o=length(x);
0079 for k=1:o
0080 if ~all(shifts == [0]);
0081 xx=nt_multishift(x{k}(:,:),shifts);
0082 ww=nt_multishift(w{k}(:,:),shifts);
0083 ww=min(ww,[],2);
0084 else
0085 xx=x{k}(:,:); ww=w{k}(:,:);
0086 end
0087 xx=nt_vecmult(xx,ww);
0088 c=c+xx'*xx;
0089 end
0090 tw=sum(w(:));
0091 end
0092 end
0093