rmeddis@0: function [cv, cvTimes, allTimeStamps, allISIs]= UTIL_CV(earObject, dt, timeStep) rmeddis@0: % UTIL_CV computes coefficient of variation for multiple spike trains rmeddis@0: % earObject must be logical 0/1. Each row is a separate run rmeddis@0: % CV is computed for successive time regions specified by timeStep rmeddis@0: rmeddis@0: if ~islogical(earObject),error('UTIL_CV: input is not logical/ spikes'), end rmeddis@0: rmeddis@0: [rows cols]=size(earObject); rmeddis@0: totalDuration=cols*dt; rmeddis@0: rmeddis@0: if nargin<3, timeStep=totalDuration/5; end rmeddis@0: rmeddis@0: % identify all intervals rmeddis@0: allISIs=[]; allTimeStamps=[]; rmeddis@0: for i=1:rows rmeddis@0: temp=find(earObject(i,:))*dt; % find spikes rmeddis@0: isi{i}=diff(temp); % find ISIs rmeddis@0: timeStamps{i}=temp(2:end); % time of isi is time of second spike rmeddis@0: allISIs=[allISIs isi{i}]; rmeddis@0: allTimeStamps=[allTimeStamps timeStamps{i}]; rmeddis@0: end rmeddis@0: rmeddis@0: count=0; rmeddis@0: cvTimes=0: timeStep:totalDuration-timeStep; % bin edges rmeddis@0: for t= cvTimes rmeddis@0: % sort ISIs according to when they happened rmeddis@0: idx=find(allTimeStamps>t & allTimeStamps<=t+timeStep); rmeddis@0: count=count+1; rmeddis@0: if ~isempty(allISIs(idx)) rmeddis@0: cv(count)=std(allISIs(idx))/mean(allISIs(idx)); rmeddis@0: else rmeddis@0: cv(count)=0; rmeddis@0: end rmeddis@0: end rmeddis@0: