view aim-mat/tools/@signal/getchange.m @ 3:20ada0af3d7d

various bugfixes and changed copywrite message
author Stefan Bleeck <bleeck@gmail.com>
date Tue, 16 Aug 2011 14:36:30 +0100
parents 74dedb26614d
children
line wrap: on
line source
% This external file is included as part of the 'aim-mat' distribution package
% (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 str=getchange(sig,start1,stop1,start2,stop2,grafix)
% returns some information how the signal changes in the time at start1 and
% stop1 in reference to start2 and stop2
% this is used to define onset and offset effects of psths
% sig=signal
% start1= start of the part of the signal that has the effect
% stop1= stop of the part of the signal that has the effect
% start2= start of the part of the signal that is used as reference
% stop2= stop of the part of the signal that is used as reference

if nargin<6
    grafix=0;
end

referencesig=getpart(sig,start2,stop2);
meanreference=mean(getvalues(referencesig));
% variability=std(getvalues(referencesig));

searchsig=getpart(sig,start1,stop1);
meansearchsig=mean(getvalues(searchsig));

if meanreference~=0
    str.ampeffect=meansearchsig/meanreference;
else
    str.ampeffect=0;
end

str.ampeffectstr=getsignificantstring(getvalues(searchsig),meanreference);

if grafix==1
%      oldgraph=gcf;
%     figure(234234098)
%     clf
    hold on
%     set(gcf,'num','off')
%     set(gcf,'name','changes in signal');
    fill(sig,'b');
    fill(referencesig,'r')
    fill(searchsig,'g')
    
    
    x0=getminimumtime(sig)*1000;
    x1=getmaximumtime(sig)*1000;
    line([x0 x1],[meanreference meanreference],'color','r')
    line([x0 x1],[meansearchsig meansearchsig],'color','g')
    set(gca,'xlim',[x0 x1]);
%     set(gca,'ylim',[0 max(sig)*1.3]);
    set(gca,'ylim',[min(0,min(sig)*1.3) max(sig)*1.3]);
    x=(getmaximumtime(sig)*1000-getminimumtime(sig)*1000)/2;
    x=(stop1*1000-start1*1000)/2;
    y=max(sig);
    text(x,y,sprintf('effect: %3.2f (%s)',str.ampeffect*100,str.ampeffectstr),'vert','botto','hor','left')
    legend('Signal','reference','interesting bit');
%     text(x,y,,'vert','top','hor','left')
%     figure(oldgraph);
end

function sigstr=getsignificantstring(vals1,meanvals)
cv=ver('stats');
if length(cv)==0
    sigstr='no stats box';
return
end
if sum(vals1)>0
    if ttest(vals1,meanvals,0.001,1)
        sigstr='*** more';
    elseif ttest(vals1,meanvals,0.01,1)
        sigstr='** more';
    elseif ttest(vals1,meanvals,0.05,1)
        sigstr='* more';
    elseif ttest(vals1,meanvals,0.001,-1)
        sigstr='*** less';
    elseif ttest(vals1,meanvals,0.01,-1)
        sigstr='** less';
    elseif ttest(vals1,meanvals,0.05,-1)
        sigstr='* less';
    else
        sigstr='not significant';
    end
else
    sigstr='cant determine';
end