diff signals/@sigfun/sigfun.m @ 1:289445d368a7

import.
author samer
date Wed, 19 Dec 2012 22:46:05 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/signals/@sigfun/sigfun.m	Wed Dec 19 22:46:05 2012 +0000
@@ -0,0 +1,36 @@
+classdef sigfun < signal
+	properties (GetAccess=private, SetAccess=immutable)
+		fun
+		fs
+	end
+	methods
+		function s=sigfun(fun,rate)
+			s.fun=fun;
+			s.fs=rate;
+		end
+
+		function s=tostring(sig), s=sprintf('sigfun(%s)',tostring(sig.fun)); end
+		function c=channels(s), c=size(s.fun(0),1); end
+		function c=rate(s), c=s.fs; end
+
+		function s=construct(sig)
+			fun=sig.fun;
+			t=0;
+
+			s.start   = @nop;
+			s.stop    = @nop;
+			s.dispose = @nop;
+			s.reader = @reader;
+
+			function r=reader(n)
+				r = @next;
+				T=(0:n-1)/sig.fs;
+				dt=n/sig.fs;
+				function [x,rem]=next, 
+					x=fun(t+T); rem=0; 
+					t=t+dt;
+				end
+			end
+		end
+	end
+end