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