info box zur digitalisierung von messdaten

This commit is contained in:
Jan Grewe 2015-11-09 23:29:39 +01:00
parent 810fdf5d82
commit 85ef19c639
3 changed files with 70 additions and 19 deletions

View File

@ -0,0 +1,27 @@
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111)
y = np.asarray([-10, 10]) * 2.**16/20.
ax.plot([-10, 10], y, color='dodgerblue', lw=1.5)
ax.set_xlabel('measured voltage [V]')
ax.set_ylabel('digitized value')
ax.set_xlim([-10.05, 10.05])
ax.set_ylim([-2**15, 2**15 + 1])
ax.spines["right"].set_visible(False)
ax.spines["top"].set_visible(False)
ax.yaxis.set_ticks_position('left')
ax.xaxis.set_ticks_position('bottom')
ax.xaxis.linewidth=2
ax.yaxis.linewidth=2
ax.tick_params(direction="out", width=1.25)
ax.tick_params(direction="out", width=1.25)
ax.grid()
fig.set_facecolor("white")
fig.set_size_inches(5., 5.)
fig.tight_layout()
fig.savefig("images/data_acquisition.pdf")
plt.close()

View File

@ -3,6 +3,9 @@ import numpy as np
from IPython import embed
time = np.arange(0.,10., 0.001)
x = np.random.randn(len(time))
f = np.ones(300)/300
x = np.convolve(x, f, mode='same')
selection = x[(time > 5.) & (time < 6.)]
fig = plt.figure()

View File

@ -145,18 +145,39 @@ unterschiedlichem Speicherbedarf und Wertebreich.
\end{table}
\matlab{} arbeitet meist mit dem ``double'' Datentyp wenn numerische
Daten gespeichert werden. Dennoch lohnt es sich, sich ein wenig mit
den Datentypen auseinanderzusetzen. Ein Szenario, dass in der
Neurobiologie nicht selten ist, ist, dass wir die elektrische
Aktivit\"at einer Nervenzelle messen. Die gemessenen Spannungen werden
mittels Messkarte digitalisiert und auf dem Rechner
gespeichert. Typischerweise k\"onnen mit solchen Messkarten Spannungen
im Bereich $\pm 10$\,V gemessen werden. Die Aufl\"osung der Wandler
betr\"agt heutzutage meistens 16 bit. Das heisst, dass der gesamte
Spannungsbereich in $2^{16}$ Schritte aufgeteilt ist. Um Speicherplatz
zu sparen w\"are es sinnvoll, die gemessenen Daten als ``int16'' Werte im
Rechner abzulegen. Die Daten als ``echte'' Spannungen, also als
Flie{\ss}kommawerte, abzulegen w\"urde den 4-fachen Speicherplatz
ben\"otigen.
den Datentypen auseinanderzusetzen (Box \ref{daqbox}).
\begin{ibox}[tp]{Digitalisierung von Messdaten}\label{daqbox}
Szenario: Die elektrische Aktivit\"at (z.B. die Membranspannung)
einer Nervenzelle wird gemessen. Die gemessene Spannung wird mittels
Messkarte digitalisiert und auf dem Computer f\"ur weitere Analysen
gespeichert. Typischerweise k\"onnen mit solchen Messkarten
Spannungen im Bereich $\pm 10$\,V gemessen werden. Die Aufl\"osung
der Analog-Digitalwandler betr\"agt heutzutage meistens 16 bit. Das
heisst, dass der gesamte Spannungsbereich in $2^{16}$ Schritte
eingeteilt ist. Die gemessenene Spannung wird auf digitalisierte
Werte abgebildet.\vspace{0.25cm}
\begin{minipage}{0.5\textwidth}
\includegraphics[width=0.9\columnwidth]{images/data_acquisition}
\end{minipage}
\begin{minipage}{0.5\textwidth}
Um die Spannung auf den \code{int16} Datentyp abzubilden:
\[ y = x \cdot 2^{16}/20\] mit $x$ der gemessenen Spannung und $y$
dem digitalisierten Wert bei einem Spannungsbereich von
$\pm10$\,V.\\
Durch Umgekehrung kann der digitalisierte Wert wieder
in eine Spannung zur\"uckgewandelt werden:
\[ x = y \cdot 20/2^{16} \]
\end{minipage}\vspace{0.25cm}
Um Speicherplatz zu sparen ist es sinnvoll, die gemessenen Daten als
``int16'' anstelle der ``double'' Werte im Rechner abzulegen. Die
Daten als ``echte'' Spannungen, also als Flie{\ss}kommawerte,
abzulegen ben\"otigt den 4-fachen Speicherplatz und bietet keine
zus\"atzliche Information.
\end{ibox}
\section{Vektoren und Matrizen}
@ -443,7 +464,7 @@ Helferfunktionen, die n-dimensionale Matrizen erstellen k\"onnen
mehrdimensionale Matrizen zusammenzuf\"ugen hilft die \code{cat}
Funktion.
Um Informationen \"uber die Gr\"{\ss}e einer Matrize zu bekommen ist
Um Informationen \"uber die Gr\"o{\ss}e einer Matrize zu bekommen ist
die Funktion \code{length} nicht geeignet. Wie oben erw\"ahnt gibt sie
die Gr\"o{\ss}e der l\"angsten Dimension aus. Wann immer es um
Matrizen geht, wird \code{size} benutzt.
@ -454,7 +475,7 @@ Matrizen geht, wird \code{size} benutzt.
wird durch einen Index individuell angesprochen. Der Index setzt
sich aus so vielen Zahlen zusammen wie es Dimensionen gibt (links
2, rechts 3). Dabei steht die 1. Stelle immer f\"ur die Zeile, die
2. f\"uer die Spalte und die dritte f\"ur das Blatt,
2. f\"ur die Spalte und die dritte f\"ur das Blatt,
etc.. }\label{matrixindexingfig}
\end{figure}
@ -492,12 +513,12 @@ Dimensionalit\"at der Matrize ist. Diese Art des Zugriffs wird
Alternativ zum \textit{subscript indexing} k\"onnen die Zellen einer
Matrize auch \textit{linear} angesprochen werden (Abbildung
\ref{matrixlinearindexingfig}). Diese Art der Adressierung ist nicht
so intuituiv verst\"andlich, kann aber sehr hilfreich sein. Der
so intuitiv verst\"andlich, kann aber sehr hilfreich sein. Der
``linare'' Index einer Zelle reicht von 1 bis \code{numel(M)}
Elemente. Wobei dieser erst entlang der 1. Dimension, dann der 2.,
3. etc. Dimension ansteigt. Listing \ref{matrixLinearIndexing} zeigt
ein Beispiel fuer den Einsatz des linearen Indexierens z.B. wenn man
den Minimalwert aller Elemente einer Matrize ermitteln m\"ochte..
ein Beispiel f\"ur den Einsatz des linearen Indexierens z.B. wenn man
den Minimalwert aller Elemente einer Matrize ermitteln m\"ochte.
\begin{figure}
\includegraphics[width=0.9\columnwidth]{matrixLinearIndexing}
@ -747,8 +768,8 @@ nun die Werte an den Stellen zur\"uck, an denen der logische Vektor
\end{exercise}
Logisches Indizieren wurde oben so benutzt, dass die Auswahl
auf dem Inhalt desselben Vektors beruhte. Ein sehr h\"auiger Fall ist
jedoch, dass man die Auswahl aus einem Vektor auf den Inhalt eines
auf dem Inhalt desselben Vektors beruhte. Ein sehr h\"aufiger Fall ist
jedoch, dass die Auswahl aus einem Vektor auf dem Inhalt eines
zweiten Vektors basiert. Ein Beispiel ist, dass man \"uber einen
gewissen Zeitraum Daten aufnimmt und aus diesen die Daten eines
bestimmten Zeitraums ausw\"ahlen m\"ochte (Abbildung