A spiking model of cortical broadcast and competition (Shanahan 2008)

 Download zip file 
Help downloading and running models
"This paper presents a computer model of cortical broadcast and competition based on spiking neurons and inspired by the hypothesis of a global neuronal workspace underlying conscious information processing in the human brain. In the model, the hypothesised workspace is realised by a collection of recurrently interconnected regions capable of sustaining and disseminating a reverberating spatial pattern of activation. ..."
1 . Shanahan M (2008) A spiking neuron model of cortical broadcast and competition. Conscious Cogn 17:288-303 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network; Neuron or other electrically excitable cell;
Brain Region(s)/Organism: Neocortex;
Cell Type(s):
Gap Junctions:
Simulation Environment: MATLAB;
Model Concept(s): Temporal Pattern Generation; Spatio-temporal Activity Patterns; Simplified Models; Working memory;
Implementer(s): Shanahan, Murray [m.shanahan at imperial.ac.uk];
function layer = update(layer,i,t,Dmax)
% Update membrane potential v and reset rate u for neurons in layer i
% using Izhikevich's neuron model
tau = 0.2; % Simulation time increment
% Calculate current from incoming spikes
for j=1:length(layer)
   S = layer{i}.S{j};
   if ~isempty(S)
      firings = layer{j}.firings;
      if ~isempty(firings)
         % Find incoming spikes (taking account of propagation delays)
         delay = layer{i}.delay{j};
         F = layer{i}.factor{j};
         % Sum current from incoming spikes
         k = size(firings,1);
         while (k>0 && firings(k,1)>t-Dmax)
            spikes = (delay(:,firings(k,2))==t-firings(k,1));   
            layer{i}.I(spikes) = layer{i}.I(spikes)+S(spikes,firings(k,2))*F;
            k = k-1;
         % Don't let I go below zero
         layer{i}.I = layer{i}.I.*(layer{i}.I > 0);
% Update v and u using Izhikevich's model in increments of tau
for k=1:1/tau
   v = layer{i}.v;
   u = layer{i}.u;
   layer{i}.v = v+(tau*(0.04*v.^2+5*v+140-u+layer{i}.I));
   layer{i}.u = u+(tau*(layer{i}.a.*(layer{i}.b.*layer{i}.v-u)));
   % Reset neurons that have spiked
   fired = find(layer{i}.v>=30); % indices of spikes
   if ~isempty(fired)
      layer{i}.firings = [layer{i}.firings ; t+0*fired, fired];
      layer{i}.v(fired) = layer{i}.c(fired);
      layer{i}.u(fired) = layer{i}.u(fired)+layer{i}.d(fired);

Loading data, please wait...