added lif project
This commit is contained in:
116
projects/project_lif/solution/lif.m
Normal file
116
projects/project_lif/solution/lif.m
Normal 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;
|
||||
14
projects/project_lif/solution/lifspikes.m
Normal file
14
projects/project_lif/solution/lifspikes.m
Normal 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
|
||||
8
projects/project_lif/solution/passivemembrane.m
Normal file
8
projects/project_lif/solution/passivemembrane.m
Normal 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
|
||||
Reference in New Issue
Block a user