0001 function [z,idx]=nt_tsregress(x,y,shifts,xw,yw,keep,threshold)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 if nargin<2; error('!'); end
0020 if nargin<3||isempty(shifts); shifts=[0]; end
0021 if nargin<4; xw=[]; end
0022 if nargin<5; yw=[]; end
0023 if nargin<6; keep=[]; end
0024 if nargin<7; threshold=[]; end
0025
0026 if size(x,1) ~= size(y,1); error('!'); end
0027
0028
0029 mn=min(shifts);
0030 if mn<0;
0031 shifts=shifts-mn;
0032 x=x(-mn+1:end,:,:);
0033 y=y(-mn+1:end,:,:);
0034 end
0035 nshifts=numel(shifts);
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048 if ndims(x)==3
0049 [Mx,Nx,Ox]=size(x);
0050 [My,Ny,Oy]=size(y);
0051 x=nt_unfold(x);
0052 y=nt_unfold(y);
0053 [x,xmn]=nt_demean(x,xw);
0054 [y,ymn]=nt_demean(y,yw);
0055 x=nt_fold(x,Mx);
0056 y=nt_fold(y,My);
0057 else
0058 [x,xmn]=nt_demean(x,xw);
0059 [y,ymn]=nt_demean(y,yw);
0060 end
0061
0062
0063
0064 [cyy,totalweight]=nt_cov(y,shifts',yw);
0065 cyy=cyy./totalweight;
0066
0067
0068 [cxy, totalweight]=nt_cov2(x,y,shifts',xw,yw);
0069 disp('!!!!!!!!! WARNING: calling obsolete code !!!!!!!!!!!!!!!!');
0070
0071 cxy=cxy./totalweight;
0072
0073
0074 r=nt_regcov(cxy,cyy,keep,threshold);
0075
0076
0077 if ndims(x)==3
0078 x=nt_unfold(x);
0079 y=nt_unfold(y);
0080 [m,n]=size(x);
0081 mm=m-max(shifts);
0082 z=zeros(size(x));
0083 for k=1:nshifts
0084 kk=shifts(k);
0085 idx1=kk+1:kk+mm;
0086 idx2=k+(0:size(y,2)-1)*nshifts;
0087 z(1:mm,:)=z(1:mm,:)+y(idx1,:)*r(idx2,:);
0088 end
0089 z=nt_fold(z,Mx);
0090 z=z(1:end-max(shifts),:,:);
0091 else
0092 [m,n]=size(x);
0093 z=zeros(m-max(shifts),n);
0094 for k=1:nshifts
0095 kk=shifts(k);
0096 idx1=kk+1:kk+size(z,1);
0097
0098 idx2=k+(0:size(y,2)-1)*nshifts;
0099 z=z+y(idx1,:)*r(idx2,:);
0100 end
0101 end
0102
0103
0104 offset=max(0,-mn);
0105 idx=offset+1:offset+size(z,1);
0106
0107
0108
0109
0110