Mercurial > hg > ishara
annotate signals/@siglzcat/construct.m @ 1:289445d368a7
import.
author | samer |
---|---|
date | Wed, 19 Dec 2012 22:46:05 +0000 |
parents | |
children |
rev | line source |
---|---|
samer@1 | 1 function s=construct(sig) |
samer@1 | 2 fs=rate(sig.head); |
samer@1 | 3 ch=channels(sig.head); |
samer@1 | 4 sc=construct(sig.head); |
samer@1 | 5 sx=sig.tail; |
samer@1 | 6 |
samer@1 | 7 s.start = @start; |
samer@1 | 8 s.stop = @stop; |
samer@1 | 9 s.dispose = @dispose; |
samer@1 | 10 s.reader = @reader; |
samer@1 | 11 |
samer@1 | 12 function start, sc.start(); end |
samer@1 | 13 function stop, sc.stop(); end |
samer@1 | 14 function dispose, sc.dispose(); end |
samer@1 | 15 function r=reader(n) |
samer@1 | 16 rc=sc.reader(n); |
samer@1 | 17 r = @next; |
samer@1 | 18 function [x,rem]=next |
samer@1 | 19 [x,rem]=rc(); |
samer@1 | 20 while rem>0 && ~isempty(sx) % current signal exhausted, try next |
samer@1 | 21 sc.dispose(); |
samer@1 | 22 [sig2,sx]=sx(); |
samer@1 | 23 |
samer@1 | 24 fs=unify_rates(fs,rate(sig2)); |
samer@1 | 25 if isinf(fs), error('sigcat:Signal sampling rate mismatch'); end |
samer@1 | 26 ch=unify_channels(ch,channels(sig2)); |
samer@1 | 27 if isinf(ch), error('sigcat:Signal channels count mismatch'); end |
samer@1 | 28 sc=construct(sig2); |
samer@1 | 29 |
samer@1 | 30 [x(:,end-rem+1:end),rem]=sigreadn(sc,rem); |
samer@1 | 31 rc=sc.reader(n); |
samer@1 | 32 end |
samer@1 | 33 end |
samer@1 | 34 end |
samer@1 | 35 end |