Skip to content
Snippets Groups Projects
Commit 6553b9ec authored by marwan's avatar marwan
Browse files

automatic detection:

* of provided time-scale
* if multi-column input can be used as phase-space vector
parent 94055014
No related branches found
No related tags found
No related merge requests found
......@@ -71,16 +71,16 @@ function xout=crqa(varargin)
% Parameters not needed to be specified.
%
% Output:
% Y(:,1)=RR (recurrence rate)
% Y(:,2)=DET (determinism)
% Y(:,3)=<L> (mean diagonal line length)
% Y(:,4)=Lmax (maximal diagonal line length)
% Y(:,5)=ENTR (entropy of the diagonal line lengths)
% Y(:,6)=LAM (laminarity)
% Y(:,7)=TT (trapping time)
% Y(:,8)=Vmax (maximal vertical line length)
% Y(:,9)=T1 (recurrence time of 1st type)
% Y(:,10)=T2 (recurrence time of 2nd type)
% Y(:, 1) = RR (recurrence rate)
% Y(:, 2) = DET (determinism)
% Y(:, 3) = <L> (mean diagonal line length)
% Y(:, 4) = Lmax (maximal diagonal line length)
% Y(:, 5) = ENTR (entropy of the diagonal line lengths)
% Y(:, 6) = LAM (laminarity)
% Y(:, 7) = TT (trapping time)
% Y(:, 8) = Vmax (maximal vertical line length)
% Y(:, 9) = T1 (recurrence time of 1st type)
% Y(:,10) = T2 (recurrence time of 2nd type)
%
% Warning:
% The RQA measures may differ from those of the RQA programmes by
......@@ -90,17 +90,17 @@ function xout=crqa(varargin)
% with the maximal phase space diameter, which can be estimated
% with the programme PSS:
%
% RQA=crqa(100*x/pss(x,dim,lag,'euclidean'),...
% RQA = crqa(100*x/pss(x,dim,lag,'euclidean'),...
% dim,lag,e,[],[],l_min,v_min,1,...
% 'euclidean','nonormalize','silent')
%
% Examples: a=randn(300,1);
% Examples: a = randn(300,1);
% crqa(a,1,1,.2,40,2,'euc')
%
% N=500; w=40; ws=2;
% a=3.4:.6/(N-1):4;
% b=.5; for i=2:N, b(i)=a(i)*b(i-1)*(1-b(i-1));end
% y=crqa(b,3,2,.1,w,ws);
% N = 500; w = 40; ws = 2;
% a = 3.4:.6/(N-1):4;
% b = .5; for i = 2:N, b(i) = a(i)*b(i-1)*(1-b(i-1)); end
% y = crqa(b,3,2,.1,w,ws);
% subplot(2,1,1), plot(a,b,'.','markersize',.1)
% title('logistic map'), axis([3.4 4 0 1])
% subplot(2,1,2), plot(a(1:ws:N-w),y(1:ws:N-w,1))
......@@ -135,6 +135,9 @@ function xout=crqa(varargin)
% $Revision$
%
% $Log$
% Revision 5.9 2004/12/23 07:49:03 marwan
% bug in order patterns RP fixed (empty order patterns)
%
% Revision 5.8 2004/11/15 12:56:01 marwan
% bug fix in method checking
%
......@@ -167,6 +170,8 @@ vmin=2;
nonorm=1;
theiler_window=1;
hw=-1;
xscale = [];
yscale = [];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% check the input
......@@ -189,11 +194,11 @@ errcode=1;
i_char=find(cellfun('isclass',varargin,'char'));
t=1;
w=[];wstep=0; method='max'; method_n=1;
embed_flag=1;
time_scale_flag=1; time_scale_flag_x=1;
nogui=0;
check_meth={'ma','eu','mi','nr','fa','in','om','op','di'}; % maxnorm, euclidean, nrmnorm, fan, distance
check_gui={'gui','nog','sil'}; % gui, nogui, silent
check_norm={'non','nor'}; % nonormalize, normalize
check_meth={'ma','eu','mi','nr','fa','in','om','op','di'}; % maxnorm, euclidean, nrmnorm, fan, distance
check_gui={'gui','nog','sil'}; % gui, nogui, silent
check_norm={'non','nor'}; % nonormalize, normalize
if nargin & ischar(varargin{1})
set(0,'ShowHidden','on');h=findobj('Tag','Msgbox_Check Input');delete(h)
......@@ -201,6 +206,10 @@ errcode=1;
h=findobj('Tag','crqa_Fig');
temp=get(h(1),'UserData');
x=temp{1}; y=temp{2};
h=findobj('Tag','crqa_axes_Data','Parent',h(1)); % get handle of plot-axes object
h_crqa_axes_Data = h(1);
h=findobj('Type','line','Parent',h(1)); % get handle of line-object
xscale=get(h(1),'xdata');
h=findobj('Tag','crqa_m');
m=str2num(get(h(1),'String'));
h=findobj('Tag','crqa_maxLag');
......@@ -221,7 +230,7 @@ errcode=1;
w=str2num(get(h(1),'String'));
h=findobj('Tag','crqa_ws');
wstep=str2num(get(h(1),'String'));
elseif nargin & isnumeric(varargin{1})
% check the text input parameters for method, gui
......@@ -263,13 +272,13 @@ errcode=1;
% get the parameters for creating RP
if max(size(varargin{1}))<=3
disp('Error using ==> crqa')
disp('To less values in data X.')
return
disp('To less values in data X.')
return
end
x=double(varargin{1});
if isempty(varargin{2}) | ~isnumeric(varargin{2}), y=x; else
y=double(varargin{2}); end
% if sum(double(diff(x(:,1))<=0)), embed_flag=0; end
% if sum(double(diff(x(:,1))<=0)), time_scale_flag=0; end
if (isnumeric(varargin{2}) & max(size(varargin{2}))==1) | ~isnumeric(varargin{2})
y=x;
......@@ -304,94 +313,129 @@ errcode=1;
if size(x,2)>=2
xscale=x(:,1);
if ~isempty(find(diff(xscale)<0)), embed_flag=0; end
if ~isempty(find(diff(xscale)<0)) % multi-column data vector, each column used as vector component
time_scale_flag=0;
time_scale_flag_x=0;
xscale=(1:length(x))';
end
else
xscale=(1:length(x))';
time_scale_flag=0;
time_scale_flag_x=0;
end
if size(y,2)>=2
yscale=y(:,1);
if ~isempty(find(diff(yscale)<0)), embed_flag=0; end
time_scale_flag=1;
if ~isempty(find(diff(yscale)<0))
time_scale_flag=0;
yscale=(1:length(y))';
end
if time_scale_flag && ~time_scale_flag_x % if time-scale given in y, but not in x -> error
if ~nogui
errordlg(['A time-scale for the second data is series given, but not for the first!',10,'(The time-scale has to be inlcuded as the first colummn of the first data vector.)'],'Check Data')
waitforbuttonpress
return
else
error(['A time-scale for the second data series is given, but not for the first!',10,'(The time-scale has to be inlcuded as the first colummn of the first data vector.)'])
end
end
else
yscale=(1:length(y))';
time_scale_flag=0;
end
if max(size(x))~=max(size(y)),
if time_scale_flag_x && ~time_scale_flag % if time-scale given in x, but not in y
if length(x) ~= length(y)
if ~nogui
errordlg(['If you are using the time-scale given by the first vector also for',10,'the second vector, both vectors should have the same size!'],'Check Data')
waitforbuttonpress
return
else
error(['If you are using the time-scale given by the first vector also for',10,'the second vector, both vectors should have the same size!'])
end
end
y = [xscale, y];
yscale = xscale;
time_scale_flag=1;
end
if max(size(x))~=max(size(y)),
if ~nogui, errordlg('Data must have the same length.','Check Data'), waitforbuttonpress, else error('Data must have the same length.'), end
end
if e<0,
end
if e<0,
e=1;
if ~nogui
warndlg('The threshold size E can not be negative and is now set to 1.','Check Data')
waitforbuttonpress
h=findobj('Tag','crqa_eps');
if ~isempty(h), set(h(1),'String',num2str(e)), end
if ~nogui
warndlg('The threshold size E can not be negative and is now set to 1.','Check Data')
waitforbuttonpress
h=findobj('Tag','crqa_eps');
if ~isempty(h), set(h(1),'String',num2str(e)), end
else
disp('The threshold size E can not be negative and is now set to 1.'),
disp('The threshold size E can not be negative and is now set to 1.'),
end
end
if t<1,
t=1;
if ~nogui
warndlg('The delay T can not be smaller than one and is now set to 1.','Check Data')
waitforbuttonpress
h=findobj('Tag','crqa_maxLag');
if ~isempty(h), set(h(1),'String',num2str(t)), end
else
disp('The delay T can not be smaller than one and is now set to 1.')
end
if ~nogui
warndlg('The delay T can not be smaller than one and is now set to 1.','Check Data')
waitforbuttonpress
h=findobj('Tag','crqa_maxLag');
if ~isempty(h), set(h(1),'String',num2str(t)), end
else
disp('The delay T can not be smaller than one and is now set to 1.')
end
end
if isempty(w), w=Nx; wstep=1; end
if w < 5+(m-1)*t,
w=5+(m-1)*t;
if ~nogui, warndlg('The window size W exceeds the valid range.','Check Data')
waitforbuttonpress
h=findobj('Tag','crqa_w');
if ~isempty(h), set(h(1),'String',num2str(w)), end
else, disp('The window size W exceeds the valid range.'), end
if ~nogui, warndlg('The window size W exceeds the valid range.','Check Data')
waitforbuttonpress
h=findobj('Tag','crqa_w');
if ~isempty(h), set(h(1),'String',num2str(w)), end
else, disp('The window size W exceeds the valid range.'), end
end
if w>Nx,
w=Nx; wstep=1;;
if ~nogui, warndlg('The window size W exceeds the valid range.','Check Data')
waitforbuttonpress
h=findobj('Tag','crqa_w');
if ~isempty(h), set(h(1),'String',num2str(w)), end
else, disp('The window size W exceeds the valid range.'), end
if ~nogui, warndlg('The window size W exceeds the valid range.','Check Data')
waitforbuttonpress
h=findobj('Tag','crqa_w');
if ~isempty(h), set(h(1),'String',num2str(w)), end
else, disp('The window size W exceeds the valid range.'), end
end
if wstep<1 | wstep>Nx/3,
wstep=2;
if ~nogui, warndlg('The window shifting value WS exceeds the valid range.','Check Data')
waitforbuttonpress
h=findobj('Tag','crqa_ws');
if ~isempty(h), set(h(1),'String',num2str(wstep)), end
else, disp('The window shifting value WS exceeds the valid range.'), end
if ~nogui, warndlg('The window shifting value WS exceeds the valid range.','Check Data')
waitforbuttonpress
h=findobj('Tag','crqa_ws');
if ~isempty(h), set(h(1),'String',num2str(wstep)), end
else, disp('The window shifting value WS exceeds the valid range.'), end
end
if vmin<1 | vmin>Nx,
vmin=2;
if ~nogui, warndlg('The minimal length for vertical lines is not valid.','Check Data')
waitforbuttonpress
h=findobj('Tag','crqa_vmin');
if ~isempty(h), set(h(1),'String',num2str(vmin)), end
else, disp('The minimal length for vertical lines is not valid.'), end
if ~nogui, warndlg('The minimal length for vertical lines is not valid.','Check Data')
waitforbuttonpress
h=findobj('Tag','crqa_vmin');
if ~isempty(h), set(h(1),'String',num2str(vmin)), end
else, disp('The minimal length for vertical lines is not valid.'), end
end
if lmin<1 | lmin>Nx,
lmin=2;
if ~nogui, warndlg('The minimal length for diagonal lines is not valid.','Check Input')
waitforbuttonpress
h=findobj('Tag','crqa_lmin');
if ~isempty(h), set(h(1),'String',num2str(lmin)), end
else, disp('The minimal length for diagonal lines is not valid.'), end
if ~nogui, warndlg('The minimal length for diagonal lines is not valid.','Check Input')
waitforbuttonpress
h=findobj('Tag','crqa_lmin');
if ~isempty(h), set(h(1),'String',num2str(lmin)), end
else, disp('The minimal length for diagonal lines is not valid.'), end
end
if theiler_window<0 | theiler_window>Nx,
theiler_window=1;
if ~nogui, warndlg('The value for the Theiler window is not valid.','Check Input')
waitforbuttonpress
h=findobj('Tag','crqa_theiler');
if ~isempty(h), set(h(1),'String',num2str(theiler_window)), end
else, disp('The value for the Theiler window is not valid.'), end
if ~nogui, warndlg('The value for the Theiler window is not valid.','Check Input')
waitforbuttonpress
h=findobj('Tag','crqa_theiler');
if ~isempty(h), set(h(1),'String',num2str(theiler_window)), end
else, disp('The value for the Theiler window is not valid.'), end
end
if x~=y, theiler_window=0; end
t=round(t); m=round(m); w=round(w); wstep=round(wstep); vmin=round(vmin); lmin=round(lmin); theiler_window=round(theiler_window);
switch(action)
......@@ -406,15 +450,15 @@ case 'init'
scr=get(0,'ScreenSize');
set(0,'Unit',oldunit)
h8=figure(props.window,... % Plot Figure
h8=figure(props.window,... % Plot Figure
'Tag','crqa_Fig',...
'MenuBar','Figure',...
'MenuBar','Figure',...
'Position',[(scr(3)-150)/2 scr(4)-50 150.0000 44],...
'PaperType','a4',...
'PaperPosition',[0.25 0.25 7.7677 11.193],...
'PaperOrientation','portrait',...
'UserData',{x,y},...
'Name','Cross Recurrence Quantification Analysis');
'PaperPosition',[0.25 0.25 7.7677 11.193],...
'PaperOrientation','portrait',...
'UserData',{x,y,time_scale_flag},...
'Name','Cross Recurrence Quantification Analysis');
set(0,'showhidden','on')
h=findobj('Label','&Help','Type','uimenu');
......@@ -439,9 +483,9 @@ case 'init'
set(h,props.logo,'Tag','axes_logo')
h=uicontrol(props.text,...
'Tag','text_logo',...
'String','Uni Potsdam',...
'String','Uni Potsdam',...
'Position',[97+30 24.2143+14.5 22 3.5714]);
h2=textwrap(h,{'© AGNLD','University of Potsdam','1998-2004'});
h2=textwrap(h,{'© AGNLD','University of Potsdam','1998-2005'});
set(h,'String',h2)
......@@ -452,18 +496,28 @@ case 'init'
axes_hoffset = 2.5;
h=axes(props.axes,...
'Tag','crqa_axes_Data',...
'Box','On',...
'Box','On',...
'Position',[11.2017 axes_base+4*(axes_height+axes_hoffset) 28.1785+15 axes_height]);
plot(xscale,x,'color',props.line.Color)
if ~all(x==y) hold on; plot(yscale,y,'r'), end
if time_scale_flag
plot(xscale,x(:,2:end),'color',props.line.Color)
if ~all(x(:)==y(:)) hold on; plot(yscale,y(:,2:end),'r'), end
else
plot(xscale,x(:,1),'color',props.line.Color)
if ~all(x(:)==y(:)) hold on; plot(yscale,y(:,1),'r'), end
end
set(h,'Tag','crqa_axes_Data','color',props.axes.Color)
ylabel('Data')
h=axes(props.axes,...
'Tag','crqa_axes_Var',...
'Box','On',...
'Box','On',...
'Position',[49.8023+15 axes_base+4*(axes_height+axes_hoffset) 28.1785+15 axes_height]);
x_var = winplot(x,w,wstep,2);
if time_scale_flag
x_var = winplot(x(:,2:end),w,wstep,2);
else
x_var = winplot(x(:,1),w,wstep,2);
end
if size(x_var,1) > 2
h2=stairs(xscale(round(x_var(:,1))),x_var(:,2));
set(h2,'color',props.line.Color)
......@@ -471,8 +525,13 @@ case 'init'
cla
text(0.5,0.5,sprintf('%6.4f',x_var(1,2)),'FontWeight','bold','HorizontalAlign','Center')
end
if ~all(x==y)
hold on; y_var = winplot(y,w,wstep,2);
if ~all(x(:)==y(:))
hold on;
if time_scale_flag
y_var = winplot(y(:,2:end),w,wstep,2);
else
y_var = winplot(y(:,1),w,wstep,2);
end
if size(y_var,1) > 2
stairs(yscale(round(y_var(:,1))),y_var(:,2),'r')
h3=axes('Units','Char','Pos',get(h,'Pos'),'XLim',get(h,'XLim'),'YLim',get(h,'YLim'),'YAxisLocation','right','Color','none','Tag','crqa_axes_CoVar','visible','off');
......@@ -488,49 +547,49 @@ case 'init'
h=axes(props.axes,...
'Tag','crqa_axes_RR',...
'Box','On',...
'Box','On',...
'Position',[11.2017 axes_base+3*(axes_height+axes_hoffset) 28.1785+15 axes_height]);
ylabel('RR')
h=axes(props.axes,...
'Tag','crqa_axes_DET',...
'Box','On',...
'Box','On',...
'Position',[49.8023+15 axes_base+3*(axes_height+axes_hoffset) 28.1785+15 axes_height]);
ylabel('DET')
h=axes(props.axes,...
'Tag','crqa_axes_L',...
'Box','On',...
'Box','On',...
'Position',[11.2017 axes_base+2*(axes_height+axes_hoffset) 28.1785+15 axes_height]);
ylabel('L')
h=axes(props.axes,...
'Tag','crqa_axes_ENTR',...
'Box','On',...
'Box','On',...
'Position',[49.8023+15 axes_base+2*(axes_height+axes_hoffset) 28.1785+15 axes_height]);
ylabel('ENTR')
h=axes(props.axes,...
'Tag','crqa_axes_LAM',...
'Box','On',...
'Box','On',...
'Position',[11.2017 axes_base+1*(axes_height+axes_hoffset) 28.1785+15 axes_height]);
ylabel('LAM')
h=axes(props.axes,...
'Tag','crqa_axes_TT',...
'Box','On',...
'Box','On',...
'Position',[49.8023+15 axes_base+1*(axes_height+axes_hoffset) 28.1785+15 axes_height]);
ylabel('TT')
h=axes(props.axes,...
'Tag','crqa_axes_T1',...
'Box','On',...
'Box','On',...
'Position',[11.2017 axes_base+0*(axes_height+axes_hoffset) 28.1785+15 axes_height]);
ylabel('T_1')
h=axes(props.axes,...
'Tag','crqa_axes_T2',...
'Box','On',...
'Box','On',...
'Position',[49.8023+15 axes_base+0*(axes_height+axes_hoffset) 28.1785+15 axes_height]);
ylabel('T_2')
......@@ -542,29 +601,29 @@ case 'init'
h=uicontrol(props.text,...
'Tag','text',...
'Fontangle','italic',...
'String','Embedding parameters',...
'String','Embedding parameters',...
'Position',[87+30 34.2+1.6 16.8333 1.5000]);
h=uicontrol(props.text,...
'Tag','text',...
'String','Dimension:',...
'String','Dimension:',...
'Position',[89+30 32+2.2 16.8333 1.5000]);
h=uicontrol(props.edit,...
'Tag','crqa_m',...
'String',num2str(m),...
'ToolTip','Select the embedding dimension.',...
'String',num2str(m),...
'ToolTip','Select the embedding dimension.',...
'Position',[104+30 32+.2+2.2 7 1.5000]);
h=uicontrol(props.text,...
'Tag','text',...
'String','Delay:',...
'String','Delay:',...
'Position',[89+30 30+2.32 16.8333 1.5000]);
h=uicontrol(props.edit,...
'Tag','crqa_maxLag',...
'String',num2str(t),...
'ToolTip','Insert the embedding delay time.',...
'String',num2str(t),...
'ToolTip','Insert the embedding delay time.',...
'Position',[104+30 30+.2+2.32 7 1.5000]);
%%%%%%%%%%% neigbourhood
......@@ -575,26 +634,26 @@ case 'init'
h=uicontrol(props.text,...
'Tag','text',...
'Fontangle','italic',...
'String','Neighbourhood',...
'String','Neighbourhood',...
'Position',[87+30 26.8+2.5 23 1.5000]);
h=uicontrol(props.popup,...
'Tag','text',...
'Tag','crqa_method',...
'UserData',nonorm,...
'Value',method_n,...
'String','Maximum Norm|Euclidean Norm|Minimum Norm|Normalized Norm|Fixed Amount|Interdependent|Order Matrix|Order Patterns|Distance Plot',...
'UserData',nonorm,...
'Value',method_n,...
'String','Maximum Norm|Euclidean Norm|Minimum Norm|Normalized Norm|Fixed Amount|Interdependent|Order Matrix|Order Patterns|Distance Plot',...
'Position',[89+30 24.6+.2+2.5 22 1.7]);
h=uicontrol(props.text,...
'Tag','text',...
'String','Threshold:',...
'String','Threshold:',...
'Position',[89+30 22.6+2.5 16.8333 1.5]);
h=uicontrol(props.edit,...
'Tag','crqa_eps',...
'String',num2str(e),...
'ToolTip','Insert the size of neighbourhood.',...
'String',num2str(e),...
'ToolTip','Insert the size of neighbourhood.',...
'Position',[104+30 22.6+.2+2.5 7 1.5000]);
%%%%%%%%%%% crqa parameters
......@@ -605,63 +664,63 @@ case 'init'
h=uicontrol(props.text,...
'Tag','text',...
'Fontangle','italic',...
'String','CRQA parameters',...
'String','CRQA parameters',...
'Position',[87+30 19.4+2.5 23 1.5000]);
h=uicontrol(props.text,...
'Tag','text',...
'String','min. Diagonal:',...
'String','min. Diagonal:',...
'Position',[89+30 17.6+2.5 16.8333 1.5]);
h=uicontrol(props.edit,...
'Tag','crqa_lmin',...
'String',num2str(lmin),...
'ToolTip','Insert the minimal length of a diagonal line.',...
'String',num2str(lmin),...
'ToolTip','Insert the minimal length of a diagonal line.',...
'Position',[104+30 17.6+.2+2.5 7 1.5000]);
h=uicontrol(props.text,...
'Tag','text',...
'String','min. Vertical:',...
'String','min. Vertical:',...
'Position',[89+30 15.6+2.5 16.8333 1.5]);
h=uicontrol(props.edit,...
'Tag','crqa_vmin',...
'String',num2str(vmin),...
'ToolTip','Insert the minimal length of a vertical line.',...
'String',num2str(vmin),...
'ToolTip','Insert the minimal length of a vertical line.',...
'Position',[104+30 15.6+.2+2.5 7 1.5000]);
h=uicontrol(props.text,...
'Tag','text',...
'String','Theiler wind.:',...
'String','Theiler wind.:',...
'Position',[89+30 15.6+.5 16.8333 1.5]);
h=uicontrol(props.edit,...
'Tag','crqa_theiler',...
'String',num2str(theiler_window),...
'ToolTip','Insert the size for the Theiler window.',...
'String',num2str(theiler_window),...
'ToolTip','Insert the size for the Theiler window.',...
'Position',[104+30 15.6+.2+.5 7 1.5000]);
if x~=y; set(h,'enable','off'); end
h=uicontrol(props.text,...
'Tag','text',...
'String','Window size:',...
'String','Window size:',...
'Position',[89+30 13.6+.5 16.8333 1.5]);
h=uicontrol(props.edit,...
'Tag','crqa_w',...
'String',num2str(w),...
'ToolTip','Insert the size of the sliding window.',...
'String',num2str(w),...
'ToolTip','Insert the size of the sliding window.',...
'Position',[104+30 13.6+.2+.5 7 1.5000]);
h=uicontrol(props.text,...
'Tag','text',...
'String','Window step:',...
'String','Window step:',...
'Position',[89+30 11.6+.5 16.8333 1.5]);
h=uicontrol(props.edit,...
'Tag','crqa_ws',...
'String',num2str(wstep),...
'ToolTip','Insert the step width for sliding the window.',...
'String',num2str(wstep),...
'ToolTip','Insert the step width for sliding the window.',...
'Position',[104+30 11.6+.2+.5 7 1.5000]);
......@@ -673,33 +732,33 @@ case 'init'
h=uicontrol(props.button,...
'String','Store',...
'Tag','crqa_button_store',...
'Enable','Off',...
'ToolTip','Stores the CRQA analysis into a variable in the workspace.',...
'Callback','crqa store',...
'Position',[100.5+30 7.4+.5 10.5 2.2143]);
'String','Store',...
'Tag','crqa_button_store',...
'Enable','Off',...
'ToolTip','Stores the CRQA analysis into a variable in the workspace.',...
'Callback','crqa store',...
'Position',[100.5+30 7.4+.5 10.5 2.2143]);
h=uicontrol(props.button,...
'Tag','crqa_button_print',...
'CallBack','crqa print',...
'ToolTip','Prints the CRQA window.',...
'String','Print',...
'CallBack','crqa print',...
'ToolTip','Prints the CRQA window.',...
'String','Print',...
'Position',[89+30 7.4+.5 10.5 2.2143]);
h=uicontrol(props.button,...
'Tag','crqa_button_close',...
'CallBack','crqa close',...
'ToolTip','Closes the CRQA window.',...
'String','Close',...
'CallBack','crqa close',...
'ToolTip','Closes the CRQA window.',...
'String','Close',...
'Position',[89+30 2.1+.5 22 2.2143]);
h=uicontrol(props.button,...
'String','Apply',...
'Tag','crqa_button_apply',...
'ToolTip','Starts the computation.',...
'Callback','crqa compute',...
'Position',[89+30 4.75+.5 22 2.2143]);
'String','Apply',...
'Tag','crqa_button_apply',...
'ToolTip','Starts the computation.',...
'Callback','crqa compute',...
'Position',[89+30 4.75+.5 22 2.2143]);
set(0,'ShowHidden','on')
set(h8, 'HandleVis','CallBack')
......@@ -734,7 +793,7 @@ case 'store'
crqa_values=get(h(1),'UserData');
assignin('base',vname, [crqa_values])
warndlg(['CRQA measures have been assigned to the workspace variable ''',vname,'''.'],'Store output');
waitforbuttonpress
waitforbuttonpress
set(h1(1),'UserData',vname)
end
end
......@@ -825,15 +884,24 @@ for i=1:wstep:Nx-w;
end
end
do_norm = {'non';'nor'};
try
% X=crp_big(x(i:i+w-1,:),y(i:i+w-1,:),m,t,e,'fan','silent');
if 0 %embed_flag
X=crp_big(x(i:i+w-1,:),y(i:i+w-1,:),m,t,e,method,'silent',check_norm{nonorm+1});
if time_scale_flag
X=crp_big(x(i:i+w-1,:),y(i:i+w-1,:),m,t,e,method,do_norm{nonorm+1},'silent',varargin{i_char});
else
X=crp2(x(i:i+w-1,:),y(i:i+w-1,:),m,t,e,method,'silent',varargin{i_char});
X=crp2(x(i:i+w-1,:),y(i:i+w-1,:),m,t,e,method,do_norm{nonorm+1},'silent',varargin{i_char});
end
% X=crp(x(i:i+w-1,:),y(i:i+w-1,:),m,t,e,varargin{i_char},'silent');
x_var=var(x(i:i+w-1,:)); y_var=var(y(i:i+w-1,:)); temp=cov(x(i:i+w-1,:),y(i:i+w-1,:)); xy_var=temp(1,2);
if time_scale_flag
x_var=var(x(i:i+w-1,2:end)); y_var=var(y(i:i+w-1,2:end));
temp=cov(x(i:i+w-1,2:end),y(i:i+w-1,2:end));
else
x_var=var(x(i:i+w-1,1)); y_var=var(y(i:i+w-1,1));
temp=cov(x(i:i+w-1,1),y(i:i+w-1,1));
end
xy_var=temp(1,2);
warning off
if nogui~=2 & ishandle(h1), set(h1,'str',[num2str(i),'/',num2str(Nx-w)]); waitbar(i/(Nx-w)); drawnow, end
......@@ -944,34 +1012,34 @@ if ~nogui
h=findobj('Tag','crqa_axes_T1','Parent',gcf); h_axes.h(7)=h(1);
h=findobj('Tag','crqa_axes_T2','Parent',gcf); h_axes.h(8)=h(1);
h=findobj('Tag','crqa_axes_Var','Parent',gcf); h_axes.h(9)=h(1);
% if ~all(x==y), h=findobj('Tag','crqa_axes_CoVar','Parent',gcf); h_axes.h(10)=h(1); end
if ~all(x(:)==y(:)), h=findobj('Tag','crqa_axes_CoVar','Parent',gcf); h_axes.h(10)=h(1); end
for i=1:9,
set(gcf,'CurrentAxes',h_axes.h(i))
if size(Y,1)==1
cla
text(0.5,0.5,sprintf('%6.4f',Y(index(i))),'FontWeight','bold','HorizontalAlign','Center')
% if ~all(x==y) & i==9
% if ~all(x(:)==y(:)) & i==9
% cla
% text(0.5,0.5,sprintf('%6.5f, %6.5f',Y(index(i)),Y(index(i+1))),'FontWeight','bold','HorizontalAlign','Center')
% set(gcf,'CurrentAxes',h_axes.h(i+1));cla
% text(0.5,0.5,sprintf('%6.5f, %6.5f',Y(index(i)),Y(index(i+1))),'FontWeight','bold','HorizontalAlign','Center')
% set(gcf,'CurrentAxes',h_axes.h(i+1));cla
% set(h_axes.h(i+1),'visible','off');
% end
else
if i==9
cla
h2=stairs(1:wstep:length(Y),Y(1:wstep:end,index(i)));
set(h2,'color',props.line.Color)
if ~all(x==y)
set(gca,'Color','none')
hold on; h2=stairs(1:wstep:length(Y),Y(1:wstep:end,index(10)),'r');
h2=stairs(xscale(1:wstep:length(Y)),Y(1:wstep:end,index(i)));
set(h2,'color',props.line.Color)
if ~all(x(:)==y(:))
set(gca,'Color','none')
hold on; h2=stairs(xscale(1:wstep:length(Y)),Y(1:wstep:end,index(10)),'r');
set(gcf,'CurrentAxes',h_axes.h(i+1));cla
set(h_axes.h(10),'visible','on');
h3=stairs(1:wstep:length(Y),Y(1:wstep:end,index(11))); set(h3,'color',[0 .4 0]);
h3=stairs(xscale(1:wstep:length(Y)),Y(1:wstep:end,index(11))); set(h3,'color',[0 .4 0]);
ylabel(tx(i+1));
set(h_axes.h(i+1),'Tag',tags{i+1},'Units','Norm','Color','none','YAxisLocation','right','YColor',[0 .4 0])
end
else
plot(1:wstep:length(Y),Y(1:wstep:end,index(i)),'color',props.line.Color)
plot(xscale(1:wstep:length(Y)),Y(1:wstep:end,index(i)),'color',props.line.Color)
end
end
set(gcf,'CurrentAxes',h_axes.h(i));
......@@ -980,6 +1048,8 @@ if ~nogui
end
h=findobj('Tag','crqa_button_store');
set(h(1),'UserData',Y,'Enable','On')
xlim = get(h_axes.h(9),'xlim');
set(h_crqa_axes_Data,'xlim',xlim)
else
if nargout, xout=Y(:,1:10); end
end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment