0001 function x=nt_smooth(x,T,nIterations,nodelayflag)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 nt_greetings;
0012
0013 if nargin<4||isempty(nodelayflag); nodelayflag=0; end
0014 if nargin<3||isempty(nIterations); nIterations=1; end
0015 if nargin<2; help nt_smooth ; error('!'); end
0016
0017 if ndims(x)>4; error('!'); end
0018
0019 integ=floor(T);
0020 frac=T-integ;
0021
0022 if integ>=size(x,1)
0023 x=repmat(mean(x),[size(x,1),1,1,1]);
0024 return;
0025 end
0026
0027
0028 mn=mean(x(1:(integ+1),:,:),1);
0029 x=bsxfun(@minus,x,mn);
0030
0031 if nIterations==1 && frac==0;
0032
0033 x=cumsum(x);
0034 x(T+1:end,:)=x(T+1:end,:)-x(1:end-T,:);
0035 x=x/T;
0036 else
0037
0038 B=[ones(integ,1);frac]/T;
0039 for k=1:nIterations-1
0040 B=conv(B,[ones(integ,1);frac]/T);
0041 end
0042 x=filter(B,1,x);
0043 end
0044
0045 if nodelayflag
0046 shift=round(T/2*nIterations);
0047 x=[x(shift+1:end,:,:,:); zeros(shift,size(x,2),size(x,3),size(x,4))];
0048 end
0049
0050
0051
0052 x=bsxfun(@plus,x,mn);