annotate signals/@signal/signal.m @ 61:eff6bddf82e3 tip

Finally implemented perceptual brightness thing.
author samer
date Sun, 11 Oct 2015 10:20:42 +0100
parents 62e31e7980e6
children
rev   line source
samer@1 1 % signal - Base class for signal
samer@1 2 %
samer@1 3 % signal :: signal(C:natural,R:nonneg).
samer@1 4 %
samer@1 5 % The signal(C,R) type denotes the type of a signal with C
samer@1 6 % channels and a sampling rate of R.
samer@1 7 %
samer@1 8 % The base signal class cannot be used without subclassing since
samer@1 9 % any attempt to instantiate the live signal generator will throw
samer@1 10 % an exception.
samer@1 11 %
samer@1 12 % METHODS
samer@1 13 % channels :: signal(C,R) -> natural.
samer@1 14 % rate :: signal(C,R) -> nonneg.
samer@1 15 % construct:: signal(C,R) -> livesig(C).
samer@1 16 % length :: signal(C,R) -> natural.
samer@1 17 % gather :: signal(C,R), options -> [[C,N]].
samer@1 18 % gathern :: N:natural, signal(C,R), options -> [[C,N]], natural.
samer@1 19 %
samer@1 20 % livesig(C) :== struct {
samer@1 21 % start :: void->void;
samer@1 22 % stop :: void->void;
samer@1 23 % dispose :: void->void;
samer@1 24 % reader :: N:natural -> (void->[[C,N]]);
samer@1 25 % }
samer@1 26
samer@1 27 classdef signal
samer@3 28 methods (Abstract)
samer@3 29 c=channels(s)
samer@3 30 u=construct(s)
samer@3 31 r=rate(s)
samer@1 32 end
samer@3 33
samer@1 34 methods
samer@1 35 function s=signal, end
samer@1 36
samer@1 37 function s=and(s1,s2), s=sigcat(s1,s2); end
samer@1 38 function y=cache(x), y=reclock(rate(x),sigarray(gather(x))); end
samer@1 39 function display(a)
samer@1 40 disp(sprintf(' %s :: signal(%s,%s)',tostring(a),fmt(channels(a)),fmt(rate(a))));
samer@1 41 function s=fmt(x), if isnan(x), s='_'; else s=num2str(x); end; end
samer@1 42 end
samer@1 43
samer@1 44 function y=map(f,x), y=sigmap(f,x); end
samer@1 45 function s=mpower(a,b), s=resample(b,a); end
samer@1 46 function s=or(s1,s2), s=sigbinop(@vertcat,s1,s2,@plus); end
samer@1 47 function s2=reclock(r,s1), s2=sigreclock(r,s1); end
samer@1 48 function y=drop(n,x), y=sigdrop(n,x); end
samer@1 49 function y=take(n,x), y=sigtake(n,x); end
samer@1 50
samer@1 51 function y=dropt(t,x),
samer@1 52 if isnan(rate(x)), error('Cannot dropt without definite sampling rate'); end
samer@1 53 y=sigdrop(round(t*rate(x)),x);
samer@1 54 end
samer@1 55
samer@1 56 function y=taket(t,x),
samer@1 57 if isnan(rate(x)), error('Cannot taket without definite sampling rate'); end
samer@1 58 y=sigtake(round(t*rate(x)),x);
samer@1 59 end
samer@1 60
samer@1 61 function y=cycle(x),
samer@1 62 y=siglzcat(x,@cyclef);
samer@1 63 function [s1,sx]=cyclef, s1=x; sx=@cyclef; end
samer@1 64 end
samer@1 65
samer@1 66 function s2=resample(f2,s1,varargin)
samer@1 67 if isnan(rate(s1)), error('no sample rate set'); end
samer@1 68 if rate(s1)==f2, s2=s1;
samer@1 69 else, s2=sigresample(f2,s1,varargin{:}); end
samer@1 70 end
samer@43 71
samer@43 72 function varargout=specgrm(x,varargin)
samer@43 73 [varargout{1:nargout}]=specgrm(gather(x),varargin{:},'fs',rate(x));
samer@43 74 end
samer@1 75 end
samer@1 76 end