samer@1: classdef sigarray < signal samer@1: properties (GetAccess=private, SetAccess=immutable) samer@1: fs samer@1: array samer@1: end samer@1: methods samer@1: function s=sigarray(array,rate) samer@1: if nargin<2, rate=nan; end samer@1: s.array=array; samer@1: s.fs=rate; samer@1: end samer@1: samer@1: function s=tostring(sig) samer@1: s=sprintf('sigarray(<%dx%d>)',size(sig.array,1),size(sig.array,2)); samer@1: end samer@1: samer@1: function c=channels(s), c=size(s.array,1); end samer@1: function c=rate(s), c=s.fs; end samer@1: function s=construct(sig) samer@1: array=sig.array; samer@1: ch=size(array,1); samer@1: length=size(array,2); samer@1: pos=0; samer@1: samer@1: s.start = @nop; samer@1: s.stop = @nop; samer@1: s.dispose = @nop; samer@1: s.reader = @reader; samer@1: samer@1: function r=reader(n) samer@1: r = @next; samer@1: CHUNK = 1:uint32(n); samer@1: function [x,rem]=next samer@1: if pos+n<=length samer@1: x=array(:,pos+CHUNK); rem=0; samer@1: pos=pos+n; samer@1: else samer@1: rem=n-(length-pos); samer@1: x=[array(:,pos+1:end),zeros(ch,rem)]; samer@1: pos=length; samer@1: end samer@1: end samer@1: end samer@1: end samer@1: end samer@1: end