samer@0: function Y=rndwindow(X,span,dim,varargin) samer@3: % rndwindow - get random windows of a signal samer@0: % samer@0: % rndwindow :: samer@0: % [Size:[1,E]] ~'E-dimensional signal array', samer@0: % L:natural ~'span of windows to extract', samer@0: % D:1..E ~'dimension to operate along', samer@0: % randstate ~'intial state of rngs' samer@0: % -> seq [arrset(Size,D,L)] ~'seq of arrays of size L in Dth dimension'. samer@0: samer@37: opts=options('state',rndstate,'circular',0,varargin{:}); samer@0: samer@0: sz=size1(X); samer@0: if nargin<3, dim=length(sz); end samer@0: len=sz(dim); samer@0: ran=[0,span-1]; samer@0: samer@0: if opts.circular, samer@0: ithresh=len-span+1; samer@23: Y=map(@exwin_circ,rndzip(@()randnat(len),opts.state)); samer@0: else samer@23: Y=map(@exwin,rndzip(@()randnat(len-span+1),opts.state)); samer@0: end samer@0: samer@0: function y=exwin(i), y=extract(X,dim,i+ran); end samer@0: function y=exwin_circ(i), samer@0: if i<=ithresh samer@0: y=extract(X,dim,i+ran); samer@0: else samer@0: y=cat(dim,extract(X,dim,[i,len]),extract(X,dim,[1,span-(1+len-i)])); samer@0: end samer@0: end samer@0: samer@0: function s=strfn(a) samer@0: s=sprintf('rndwindow(%s,%d)',tostring(X),span); samer@0: end samer@0: end samer@0: samer@0: samer@0: samer@0: samer@0: samer@0: