Mercurial > hg > ishara
comparison signals/@sigarray/sigarray.m @ 1:289445d368a7
import.
author | samer |
---|---|
date | Wed, 19 Dec 2012 22:46:05 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:672052bd81f8 | 1:289445d368a7 |
---|---|
1 classdef sigarray < signal | |
2 properties (GetAccess=private, SetAccess=immutable) | |
3 fs | |
4 array | |
5 end | |
6 methods | |
7 function s=sigarray(array,rate) | |
8 if nargin<2, rate=nan; end | |
9 s.array=array; | |
10 s.fs=rate; | |
11 end | |
12 | |
13 function s=tostring(sig) | |
14 s=sprintf('sigarray(<%dx%d>)',size(sig.array,1),size(sig.array,2)); | |
15 end | |
16 | |
17 function c=channels(s), c=size(s.array,1); end | |
18 function c=rate(s), c=s.fs; end | |
19 function s=construct(sig) | |
20 array=sig.array; | |
21 ch=size(array,1); | |
22 length=size(array,2); | |
23 pos=0; | |
24 | |
25 s.start = @nop; | |
26 s.stop = @nop; | |
27 s.dispose = @nop; | |
28 s.reader = @reader; | |
29 | |
30 function r=reader(n) | |
31 r = @next; | |
32 CHUNK = 1:uint32(n); | |
33 function [x,rem]=next | |
34 if pos+n<=length | |
35 x=array(:,pos+CHUNK); rem=0; | |
36 pos=pos+n; | |
37 else | |
38 rem=n-(length-pos); | |
39 x=[array(:,pos+1:end),zeros(ch,rem)]; | |
40 pos=length; | |
41 end | |
42 end | |
43 end | |
44 end | |
45 end | |
46 end |