Mercurial > hg > ishara
diff arrows/@asignal/construct.m @ 0:672052bd81f8
Initial partial import.
author | samer |
---|---|
date | Wed, 19 Dec 2012 22:38:28 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/arrows/@asignal/construct.m Wed Dec 19 22:38:28 2012 +0000 @@ -0,0 +1,49 @@ +function u=construct(s,sizes_in) + src=construct(s.source); + ch=channels(s.source); + + span=s.block; + jump=s.hop; + olap=span-jump; + rdr=src.reader(jump); + + if olap>0 + buf=[zeros(ch,jump),sigreadn(src,olap)]; % preload with overlap + OL1=1:olap; + OL=(jump+1):span; + HOP=(olap+1):span; + process=@proc; + fprintf(' Using signal reader with overlap=%d.\n',olap); + else + process=@proc0; + fprintf(' Using zero-overlap signal reader.\n'); + end + + u=mkunit(s); + u.starting = src.start; + u.stopping = src.stop; + u.dispose = src.dispose; + u.process = process; + u.sizes_out = {[ch,span]}; + + function out=proc0, + [out,rem]=rdr(); + if rem>0, error('ARROW:EOF','End of stream'); end + end + + function out=proc, + buf(:,OL1)=buf(:,OL); % copy overlap from end of buf to head + [buf(:,HOP),rem]=rdr(); + if rem>0, error('ARROW:EOF','End of stream'); end + %out=[buf,chunk]; + out=buf; + end + + % old version + function out=proc1, + [chunk,rem]=rdr(); + if rem>0, error('ARROW:EOF','End of stream'); end + out=[buf,chunk]; + buf=out(:,OL); + end +end