Вычислите график и график расстояний Ван Россума и Виктора Парпуры с использованием двух наборов данных, содержащих данные поезда с шипами временного ряда - PullRequest
0 голосов
/ 07 апреля 2019

У меня есть два набора данных, которые содержат данные поезда с шипами временного ряда (набор 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);

Ожидаемый результат: Расчет расстояния Ван Россума и Виктора Парпуры. Измерение и построение графика.Фактический результат: отображается ошибка, указывающая, что векторы имеют разную длину.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...