info box zur digitalisierung von messdaten
This commit is contained in:
parent
810fdf5d82
commit
85ef19c639
programming/lecture
27
programming/lecture/data_acquisition.py
Normal file
27
programming/lecture/data_acquisition.py
Normal 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()
|
@ -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()
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user