У меня есть два набора данных, которые содержат данные поезда с шипами временного ряда (набор 625 стимулов).Мне нужно решение, чтобы найти среднее из этих двух наборов данных и интегрировать его в мой код Matlab, чтобы найти меру расстояния Ван Россума и Виктора Парпуры.
Я использовал метод csvread, чтобы прочитать набор данных, и использовал mean (), чтобы найти среднее значение и построить его.
%spike distance estimates
%make two trains
dt = .001;
tmax = 1;
t = 0:dt:tmax;
i = 1:length(t);
prob1 = .01;
prob2 = .01;b
m = csvread(ltd);
ltp = 'LTP1.csv';
n = csvread(ltp);
SpikeType = 9 ;
switch(SpikeType)
case 1
%two poisson trains
spiketrain1 = rand(size(t))<prob1;
spiketrain2 = rand(size(t))<prob2;
case 2
%identical trains
spiketrain1 = (mod(i,100)==0 );
spiketrain2 = spiketrain1;
case 3
%offset trains
spiketrain1 = (mod(i,100)==0 );
spiketrain2 = (mod(i+5,100)==0 );
case 4
%one extra spike trains
spiketrain1 = (mod(i,100)==0 );
spiketrain2 = spiketrain1;
spiketrain2(250)=1;
case 5
%one missing spike trains
spiketrain1 = (mod(i,100)==0 );
spiketrain2 = spiketrain1;
spiketrain2(200)=0;
case 6
%one moved spike trains
spiketrain1 = (mod(i,100)==0 );
spiketrain2 = spiketrain1;
spiketrain2(200)=0;
spiketrain2(250)=1;
case 7
%dithered spike trains
spiketrain1 = mod(i,150)==0 ;
spiketrain2 = spiketrain1;
iSpike2 = find(spiketrain2>0.5);
iSpike2 = iSpike2 + fix(30*randn(size(iSpike2)));
spiketrain2 = spiketrain2 * 0;
spiketrain2(iSpike2) = 1;
case 8
%dithered spike trains with one missing
spiketrain1 = mod(i,150)==0 ;
spiketrain2 = spiketrain1;
spiketrain2(300) = 0;
iSpike2 = find(spiketrain2>0.5);
iSpike2 = iSpike2 + fix(30*randn(size(iSpike2)));
spiketrain2 = spiketrain2 * 0;
spiketrain2(iSpike2) = 1;
case 9
%average dataset spiketrain
%st1 = mean(m);
%st2 = mean(n);
spiketrain1 = mean(m);
spiketrain2 = mean(n);
end
%compute times of spikes
tSpike1 = t(spiketrain1>0.5);
tSpike2 = t(spiketrain2>0.5);
%and plot the spikes
figure(1)
clf
pn=2;
subplot(pn,1,1)
plot(t,spiketrain1)
hold on
plot(t,spiketrain2-0.9,'r')
xlabel('Time (sec)');
%Compute the distances at different time scales
for s=1:18
TimeScale(s) = .001 * 1.5^(s-1);
%calc J.Victor distance
cost = 1/TimeScale(s) ; %per Sec
dVictor(s) = spkd(tSpike1,tSpike2,cost) ;
%calc vanRossum dist
%make dt depend on timescale
tc = TimeScale(s) ; % Sec
dt = tc/100 ;
tk = 0:dt:2.5*tc;
t = 0:dt:tmax;
spiketrain1 = zeros(size(t));
spiketrain2 = zeros(size(t));
spiketrain1(fix(tSpike1/dt)) = 1;
spiketrain2(fix(tSpike2/dt)) = 1;
ekernel = exp(-tk/tc);
cSpike1 = conv(ekernel,spiketrain1);
cSpike2 = conv(ekernel,spiketrain2);
dRossum(s) = 2*dt/tc * sum((cSpike1-cSpike2).^2) ;
end
subplot(pn,1,2)
semilogx(TimeScale,dVictor)
hold on
semilogx(TimeScale,dRossum,'r')
xlabel('Time scale (sec)')
ylabel('Distance')
legend('Victor Dist','Rossum Dist')
function d=spkd(tli,tlj,cost)
%
% d=spkd(tli,tlj,cost) calculates the "spike time" distance
% (Victor & Purpura 1996) for a single cost
%
% tli: vector of spike times for first spike train
% tlj: vector of spike times for second spike train
% cost: cost per unit time to move a spike
%
% Copyright (c) 1999 by Daniel Reich and Jonathan Victor.
% Translated to Matlab by Daniel Reich from FORTRAN code by Jonathan Victor.
%
nspi=length(tli);
nspj=length(tlj);
if cost==0
d=abs(nspi-nspj);
return
elseif cost==Inf
d=nspi+nspj;
return
end
scr=zeros(nspi+1,nspj+1);
%
% INITIALIZE MARGINS WITH COST OF ADDING A SPIKE
%
scr(:,1)=(0:nspi)';
scr(1,:)=(0:nspj);
if nspi && nspj
for i=2:nspi+1
for j=2:nspj+1
scr(i,j)=min([scr(i-1,j)+1 scr(i,j-1)+1 scr(i-1,j-1)+cost*abs(tli(i-1)-tlj(j-1))]);
end
end
end
d=scr(nspi+1,nspj+1);
Ожидаемый результат: Расчет расстояния Ван Россума и Виктора Парпуры. Измерение и построение графика.Фактический результат: отображается ошибка, указывающая, что векторы имеют разную длину.