annotate aim-mat/tools/@signal/fill.m @ 4:537f939baef0 tip

various bug fixes and changed copyright message
author Stefan Bleeck <bleeck@gmail.com>
date Tue, 16 Aug 2011 14:37:17 +0100
parents 20ada0af3d7d
children
rev   line source
tomwalters@0 1 % method of class @signal
tomwalters@0 2 %
tomwalters@0 3 % INPUT VALUES:
tomwalters@0 4 %
tomwalters@0 5 % RETURN VALUE:
tomwalters@0 6 %
bleeck@3 7 % This external file is included as part of the 'aim-mat' distribution package
bleeck@3 8 % (c) 2011, University of Southampton
bleeck@3 9 % Maintained by Stefan Bleeck (bleeck@gmail.com)
bleeck@3 10 % download of current version is on the soundsoftware site:
bleeck@3 11 % http://code.soundsoftware.ac.uk/projects/aimmat
bleeck@3 12 % documentation and everything is on http://www.acousticscale.org
tomwalters@0 13
tomwalters@0 14 function rethandle=fill(sig,border,stil)
tomwalters@0 15 % usage: handle=fill(sig,border,stil)
tomwalters@0 16 % works as plot, but fills the content with the color of the signal
tomwalters@0 17
tomwalters@0 18
tomwalters@0 19
tomwalters@0 20 if nargin<3
tomwalters@0 21 stil='b';
tomwalters@0 22 end
tomwalters@0 23
tomwalters@0 24
tomwalters@0 25 % if we are dealing with milliseconds (very often), then the units are in
tomwalters@0 26 % ms as well
tomwalters@0 27 if strfind(sig.unit_x,'(ms)')>0
tomwalters@0 28 multiplier=1000;
tomwalters@0 29 else
tomwalters@0 30 multiplier=1;
tomwalters@0 31 end
tomwalters@0 32
tomwalters@0 33
tomwalters@0 34
tomwalters@0 35 sr=getsr(sig);
tomwalters@0 36 durationbin=size(sig.werte,1);
tomwalters@0 37 duration=durationbin/sr;
tomwalters@0 38 if nargin<2
tomwalters@0 39 t1=1;
tomwalters@0 40 t2=durationbin;
tomwalters@0 41 border=[t1 t2 min(sig.werte(t1:t2)) max(sig.werte(t1:t2))];
tomwalters@0 42 end
tomwalters@0 43
tomwalters@0 44 if isstruct(border) || isempty(border)
tomwalters@0 45 options=border;
tomwalters@0 46 t1=1;
tomwalters@0 47 t2=durationbin;
tomwalters@0 48 border=[t1 t2 min(sig.werte(t1:t2)) max(sig.werte(t1:t2))];
tomwalters@0 49 else
tomwalters@0 50 options=[];
tomwalters@0 51 if ischar(border)
tomwalters@0 52 stil=border;
tomwalters@0 53 t1=1;
tomwalters@0 54 t2=durationbin;
tomwalters@0 55 border=[t1 t2 min(sig.werte(t1:t2)) max(sig.werte(t1:t2))];
tomwalters@0 56 else
tomwalters@0 57 if nargin <2
tomwalters@0 58 t1=1;
tomwalters@0 59 t2=durationbin;
tomwalters@0 60 border=[t1 t2 min(sig.werte(t1:t2)) max(sig.werte(t1:t2))];
tomwalters@0 61 else
tomwalters@0 62 t1=border(1);
tomwalters@0 63 t2=border(2);
tomwalters@0 64 x1=time2bin(sig,t1);
tomwalters@0 65 x2=time2bin(sig,t2);
tomwalters@0 66 nr=size(border,2);
tomwalters@0 67 if nr==2 % wenn nur die x-Werte angegeben werden
tomwalters@0 68 border=[x1 x2 min(sig.werte(x1+1:x2)) max(sig.werte(x1+1:x2))];
tomwalters@0 69 else
tomwalters@0 70 border(1)=x1;
tomwalters@0 71 border(2)=x2;
tomwalters@0 72 end
tomwalters@0 73 end
tomwalters@0 74 end
tomwalters@0 75 end
tomwalters@0 76
tomwalters@0 77 if ~isfield(options,'is_log');
tomwalters@0 78 is_log=0;
tomwalters@0 79 else
tomwalters@0 80 is_log=options.is_log;
tomwalters@0 81 end
tomwalters@0 82
tomwalters@0 83 if isfield(options,'minimum_time');
tomwalters@0 84 border(1)=time2bin(sig,options.minimum_time);
tomwalters@0 85 minimum_time=options.minimum_time;
tomwalters@0 86 else
tomwalters@0 87 minimum_time=bin2time(sig,border(1));
tomwalters@0 88 end
tomwalters@0 89
tomwalters@0 90 if isfield(options,'maximum_time');
tomwalters@0 91 border(2)=time2bin(sig,options.maximum_time);
tomwalters@0 92 maximum_time=options.maximum_time;
tomwalters@0 93 else
tomwalters@0 94 maximum_time=bin2time(sig,border(2));
tomwalters@0 95 end
tomwalters@0 96
tomwalters@0 97
tomwalters@0 98 % if the time scale is reversed (time from left to right)
tomwalters@0 99 if isfield(options,'time_reversed');
tomwalters@0 100 time_reversed=options.time_reversed;
tomwalters@0 101 else
tomwalters@0 102 time_reversed=0;
tomwalters@0 103 end
tomwalters@0 104
tomwalters@0 105 start_time=getminimumtime(sig);
tomwalters@0 106
tomwalters@0 107 min_x_screen=border(1); % einer wird abgezogen damit wir bei Null beginnen, nicht beim ersten bin, was blöde aussieht
tomwalters@0 108 max_x_screen=border(2);
tomwalters@0 109 minshowy=border(3);
tomwalters@0 110 maxy=border(4);
tomwalters@0 111
tomwalters@0 112 xvals=getxvalues(sig);
tomwalters@0 113
tomwalters@0 114
tomwalters@0 115 xvals=xvals.*multiplier;
tomwalters@0 116 yvals=getvalues(sig);
tomwalters@0 117
tomwalters@0 118
tomwalters@0 119 % fill up the corners
tomwalters@0 120 yvals=[0 yvals' 0];
tomwalters@0 121 tstart=getminimumtime(sig);
tomwalters@0 122 tstop=getmaximumtime(sig);
tomwalters@0 123 % xvals=[tstart:1/sr*multiplier:tstop*multiplier+1/sr*multiplier];
tomwalters@0 124 xvals=[tstart*multiplier:1/sr*multiplier:tstop*multiplier+1/sr*multiplier];
tomwalters@0 125 % xvals=1:length(yvals);
tomwalters@0 126
tomwalters@0 127 % this is the plotting command:
tomwalters@0 128 handle=fill(xvals,yvals,stil,'facecolor',stil,'EdgeColor',stil);
tomwalters@0 129
tomwalters@0 130 if time_reversed
tomwalters@0 131 set(gca,'XDir','reverse') % turn them around, because the higher values shell end on the right
tomwalters@0 132 else
tomwalters@0 133 set(gca,'XDir','normal') % normale ausrichtung
tomwalters@0 134 end
tomwalters@0 135
tomwalters@0 136 if is_log
tomwalters@0 137 set(gca,'XScale','log')
tomwalters@0 138 t=minimum_time*multiplier;
tomwalters@0 139 tix=[t 2*t 4*t 8*t 16*t 32*t 64*t 128*t 256*t 512*t 1024*t];
tomwalters@0 140 if ~isempty(sig.x_tick_labels)
tomwalters@0 141 ti=sig.x_tick_labels;
tomwalters@0 142 set(gca,'XTicklabel',ti);
tomwalters@0 143 end
tomwalters@0 144 set(gca,'XTick',tix);
tomwalters@0 145 else % its linear
tomwalters@0 146 set(gca,'XScale','linear')
tomwalters@0 147 end
tomwalters@0 148
tomwalters@0 149 miny=border(3);
tomwalters@0 150 maxy=border(4);
tomwalters@0 151 y=[miny maxy];
tomwalters@0 152 if miny==maxy
tomwalters@0 153 maxy=miny+1;
tomwalters@0 154 miny=miny-1;
tomwalters@0 155 end
tomwalters@0 156 if isnan(miny) || isnan(maxy)
tomwalters@0 157 else
tomwalters@0 158 axis([minimum_time*multiplier maximum_time*multiplier miny*1.05 maxy*1.05]);
tomwalters@0 159 end
tomwalters@0 160
tomwalters@0 161 xlabel(sig.unit_x);
tomwalters@0 162 ylabel(sig.unit_y);
tomwalters@0 163 title(sig.name,'Interpreter','none');
tomwalters@0 164
tomwalters@0 165 if nargout==1
tomwalters@0 166 rethandle=handle;
tomwalters@0 167 end
tomwalters@0 168
tomwalters@0 169 return