view aim-mat/tools/AIsum.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
line wrap: on
line source
% tool
% 
%   INPUT VALUES:
%  
%   RETURN VALUE:
%
% 
% (c) 2011, University of Southampton
% Maintained by Stefan Bleeck (bleeck@gmail.com)
% download of current version is on the soundsoftware site: 
% http://code.soundsoftware.ac.uk/projects/aimmat
% documentation and everything is on http://www.acousticscale.org


function AIsum(framestruct_a);
% plots the current frame (cframe) together with its sum
% all relevant data must be in the frame-object

%         framestruct.current_frame = current_frame;
%         framestruct.maximum_time_interval = maximum_time_interval; in ms!!!!
%         framestruct.minimum_time_interval= minimum_time_interval;in ms!!!!
%         framestruct.is_log='log' or 'linear';

if ~isstruct(framestruct_a)
    %     error('AIsum must be called with a structure');
    framestruct.current_frame=framestruct_a;
else
    framestruct=framestruct_a;
end

if ~isfield(framestruct,'show_time');
    show_time=0;
else
    show_time=framestruct.show_time;
end

if ~isfield(framestruct,'plot_scale');
    plot_scale=1;
else
    plot_scale=framestruct.plot_scale;
end

if ~isfield(framestruct,'minimum_time_interval');
    minimum_time_interval=1;
else
    minimum_time_interval=framestruct.minimum_time_interval;
end

if ~isfield(framestruct,'maximum_time_interval');
    maximum_time_interval=35;
else
    maximum_time_interval=framestruct.maximum_time_interval;
end

if ~isfield(framestruct,'is_log');
    is_log=1;
else
    is_log=framestruct.is_log;;
end
current_frame=framestruct.current_frame;

scale_summe=getsumscale(current_frame);

% start plotting:
clf;
rect=[-0.04 0.15 0.97 0.85];
hint=1; % this indicate that we dont want a title
mysubplot(1,1,1,rect, hint);
plot_struct.t_min=minimum_time_interval/1000;
plot_struct.t_max=maximum_time_interval/1000;
plot_struct.has_axis=0;
plot_struct.is_log=is_log;

cax=plot(current_frame,plot_struct);
set(gca,'zlim',[0 1/plot_scale]);

% xaxisxticklabel=get(gca,'XTickLabel');
% xaxisxtick=get(gca,'XTick');

set(gca,'XTickLabel',[]);

if show_time
    srate=getsr(current_frame);
    text_x=0.9*maximum_time_interval*srate/1000;
    text_y=getnrchannels(current_frame)+5;
    str=getstructure(current_frame);
    if ~isfield(str,'current_frame_start_time')
        str.current_frame_start_time=0.0;
    end
    frame_number=str.current_frame_number;
    frame_time=str.current_frame_start_time*1000;
    text(text_x,text_y,sprintf('%d  : %4.0fms',frame_number,frame_time),'FontSize',8);
    %     text(text_x,text_y,sprintf('%d',frame_number),'FontSize',8);
end

% and the sum
rect=[-0.04 0 0.97 0.2];
mysubplot(1,1,1,rect, hint);
summe=getsum(current_frame);  % here it is calculated

srate=getsr(current_frame);
if is_log
    t=minimum_time_interval;
    ti=[t 2*t 4*t 8*t 16*t 32*t 64*t];
    tix=(ti)/1000*srate;  % there shell be the tix
    ti=(ti);
    ti=round(ti*100)/100;
    psumme=getpart(summe,getminimumtime(summe),0);
    rsumme=reverse(psumme);
    sumvalues=getvalues(rsumme);
    min_x_screen=minimum_time_interval/1000*srate; % thats the first point we want to see on the screen
    max_x_screen=maximum_time_interval/1000*srate; % thats the first point we want to see on the screen
else % its not logarithmic!
    logstruc=getstructure(current_frame);
    if isfield(logstruc,'samplerate')
        if logstruc.samplerate==-1 % special case for logarithmic frames
            scale_summe=max(summe);
        else
            summe=getpart(summe,-maximum_time_interval/1000,-minimum_time_interval/1000);
        end
    else
%         summe=getpart(summe,-maximum_time_interval/1000,-minimum_time_interval/1000);
    end
    nr_labels=7;
    xbis=getnrpoints(summe);
    tix=0:xbis/nr_labels:xbis;
    xstep=(maximum_time_interval-minimum_time_interval)*1000/nr_labels;   %works from -35 to 5
    xstep=round(xstep);
    ti=([minimum_time_interval*1000:xstep:maximum_time_interval*1000])/1000;
    ti=round(ti*10)/10;
    sumvalues=getvalues(reverse(summe));
    
    min_x_screen=0;
    max_x_screen=(maximum_time_interval-minimum_time_interval)/1000*srate; % thats the first point we want to see on the screen
    
end


h=plot(sumvalues);
% set(h,'LineWidth',1);

axis([min_x_screen max_x_screen 0 scale_summe]);

set(gca,'XDir','reverse')   % turn them around, because the higher values shell end on the right
if is_log
    set(gca,'XScale','log')
end

if isstruct('logstruct')
    if logstruct.samplerate==-1 % special case for logarithmic frames
        nr_labels=6;
        tix=0:max_x_screen/(nr_labels-1):max_x_screen;
        tix(1)=1;
        min_time=(logstruct.min_time*1000);
        max_time=abs(logstruct.max_time*1000);
        ti=distributelogarithmic(min_time,max_time,nr_labels);
        text(30,-scale_summe/5,'time interval (ms)');    % this is at a nice position
    end
else
    if is_log
        text(min_x_screen*1.9,-scale_summe/5,'time interval (ms)');    % this is at a nice position
    else
        text(120,-scale_summe/5,'time interval (ms)');    % this is at a nice position
    end   
end
set(gca,'XTick',tix);
set(gca,'XTickLabel',ti);

% set(gca,'XTick',xaxisxtick);
% set(gca,'XTickLabel',xaxisxticklabel);
set(gca,'YTickLabel',[]);