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 from IPython import embed
time = np.arange(0.,10., 0.001) time = np.arange(0.,10., 0.001)
x = np.random.randn(len(time)) x = np.random.randn(len(time))
f = np.ones(300)/300
x = np.convolve(x, f, mode='same')
selection = x[(time > 5.) & (time < 6.)] selection = x[(time > 5.) & (time < 6.)]
fig = plt.figure() fig = plt.figure()

View File

@ -145,18 +145,39 @@ unterschiedlichem Speicherbedarf und Wertebreich.
\end{table} \end{table}
\matlab{} arbeitet meist mit dem ``double'' Datentyp wenn numerische \matlab{} arbeitet meist mit dem ``double'' Datentyp wenn numerische
Daten gespeichert werden. Dennoch lohnt es sich, sich ein wenig mit Daten gespeichert werden. Dennoch lohnt es sich, sich ein wenig mit
den Datentypen auseinanderzusetzen. Ein Szenario, dass in der den Datentypen auseinanderzusetzen (Box \ref{daqbox}).
Neurobiologie nicht selten ist, ist, dass wir die elektrische
Aktivit\"at einer Nervenzelle messen. Die gemessenen Spannungen werden \begin{ibox}[tp]{Digitalisierung von Messdaten}\label{daqbox}
mittels Messkarte digitalisiert und auf dem Rechner Szenario: Die elektrische Aktivit\"at (z.B. die Membranspannung)
gespeichert. Typischerweise k\"onnen mit solchen Messkarten Spannungen einer Nervenzelle wird gemessen. Die gemessene Spannung wird mittels
im Bereich $\pm 10$\,V gemessen werden. Die Aufl\"osung der Wandler Messkarte digitalisiert und auf dem Computer f\"ur weitere Analysen
betr\"agt heutzutage meistens 16 bit. Das heisst, dass der gesamte gespeichert. Typischerweise k\"onnen mit solchen Messkarten
Spannungsbereich in $2^{16}$ Schritte aufgeteilt ist. Um Speicherplatz Spannungen im Bereich $\pm 10$\,V gemessen werden. Die Aufl\"osung
zu sparen w\"are es sinnvoll, die gemessenen Daten als ``int16'' Werte im der Analog-Digitalwandler betr\"agt heutzutage meistens 16 bit. Das
Rechner abzulegen. Die Daten als ``echte'' Spannungen, also als heisst, dass der gesamte Spannungsbereich in $2^{16}$ Schritte
Flie{\ss}kommawerte, abzulegen w\"urde den 4-fachen Speicherplatz eingeteilt ist. Die gemessenene Spannung wird auf digitalisierte
ben\"otigen. 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} \section{Vektoren und Matrizen}
@ -443,7 +464,7 @@ Helferfunktionen, die n-dimensionale Matrizen erstellen k\"onnen
mehrdimensionale Matrizen zusammenzuf\"ugen hilft die \code{cat} mehrdimensionale Matrizen zusammenzuf\"ugen hilft die \code{cat}
Funktion. 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 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 die Gr\"o{\ss}e der l\"angsten Dimension aus. Wann immer es um
Matrizen geht, wird \code{size} benutzt. 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 wird durch einen Index individuell angesprochen. Der Index setzt
sich aus so vielen Zahlen zusammen wie es Dimensionen gibt (links 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, 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} etc.. }\label{matrixindexingfig}
\end{figure} \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 Alternativ zum \textit{subscript indexing} k\"onnen die Zellen einer
Matrize auch \textit{linear} angesprochen werden (Abbildung Matrize auch \textit{linear} angesprochen werden (Abbildung
\ref{matrixlinearindexingfig}). Diese Art der Adressierung ist nicht \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)} ``linare'' Index einer Zelle reicht von 1 bis \code{numel(M)}
Elemente. Wobei dieser erst entlang der 1. Dimension, dann der 2., Elemente. Wobei dieser erst entlang der 1. Dimension, dann der 2.,
3. etc. Dimension ansteigt. Listing \ref{matrixLinearIndexing} zeigt 3. etc. Dimension ansteigt. Listing \ref{matrixLinearIndexing} zeigt
ein Beispiel fuer den Einsatz des linearen Indexierens z.B. wenn man ein Beispiel f\"ur den Einsatz des linearen Indexierens z.B. wenn man
den Minimalwert aller Elemente einer Matrize ermitteln m\"ochte.. den Minimalwert aller Elemente einer Matrize ermitteln m\"ochte.
\begin{figure} \begin{figure}
\includegraphics[width=0.9\columnwidth]{matrixLinearIndexing} \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} \end{exercise}
Logisches Indizieren wurde oben so benutzt, dass die Auswahl Logisches Indizieren wurde oben so benutzt, dass die Auswahl
auf dem Inhalt desselben Vektors beruhte. Ein sehr h\"auiger Fall ist auf dem Inhalt desselben Vektors beruhte. Ein sehr h\"aufiger Fall ist
jedoch, dass man die Auswahl aus einem Vektor auf den Inhalt eines jedoch, dass die Auswahl aus einem Vektor auf dem Inhalt eines
zweiten Vektors basiert. Ein Beispiel ist, dass man \"uber einen zweiten Vektors basiert. Ein Beispiel ist, dass man \"uber einen
gewissen Zeitraum Daten aufnimmt und aus diesen die Daten eines gewissen Zeitraum Daten aufnimmt und aus diesen die Daten eines
bestimmten Zeitraums ausw\"ahlen m\"ochte (Abbildung bestimmten Zeitraums ausw\"ahlen m\"ochte (Abbildung