tomwalters@0: % tool tomwalters@0: % tomwalters@0: % INPUT VALUES: tomwalters@0: % tomwalters@0: % RETURN VALUE: tomwalters@0: % tomwalters@0: % bleeck@3: % (c) 2011, University of Southampton bleeck@3: % Maintained by Stefan Bleeck (bleeck@gmail.com) bleeck@3: % download of current version is on the soundsoftware site: bleeck@3: % http://code.soundsoftware.ac.uk/projects/aimmat bleeck@3: % documentation and everything is on http://www.acousticscale.org bleeck@3: tomwalters@0: tomwalters@0: function AIsum(framestruct_a); tomwalters@0: % plots the current frame (cframe) together with its sum tomwalters@0: % all relevant data must be in the frame-object tomwalters@0: tomwalters@0: % framestruct.current_frame = current_frame; tomwalters@0: % framestruct.maximum_time_interval = maximum_time_interval; in ms!!!! tomwalters@0: % framestruct.minimum_time_interval= minimum_time_interval;in ms!!!! tomwalters@0: % framestruct.is_log='log' or 'linear'; tomwalters@0: tomwalters@0: if ~isstruct(framestruct_a) tomwalters@0: % error('AIsum must be called with a structure'); tomwalters@0: framestruct.current_frame=framestruct_a; tomwalters@0: else tomwalters@0: framestruct=framestruct_a; tomwalters@0: end tomwalters@0: tomwalters@0: if ~isfield(framestruct,'show_time'); tomwalters@0: show_time=0; tomwalters@0: else tomwalters@0: show_time=framestruct.show_time; tomwalters@0: end tomwalters@0: tomwalters@0: if ~isfield(framestruct,'plot_scale'); tomwalters@0: plot_scale=1; tomwalters@0: else tomwalters@0: plot_scale=framestruct.plot_scale; tomwalters@0: end tomwalters@0: tomwalters@0: if ~isfield(framestruct,'minimum_time_interval'); tomwalters@0: minimum_time_interval=1; tomwalters@0: else tomwalters@0: minimum_time_interval=framestruct.minimum_time_interval; tomwalters@0: end tomwalters@0: tomwalters@0: if ~isfield(framestruct,'maximum_time_interval'); tomwalters@0: maximum_time_interval=35; tomwalters@0: else tomwalters@0: maximum_time_interval=framestruct.maximum_time_interval; tomwalters@0: end tomwalters@0: tomwalters@0: if ~isfield(framestruct,'is_log'); tomwalters@0: is_log=1; tomwalters@0: else tomwalters@0: is_log=framestruct.is_log;; tomwalters@0: end tomwalters@0: current_frame=framestruct.current_frame; tomwalters@0: tomwalters@0: scale_summe=getsumscale(current_frame); tomwalters@0: tomwalters@0: % start plotting: tomwalters@0: clf; tomwalters@0: rect=[-0.04 0.15 0.97 0.85]; tomwalters@0: hint=1; % this indicate that we dont want a title tomwalters@0: mysubplot(1,1,1,rect, hint); tomwalters@0: plot_struct.t_min=minimum_time_interval/1000; tomwalters@0: plot_struct.t_max=maximum_time_interval/1000; tomwalters@0: plot_struct.has_axis=0; tomwalters@0: plot_struct.is_log=is_log; tomwalters@0: tomwalters@0: cax=plot(current_frame,plot_struct); tomwalters@0: set(gca,'zlim',[0 1/plot_scale]); tomwalters@0: tomwalters@0: % xaxisxticklabel=get(gca,'XTickLabel'); tomwalters@0: % xaxisxtick=get(gca,'XTick'); tomwalters@0: tomwalters@0: set(gca,'XTickLabel',[]); tomwalters@0: tomwalters@0: if show_time tomwalters@0: srate=getsr(current_frame); tomwalters@0: text_x=0.9*maximum_time_interval*srate/1000; tomwalters@0: text_y=getnrchannels(current_frame)+5; tomwalters@0: str=getstructure(current_frame); tomwalters@0: if ~isfield(str,'current_frame_start_time') tomwalters@0: str.current_frame_start_time=0.0; tomwalters@0: end tomwalters@0: frame_number=str.current_frame_number; tomwalters@0: frame_time=str.current_frame_start_time*1000; tomwalters@0: text(text_x,text_y,sprintf('%d : %4.0fms',frame_number,frame_time),'FontSize',8); tomwalters@0: % text(text_x,text_y,sprintf('%d',frame_number),'FontSize',8); tomwalters@0: end tomwalters@0: tomwalters@0: % and the sum tomwalters@0: rect=[-0.04 0 0.97 0.2]; tomwalters@0: mysubplot(1,1,1,rect, hint); tomwalters@0: summe=getsum(current_frame); % here it is calculated tomwalters@0: tomwalters@0: srate=getsr(current_frame); tomwalters@0: if is_log tomwalters@0: t=minimum_time_interval; tomwalters@0: ti=[t 2*t 4*t 8*t 16*t 32*t 64*t]; tomwalters@0: tix=(ti)/1000*srate; % there shell be the tix tomwalters@0: ti=(ti); tomwalters@0: ti=round(ti*100)/100; tomwalters@0: psumme=getpart(summe,getminimumtime(summe),0); tomwalters@0: rsumme=reverse(psumme); tomwalters@0: sumvalues=getvalues(rsumme); tomwalters@0: min_x_screen=minimum_time_interval/1000*srate; % thats the first point we want to see on the screen tomwalters@0: max_x_screen=maximum_time_interval/1000*srate; % thats the first point we want to see on the screen tomwalters@0: else % its not logarithmic! tomwalters@0: logstruc=getstructure(current_frame); tomwalters@0: if isfield(logstruc,'samplerate') tomwalters@0: if logstruc.samplerate==-1 % special case for logarithmic frames tomwalters@0: scale_summe=max(summe); tomwalters@0: else tomwalters@0: summe=getpart(summe,-maximum_time_interval/1000,-minimum_time_interval/1000); tomwalters@0: end tomwalters@0: else tomwalters@0: % summe=getpart(summe,-maximum_time_interval/1000,-minimum_time_interval/1000); tomwalters@0: end tomwalters@0: nr_labels=7; tomwalters@0: xbis=getnrpoints(summe); tomwalters@0: tix=0:xbis/nr_labels:xbis; tomwalters@0: xstep=(maximum_time_interval-minimum_time_interval)*1000/nr_labels; %works from -35 to 5 tomwalters@0: xstep=round(xstep); tomwalters@0: ti=([minimum_time_interval*1000:xstep:maximum_time_interval*1000])/1000; tomwalters@0: ti=round(ti*10)/10; tomwalters@0: sumvalues=getvalues(reverse(summe)); tomwalters@0: tomwalters@0: min_x_screen=0; tomwalters@0: max_x_screen=(maximum_time_interval-minimum_time_interval)/1000*srate; % thats the first point we want to see on the screen tomwalters@0: tomwalters@0: end tomwalters@0: tomwalters@0: tomwalters@0: h=plot(sumvalues); tomwalters@0: % set(h,'LineWidth',1); tomwalters@0: tomwalters@0: axis([min_x_screen max_x_screen 0 scale_summe]); tomwalters@0: tomwalters@0: set(gca,'XDir','reverse') % turn them around, because the higher values shell end on the right tomwalters@0: if is_log tomwalters@0: set(gca,'XScale','log') tomwalters@0: end tomwalters@0: tomwalters@0: if isstruct('logstruct') tomwalters@0: if logstruct.samplerate==-1 % special case for logarithmic frames tomwalters@0: nr_labels=6; tomwalters@0: tix=0:max_x_screen/(nr_labels-1):max_x_screen; tomwalters@0: tix(1)=1; tomwalters@0: min_time=(logstruct.min_time*1000); tomwalters@0: max_time=abs(logstruct.max_time*1000); tomwalters@0: ti=distributelogarithmic(min_time,max_time,nr_labels); tomwalters@0: text(30,-scale_summe/5,'time interval (ms)'); % this is at a nice position tomwalters@0: end tomwalters@0: else tomwalters@0: if is_log tomwalters@0: text(min_x_screen*1.9,-scale_summe/5,'time interval (ms)'); % this is at a nice position tomwalters@0: else tomwalters@0: text(120,-scale_summe/5,'time interval (ms)'); % this is at a nice position tomwalters@0: end tomwalters@0: end tomwalters@0: set(gca,'XTick',tix); tomwalters@0: set(gca,'XTickLabel',ti); tomwalters@0: tomwalters@0: % set(gca,'XTick',xaxisxtick); tomwalters@0: % set(gca,'XTickLabel',xaxisxticklabel); tomwalters@0: set(gca,'YTickLabel',[]);