Mercurial > hg > aimmat
view aim-mat/tools/AIFrePtiP.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 options=AIFrePtiP(framestruct_a); % plots the current frame (cframe) together with its sum of intervals % and the sum of frequencies % no pitch is calculated or plotted! for this use AIFrePtiPstress % all relevant data must be in the frame-object % the return value "pitch" is the result from the call to "calcresidualprobability" 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=1; 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,'is_log'); is_log=1; else is_log=framestruct.is_log;; end if isfield(framestruct,'frequency_profile_scale'); frequency_profile_scale=framestruct.frequency_profile_scale; else frequency_profile_scale=1; end if isfield(framestruct,'time_profile_scale'); time_profile_scale=framestruct.time_profile_scale; else time_profile_scale=1; end % if the time scale is reversed (time from left to right) if isfield(framestruct,'time_reversed'); time_reversed=framestruct.time_reversed; else time_reversed=0; end % hier wird der current frame definiert: current_frame=framestruct.current_frame; if ~isfield(framestruct,'maximum_time_interval'); maximum_time_interval=35; else maximum_time_interval=framestruct.maximum_time_interval; end if maximum_time_interval/1000>getlength(current_frame) maximum_time_interval=getlength(current_frame)*1000; end if isfield(framestruct,'options'); options=framestruct.options; else options=[]; end if ~isfield(options,'oldhandle1') options.oldhandle1=0; end if ~isfield(options,'oldhandle2') options.oldhandle2=0; end if ~isfield(options,'oldhandle3') options.oldhandle3=0; end % schmeisse die physikalisch nicht sinnvollen Bereiche raus! % current_frame=extractpitchregion(current_frame); scale_summe=getscalesumme(current_frame); % start plotting: % clf; axis off caxes=get(gca,'position'); channel_density=0.015; % passt für 76 channels von 100 bis 6000 % channel_density=2*0.015; % passt für 76 channels von 100 bis 6000 hoehe=getnrchannels(current_frame)*channel_density; if hoehe>1 hoehe=1; end if hoehe < 0.2 hoehe = 0.2; end rect=[-0.04 0.15 0.9 hoehe*0.85]; rect(1:2)=caxes(1:2)+(rect(1:2).*caxes(3:4)); rect(3:4)=rect(3:4).*caxes(3:4); hint=1; % this indicate that we dont want a title mysubplot(1,1,1,rect, hint); if options.oldhandle1~=0 delete(options.oldhandle1); end options.oldhandle1=gca; 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; plot_struct.has_y_axis=0; axis off plot(current_frame,plot_struct); set(gca,'zlim',[0 1/plot_scale]); if show_time srate=getsr(current_frame); text_x=0.8*maximum_time_interval*srate/1000; text_y=getnrchannels(current_frame)*1.1; frame_number=getcurrentframenumber(current_frame); frame_time=getcurrentframestarttime(current_frame); text(text_x,text_y,sprintf('%3d : %4.0fms',frame_number,frame_time*1000),'FontSize',8); % text(text_x,text_y,sprintf('%d',frame_number),'FontSize',8); end % interval sum rect=[-0.04 0 0.9 0.2]; rect(1:2)=caxes(1:2)+(rect(1:2).*caxes(3:4)); rect(3:4)=rect(3:4).*caxes(3:4); mysubplot(1,1,1,rect, hint); if options.oldhandle2~=0 delete(options.oldhandle2); end options.oldhandle2=gca; summe=getsum(current_frame); % here it is calculated axis off srate=getsr(current_frame); if is_log t=minimum_time_interval; if t<=0 error('in logarithmic plots, the minimum time interval must be positiv!'); end 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; if getminimumtime(summe) <0 psumme=getpart(summe,getminimumtime(summe),0); else psumme=getpart(summe,getminimumtime(summe),maximum_time_interval/1000); end % rsumme=reverse(psumme); rsumme=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! frame_start_time=getminimumtime(current_frame); if maximum_time_interval>0 summe=getpart(summe,(minimum_time_interval/1000+frame_start_time),maximum_time_interval/1000+frame_start_time); else summe=getpart(summe,(-maximum_time_interval/1000+frame_start_time),-minimum_time_interval/1000+frame_start_time); end nr_labels=8; 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)); sumvalues=getvalues(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); hold on if scale_summe==0 axis([min_x_screen max_x_screen 0 1]); else axis([min_x_screen max_x_screen 0 scale_summe/time_profile_scale]); end % 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 time_reversed ti=ti(end:-1:1); end set(gca,'XTick',tix); set(gca,'XTickLabel',ti); set(gca,'YTickLabel',[]); % if is_log text(max_x_screen*0.5,-scale_summe/5,'time interval (ms)'); % this is at a nice position else text(500,-scale_summe/5,'time interval (ms)'); % this is at a nice position end % frequency sum scale_frequency=getscalefrequency(current_frame); hoehe=getnrchannels(current_frame)*channel_density; if hoehe>1 hoehe=1; end rect=[0.856 0.19 0.1 hoehe*0.81]; rect(1:2)=caxes(1:2)+(rect(1:2).*caxes(3:4)); rect(3:4)=rect(3:4).*caxes(3:4); mysubplot(1,1,1,rect, hint); if options.oldhandle3~=0 delete(options.oldhandle3); end options.oldhandle3=gca; fresumme=getfrequencysum(current_frame); % here it is calculated % fresumme=smooth(fresumme,1);% glätte die Summe % fresumme=fresumme/frequency_profile_scale; fresumme=setname(fresumme,''); fresumme=setunit_x(fresumme,''); fresumme=setunit_y(fresumme,''); plot(fresumme,'r'); hold on v=getvalues(fresumme); axis([0 size(v,1)*47/42 0 scale_frequency/frequency_profile_scale]); view(-90,90); % make y-Ticks nr_labels=8; nr_channels=getnrpoints(fresumme); xstep=(nr_channels-1)/(nr_labels-1); tix=1:xstep:nr_channels; cfs=getcf(current_frame); ti=cfs(floor(tix))/1000; ti=round(ti*10)/10; set(gca,'XTick',tix); set(gca,'XTickLabel',ti); set(gca,'YTickLabel',[]); set(gca,'XAxisLocation','top');