samer@0
|
1 function Y=rndwindow(X,span,dim,varargin)
|
samer@3
|
2 % rndwindow - get random windows of a signal
|
samer@0
|
3 %
|
samer@0
|
4 % rndwindow ::
|
samer@0
|
5 % [Size:[1,E]] ~'E-dimensional signal array',
|
samer@0
|
6 % L:natural ~'span of windows to extract',
|
samer@0
|
7 % D:1..E ~'dimension to operate along',
|
samer@0
|
8 % randstate ~'intial state of rngs'
|
samer@0
|
9 % -> seq [arrset(Size,D,L)] ~'seq of arrays of size L in Dth dimension'.
|
samer@0
|
10
|
samer@37
|
11 opts=options('state',rndstate,'circular',0,varargin{:});
|
samer@0
|
12
|
samer@0
|
13 sz=size1(X);
|
samer@0
|
14 if nargin<3, dim=length(sz); end
|
samer@0
|
15 len=sz(dim);
|
samer@0
|
16 ran=[0,span-1];
|
samer@0
|
17
|
samer@0
|
18 if opts.circular,
|
samer@0
|
19 ithresh=len-span+1;
|
samer@23
|
20 Y=map(@exwin_circ,rndzip(@()randnat(len),opts.state));
|
samer@0
|
21 else
|
samer@23
|
22 Y=map(@exwin,rndzip(@()randnat(len-span+1),opts.state));
|
samer@0
|
23 end
|
samer@0
|
24
|
samer@0
|
25 function y=exwin(i), y=extract(X,dim,i+ran); end
|
samer@0
|
26 function y=exwin_circ(i),
|
samer@0
|
27 if i<=ithresh
|
samer@0
|
28 y=extract(X,dim,i+ran);
|
samer@0
|
29 else
|
samer@0
|
30 y=cat(dim,extract(X,dim,[i,len]),extract(X,dim,[1,span-(1+len-i)]));
|
samer@0
|
31 end
|
samer@0
|
32 end
|
samer@0
|
33
|
samer@0
|
34 function s=strfn(a)
|
samer@0
|
35 s=sprintf('rndwindow(%s,%d)',tostring(X),span);
|
samer@0
|
36 end
|
samer@0
|
37 end
|
samer@0
|
38
|
samer@0
|
39
|
samer@0
|
40
|
samer@0
|
41
|
samer@0
|
42
|
samer@0
|
43
|