added lif project

This commit is contained in:
2017-01-23 13:30:51 +01:00
parent 1b371f053a
commit 1175dc3ab9
5 changed files with 308 additions and 0 deletions

View File

@@ -0,0 +1,116 @@
%% general settings:
tau = 10.0;
dt = 0.1;
%% test passive membrane:
tmax = 50.0;
time = [0:dt:tmax];
E = zeros(length(time), 1);
V = passivemembrane(1.0, E, tau, dt);
expfun = exp(-time/tau);
figure()
plot(time, V, 'b', 'linewidth', 2);
hold on;
plot(time, expfun, 'r');
hold off;
%% step input:
tmax = 120.0;
time = [0:dt:tmax];
E = zeros(length(time), 1);
E(20/dt:70/dt) = 10;
V = passivemembrane(0.0, E, tau, dt);
figure()
plot(time, E, 'r');
hold on;
plot(time, V, 'b', 'linewidth', 2);
hold off;
%% sine waves:
tmax = 1000.0;
time = [0:dt:tmax];
freqs = [1.0 10.0 30.0 100.0];
figure();
for k = 1:length(freqs)
f = freqs(k);
E = sin(2*pi*0.001*f*time);
V = passivemembrane(0.0, E, tau, dt);
subplot(4, 1, k);
plot(time, E, 'r');
hold on;
plot(time, V, 'b', 'linewidth', 2);
hold off;
end
%% transfer function:
tmax = 1000.0;
time = [0:dt:tmax];
taus = [3.0 10.0 30.0];
figure();
for tau = taus
freqs = [1.0:1.0:100.0];
rates = zeros(length(freqs), 1);
for k = 1:length(freqs)
f = freqs(k);
E = sin(2*pi*0.001*f*time);
V = passivemembrane(0.0, E, tau, dt);
rates(k) = max(V(100/dt:end));
end
plot(freqs, rates);
hold on;
end
hold off;
%% leaky IaF:
tau = 10.0;
tmax = 50.0;
time = [0:dt:tmax];
E = zeros(length(time), 1) + 1.5;
[spikes, V] = lifspikes(0.0, E, tau, dt);
figure()
plot(time, V, 'b', 'linewidth', 2);
hold on;
plot(spikes, ones(length(spikes), 1), 'or');
hold off;
%% leaky IaF and sine input:
tau = 10.0;
tmax = 500.0;
time = [0:dt:tmax];
f = 10.0;
E = 2.0*sin(2*pi*0.001*f*time);
[spikes, V] = lifspikes(0.0, E, tau, dt);
figure()
subplot(2, 1, 1);
plot(time, V, 'b', 'linewidth', 2);
hold on;
plot(spikes, ones(length(spikes), 1), 'or');
hold off;
%% transfer function of LIF spikes:
tmax = 1000.0;
time = [0:dt:tmax];
taus = [3.0 10.0];
figure();
for tau = taus
freqs = [5.0:0.1:30.0];
rates = zeros(length(freqs), 1);
for k = 1:length(freqs)
f = freqs(k);
E = 2.0*sin(2*pi*0.001*f*time);
[spikes, V] = lifspikes(0.0, E, tau, dt);
spikes = spikes(spikes>100.0);
if length(spikes) > 2
rates(k) = 1000.0*(length(spikes)-1)/(spikes(end)-spikes(1));
else
rates(k) = 0.0;
end
end
plot(freqs, rates);
hold on;
end
hold off;

View File

@@ -0,0 +1,14 @@
function [spikes, voltage] = lifspikes(V0, E, tau, dt)
voltage = zeros(length(E), 1);
V = V0;
thresh = 1.0;
spikes = [];
for k = 1:length(E)
voltage(k) = V;
if V > thresh
spikes = [spikes; k*dt];
V = 0.0;
end
V = V + (-V+E(k))*dt/tau;
end
end

View File

@@ -0,0 +1,8 @@
function voltage = passivemembrane(V0, E, tau, dt)
voltage = zeros(length(E), 1);
V = V0;
for k = 1:length(E)
voltage(k) = V;
V = V + (-V+E(k))*dt/tau;
end
end