samer@1: classdef sigfun < signal samer@1: properties (GetAccess=private, SetAccess=immutable) samer@1: fun samer@1: fs samer@1: end samer@1: methods samer@1: function s=sigfun(fun,rate) samer@1: s.fun=fun; samer@1: s.fs=rate; samer@1: end samer@1: samer@1: function s=tostring(sig), s=sprintf('sigfun(%s)',tostring(sig.fun)); end samer@1: function c=channels(s), c=size(s.fun(0),1); end samer@1: function c=rate(s), c=s.fs; end samer@1: samer@1: function s=construct(sig) samer@1: fun=sig.fun; samer@1: t=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: T=(0:n-1)/sig.fs; samer@1: dt=n/sig.fs; samer@1: function [x,rem]=next, samer@1: x=fun(t+T); rem=0; samer@1: t=t+dt; samer@1: end samer@1: end samer@1: end samer@1: end samer@1: end