annotate RQA.m @ 2:def2b3fa1450 tip master

corrected README
author Gerard Roma <gerard.roma@upf.edu>
date Mon, 04 Nov 2013 10:46:05 +0000
parents 96b1b8697b60
children
rev   line source
gerard@1 1 % Copyright 2013 MUSIC TECHNOLOGY GROUP, UNIVERSITAT POMPEU FABRA
gerard@1 2 %
gerard@1 3 % Written by Gerard Roma <gerard.roma@upf.edu>
gerard@1 4 %
gerard@1 5 % This program is free software: you can redistribute it and/or modify
gerard@1 6 % it under the terms of the GNU Affero General Public License as published by
gerard@1 7 % the Free Software Foundation, either version 3 of the License, or
gerard@1 8 % (at your option) any later version.
gerard@1 9 %
gerard@1 10 % This program is distributed in the hope that it will be useful,
gerard@1 11 % but WITHOUT ANY WARRANTY; without even the implied warranty of
gerard@1 12 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
gerard@1 13 % GNU Affero General Public License for more details.
gerard@1 14 %
gerard@1 15 % You should have received a copy of the GNU Affero General Public License
gerard@1 16 % along with this program. If not, see <http://www.gnu.org/licenses/>.
gerard@1 17
gerard@1 18 function [ftr] = RQA(D, lmin,vmin)
gerard@1 19 N = max(size(D));
gerard@1 20 pts = sum(D(:));
gerard@1 21
gerard@1 22 det = 0;
gerard@1 23 diags=[];
gerard@1 24 for i = 1:N-1
gerard@1 25 line = [0;diag(D,i);0];
gerard@1 26 starts=find(diff(line)==1); % line starts
gerard@1 27 ends=find(diff(line)==-1); % line ends
gerard@1 28 diags = [diags; ends-starts];
gerard@1 29 end
gerard@1 30
gerard@1 31 verts = [];
gerard@1 32 intervals = [];
gerard@1 33 for i = 1:N
gerard@1 34 line = [0;D(:,i);0];
gerard@1 35 starts=find(diff(line)==1); % line starts
gerard@1 36 ends=find(diff(line)==-1); % line ends
gerard@1 37 verts = [verts;ends-starts];
gerard@1 38 end
gerard@1 39
gerard@1 40 rr = pts/N^2; % recurrence rate
gerard@1 41 det = sum(diags(diags>=lmin))/pts; % determinism
gerard@1 42 adll = mean(diags(diags>=lmin)); % average diagonal line length
gerard@1 43 sddll = std(diags(diags>=lmin)); % standard deviation
gerard@1 44
gerard@1 45 dratio = N^2 * sum(diags(diags>=lmin))/(pts^2);
gerard@1 46
gerard@1 47 lam = sum(verts(verts>=vmin))/pts; % laminarity
gerard@1 48 tt = mean(verts(verts>=vmin)); % trappnig time
gerard@1 49 sdvll = std(verts(verts>=lmin)); % standard deviation
gerard@1 50 if(isnan(tt))
gerard@1 51 tt = 0;
gerard@1 52 end
gerard@1 53
gerard@1 54 vratio = N^2 * sum(verts(verts>=vmin))/(pts^2); % ratio
gerard@1 55
gerard@1 56 lmax = max(1,max(diags)); % maximum diagonal line length
gerard@1 57 vmax = max(1,max(verts)); % maximum vertical line length
gerard@1 58
gerard@1 59 if(isempty(lmax))
gerard@1 60 lmax = 1;
gerard@1 61 end
gerard@1 62
gerard@1 63
gerard@1 64 if(isempty(vmax))
gerard@1 65 vmax = 1;
gerard@1 66 end
gerard@1 67
gerard@1 68 ddiv = 1/lmax; % divergence
gerard@1 69 vdiv = 1/vmax;
gerard@1 70
gerard@1 71 diagsH = hist(diags,max(diags));
gerard@1 72 diagsH = diagsH/sum(diagsH);
gerard@1 73 z = find(diagsH==0);
gerard@1 74 temp = diagsH.*log(diagsH);
gerard@1 75 temp(z)=0; % remove NaNs from zero prob
gerard@1 76 dentropy = sum(temp); % shannon entropy (diagonal)
gerard@1 77
gerard@1 78
gerard@1 79 vertsH = hist(verts,max(verts));
gerard@1 80 vertsH = vertsH/sum(vertsH);
gerard@1 81 z = find(vertsH==0);
gerard@1 82 temp = vertsH.*log(vertsH);
gerard@1 83 temp(z)=0; % remove NaNs from zero prob
gerard@1 84 ventropy = sum(temp); % shannon entropy (vertical)
gerard@1 85
gerard@1 86 ftr = [rr,det,adll,lam,tt,dratio,ddiv,dentropy,vratio,ventropy,vdiv];
gerard@1 87 end