info box zur digitalisierung von messdaten
This commit is contained in:
parent
810fdf5d82
commit
85ef19c639
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
|
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()
|
||||||
|
@ -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
|
||||||
|
Reference in New Issue
Block a user