added lif project

This commit is contained in:
Jan Benda 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,10 @@
latex:
pdflatex *.tex > /dev/null
pdflatex *.tex > /dev/null
clean:
rm -rf *.log *.aux *.zip *.out auto
rm -f `basename *.tex .tex`.pdf
zip: latex
zip `basename *.tex .tex`.zip *.pdf *.dat *.mat *.m

View File

@ -0,0 +1,160 @@
\documentclass[addpoints,11pt]{exam}
\usepackage{url}
\usepackage{color}
\usepackage{hyperref}
\pagestyle{headandfoot}
\runningheadrule
\firstpageheadrule
\firstpageheader{Scientific Computing}{Project Assignment}{11/05/2014
-- 11/06/2014}
%\runningheader{Homework 01}{Page \thepage\ of \numpages}{23. October 2014}
\firstpagefooter{}{}{}
\runningfooter{}{}{}
\pointsinmargin
\bracketedpoints
%%%%% listings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{listings}
\lstset{
basicstyle=\ttfamily,
numbers=left,
showstringspaces=false,
language=Matlab,
breaklines=true,
breakautoindent=true,
columns=flexible,
frame=single,
% captionpos=t,
xleftmargin=2em,
xrightmargin=1em,
% aboveskip=11pt,
%title=\lstname,
% title={\protect\filename@parse{\lstname}\protect\filename@base.\protect\filename@ext}
}
%\printanswers
%\shadedsolutions
\begin{document}
%%%%%%%%%%%%%%%%%%%%% Submission instructions %%%%%%%%%%%%%%%%%%%%%%%%%
\sffamily
% \begin{flushright}
% \gradetable[h][questions]
% \end{flushright}
\begin{center}
\input{../disclaimer.tex}
\end{center}
%%%%%%%%%%%%%% Questions %%%%%%%%%%%%%%%%%%%%%%%%%
\begin{questions}
\question The temporal evolution of the membrane voltage $V(t)$ of a
passive neuron is described by the membrane equation
\begin{equation}
\label{passivemembrane}
\tau \frac{dV}{dt} = -V + E
\end{equation}
where $\tau=10$\,ms is the membrane time constant and $E(t)$ is the
reversal potential that also depends on time $t$.
Such a differential equation can be numerically solved with the Euler method.
For this the time is discretized by a time step $\Delta t=0.1$\,ms.
The $i$-th time point is then at time $t_i = i \cdot \Delta t$.
In matlab we get the time points $t_i$ simply by
\begin{lstlisting}
dt = 0.1;
tmax = 100.0;
time = [0.0:dt:tmax]; % t_i
\end{lstlisting}
When the membrane potential at time $t_0 = 0$ is $V_0$, the so
called ``initial condition'', then we can iteratively compute the
membrane potentials $V_i$ for successive time points $t_i$ according to
\begin{equation}
\label{euler}
V_{i+1} = V_i + (-V_i + E_i) \frac{\Delta t}{\tau}
\end{equation}
\begin{parts}
\part Write a function that computes the time course of the
membrane potential of the passive membrane. The function gets as
input arguments the initial condition $V_0$, the vector with the
time course of $E(t)$, the value of the membrane time-constant
$\tau$, and the time step $\Delta t$.
\part In order to test your function set $V_0=1$\,mV and $E(t)=0$
and compute $V(t)$ for $t_{max}=50$\,ms. Plot $V(t)$ and compare it to
the expected result of $V(t) = \exp(-t/\tau)$.
Why is $V=0$ the resting potential of this neuron?
\part Response of the passive membrane to a step input.
Set $V_0=0$. Construct a vector for the input $E(t)$ such that
$E(t)=0$ for $t<20$\,ms and $t>70$\,ms and $E(t)=10$\,mV for
$20$\,ms $<t<70$\,ms. Plot $E(t)$ and the resulting $V(t)$ for
$t_{max}=120$\,ms.
\part Response to sine waves.
As an input we now use $E(t)=\sin(2\pi f t)$. Compute the time
course of the membrane potential in response to this input
($t_{max}=1$\,s). Vary the frequency $f$ between 1 and 100\,Hz. Be
careful with the units within the sine function --- $ft$ must be
unitless.
What do you observe?
\part Transfer function of the passive neuron.
Measure the amplitude of the voltage responses evoked by the
sinusoidal inputs as the maximum of the last 900\,ms of the
responses. Plot the amplitude of the response as a function of
input frequency. This is the transfer function of the passive neuron.
How does the transfer function depend on the membrane time
constant?
\part Leaky integrate-and-fire neuron.
The passive neuron can be turned into a spiking neuron by
introducing a fixed voltage threshold. Whenever the computed
membrane potential of the passive neuron crosses the voltage
threshold a spike is generated and the membrane voltage is set to
the reset potential $V_R$ that we here set to zero. ``Generating a
spike'' only means that we note down the time of the threshold
crossing as a time where an action potential occurred. The
waveform of the action potential is not modeled. Here we use a
voltage threshold of one.
Write a function that implements this leaky integrate-and-fire
neuron by expanding the function for the passive neuron
appropriate. The function returns a vector of spike times.
Illustrate how this model works by appropriate plot(s) and
input(s) $E(t)$, e.g. constant inputs lower and higher than the
voltage threshold.
\part Show the response of the leaky integrate-and-fire neuron to
a sine wave $E(t)=A\sin(2\pi ft)$ with $A=2$\,mV and frequency
$f=10$, 20, and 30\,Hz.
\part Compute the firing rate as a function of the frequency of
the stimulating sine wave ($A=2$\,mV and frequencies between 5 and
30\,Hz). For a spike train with $n$ spikes at times $t_k$ ($k=1,
2, \ldots n$) the firing rate is
\begin{equation}
\label{firingrate}
r = \frac{n-1}{t_n - t_1}
\end{equation}
What do you observe? Does the firing rate encode the frequency of
the stimulus?
\end{parts}
\end{questions}
\end{document}

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