From 37284d95779aa440ca7c6da4a7a9ca38a73a5c75 Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Tue, 15 Mar 2011 14:11:39 -0400 Subject: [PATCH] Add pulse oxymetry post and updated master Makefile for SCons builds. --- .gitignore | 31 +- Makefile | 22 +- posts/Pulse_oxymetry.mdwn | 18 + posts/Pulse_oxymetry/SConstruct | 11 + posts/Pulse_oxymetry/fig/SPO2vR.png | Bin 0 -> 8993 bytes posts/Pulse_oxymetry/fig/SfO2vR-theory.py | 42 ++ posts/Pulse_oxymetry/fig/absorbtion.png | Bin 0 -> 13530 bytes posts/Pulse_oxymetry/fig/ac-dc.png | Bin 0 -> 11195 bytes posts/Pulse_oxymetry/main.bib | 25 ++ posts/Pulse_oxymetry/main.tex | 499 ++++++++++++++++++++++ 10 files changed, 634 insertions(+), 14 deletions(-) create mode 100644 posts/Pulse_oxymetry.mdwn create mode 100644 posts/Pulse_oxymetry/SConstruct create mode 100644 posts/Pulse_oxymetry/fig/SPO2vR.png create mode 100755 posts/Pulse_oxymetry/fig/SfO2vR-theory.py create mode 100644 posts/Pulse_oxymetry/fig/absorbtion.png create mode 100644 posts/Pulse_oxymetry/fig/ac-dc.png create mode 100644 posts/Pulse_oxymetry/main.bib create mode 100644 posts/Pulse_oxymetry/main.tex diff --git a/.gitignore b/.gitignore index 365fa1e..ca58c1e 100644 --- a/.gitignore +++ b/.gitignore @@ -3,17 +3,28 @@ /recentchanges # built by Makefiles inside posts/ -posts/Abax/*.pdf -posts/Abax/*/main.aux -posts/Abax/*/main.log -posts/Abax/*/main.out -posts/Abax/*/main.pdf -posts/Abax/*/main.toc -posts/drexel-thesis/*.pdf -posts/drexel-thesis/drexel-thesis/ +/posts/Abax/*.pdf +/posts/Abax/*/main.aux +/posts/Abax/*/main.log +/posts/Abax/*/main.out +/posts/Abax/*/main.pdf +/posts/Abax/*/main.toc +/posts/drexel-thesis/*.pdf +/posts/drexel-thesis/drexel-thesis/ /posts/Hooke/README.rst /posts/Hooke/hooke /posts/Hooke/html +/posts/Pulse_oxymetry/.sconsign.dblite +/posts/Pulse_oxymetry/fig/SfO2vR-theory.png +/posts/Pulse_oxymetry/main.aux +/posts/Pulse_oxymetry/main.bbl +/posts/Pulse_oxymetry/main.blg +/posts/Pulse_oxymetry/main.fls +/posts/Pulse_oxymetry/main.i* +/posts/Pulse_oxymetry/main.log +/posts/Pulse_oxymetry/main.n* +/posts/Pulse_oxymetry/main.out +/posts/Pulse_oxymetry/main.pdf /posts/problempack/problempack/ /posts/problempack/probs.pdf /posts/problempack/sols.pdf @@ -21,8 +32,8 @@ posts/drexel-thesis/drexel-thesis/ /posts/sawsim/README.rst /posts/sawsim/sawsim.pdf /posts/sawsim/sawsim/ -posts/Thesis/thesis/ -posts/Thesis/draft.pdf +/posts/Thesis/thesis/ +/posts/Thesis/draft.pdf /posts/XSLT/chapter/chapter.html /posts/XSLT/code/index.shtml /posts/Xmodmap/_Xmodmap diff --git a/Makefile b/Makefile index 6141a51..3acb440 100644 --- a/Makefile +++ b/Makefile @@ -5,9 +5,23 @@ SUBDIRS = posts/Abax posts/drexel-thesis posts/Hooke posts/problempack \ posts/XSLT/chapter posts/XSLT/code TARGETS = all clean -all : +SCONS_SUBDIRS = posts/Pulse_oxymetry -$(TARGETS) : + +all : make-all scons-all +clean : make-clean scons-clean + +$(TARGETS:%=make-%) : @for i in $(SUBDIRS); do \ - echo "make $@ in $$i..."; \ - (cd $$i; $(MAKE) $(MFLAGS) $@); done + echo "make ${@:make-%=%} in $$i..."; \ + (cd $$i; $(MAKE) $(MFLAGS) ${@:make-%=%}); done + +scons-all : + @for i in $(SCONS_SUBDIRS); do \ + echo "scons in $$i..."; \ + (cd $$i; scons); done + +scons-clean : + @for i in $(SCONS_SUBDIRS); do \ + echo "scons -c in $$i..."; \ + (cd $$i; scons -c); done diff --git a/posts/Pulse_oxymetry.mdwn b/posts/Pulse_oxymetry.mdwn new file mode 100644 index 0000000..67dcc6b --- /dev/null +++ b/posts/Pulse_oxymetry.mdwn @@ -0,0 +1,18 @@ +My wife was recently reviewing some [pulse oxymeter][pox] notes while +working a round of anesthesia. It took us a while to trace the logic +through all the symbol changes and notation shifts, and my wife's +math-discomfort and my bio-discomfort made us more cautios than it +turns out we needed to be. There are a number of nice [review +articles][art] out there that I turned up while looking for explicit +derivations, but by the time I'd found them, my working notes had +gotten fairly well polished themselves. So here's +[[my_contribution|pdf]] to the pulse-ox noise ;). Highlights include: + +* Short and sweet (with pictures) +* Symbols table +* Baby steps during math manipulation + +[pox]: http://en.wikipedia.org/wiki/Pulse_oximeter +[art]: http://journals.lww.com/anesthesiology/Citation/1989/01000/Pulse_Oximetry.19.aspx + +[[!tag tags/theory]] diff --git a/posts/Pulse_oxymetry/SConstruct b/posts/Pulse_oxymetry/SConstruct new file mode 100644 index 0000000..306becd --- /dev/null +++ b/posts/Pulse_oxymetry/SConstruct @@ -0,0 +1,11 @@ +import os + +env = Environment(ENV=os.environ) + +main = env.PDF('main.tex') +SfO2vR_theory = env.Command( + 'fig/SfO2vR-theory.png', 'fig/SfO2vR-theory.py', 'python $SOURCE') +env.Depends(main, SfO2vR_theory) + +view = env.Alias('view', [main], 'xpdf -z page $SOURCE') +env.AlwaysBuild(view) diff --git a/posts/Pulse_oxymetry/fig/SPO2vR.png b/posts/Pulse_oxymetry/fig/SPO2vR.png new file mode 100644 index 0000000000000000000000000000000000000000..b2a0c3cf749f3862c63852f8777f07dc872e6000 GIT binary patch literal 8993 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 Z{156Syku#;kGB8-002ovPDHLkV1fx&6<+`V literal 0 HcmV?d00001 diff --git a/posts/Pulse_oxymetry/main.bib b/posts/Pulse_oxymetry/main.bib new file mode 100644 index 0000000..3ab909e --- /dev/null +++ b/posts/Pulse_oxymetry/main.bib @@ -0,0 +1,25 @@ +@article { tremper1989, + author = "Tremper, Kevin K. and Barker, Steven J.", + title = "Pulse Oximetry", + year = 1989, + month = jan, + journal = "Anesthesiology", + issn = "0003-3022", + volume = 70, + number = 1, + pages = "98--108", + url = "http://journals.lww.com/anesthesiology/Citation/1989/01000/Pulse_Oximetry.19.aspx", +} + +@article { mendelson1989, + author = "Mendelson, Yitzhak and Kent, Joel C.", + title = "Variations in Optical Absorbtion Spectra of Aduly and Fetal Hemoglobins and ITs Effect on Pulse Oximetry", + year = 1989, + month = aug, + journal = "IEE Transactions on Biomedical Engineering", + issn = "0018-9294", + volume = 36, + number = 8, + pages = "844--848", + url = "http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=30810", +} diff --git a/posts/Pulse_oxymetry/main.tex b/posts/Pulse_oxymetry/main.tex new file mode 100644 index 0000000..8a4a7b7 --- /dev/null +++ b/posts/Pulse_oxymetry/main.tex @@ -0,0 +1,499 @@ +\documentclass{article} + +\usepackage{amsmath} % align and other math niceties +\usepackage{makeidx} % indexing +\makeindex % we don't actually use indexing, but having this here + % triggers Scons' call to makeindex +\usepackage[intoc]{nomencl} % nomenclature/symbol/abbreviation indexing +\makenomenclature + +\usepackage[super,sort&compress,comma]{natbib} % fancy citation extensions +% super selects citations in superscript mode +% sort&compress automatically sorts and compresses compound citations +% (\citep{a,b,...}) +% comma seperates multiple citations with commas rather than the +% default semicolons. +\bibliographystyle{unsrtnat} % number citations in the order referenced + +\usepackage{subfig} % compound figures +\usepackage{graphicx} % include graphics + +\usepackage[final]{hyperref} % hyper-links +\hypersetup{colorlinks} +\hypersetup{pdfauthor={W. Trevor King}} +\hypersetup{pdftitle={Pulse Oximetry}} +\hypersetup{pdfsubject={Pulse Oximetry}} +\title{Pulse Oximetry} +\date{\today} +\author{W. Trevor King} + +% parenthesis, for example (some stuff] would be \p({some stuff}] +\newcommand{\p}[3]{\left#1 #2 \right#3} +% concentration shortcut +\newcommand{\C}[1]{\ensuremath{\p[{#1}]}} +% the proper d to be used in derivatives and integrals +\newcommand{\dd}{\ensuremath{\mathrm d}} +% derivative of #2 with respect to #1 +\newcommand{\deriv}[2]{\ensuremath{\frac{\dd{#2}}{\dd{#1}}}} +% average of #1 +\newcommand{\avg}[1]{\ensuremath{\left\langle {#1} \right\rangle}} % average +% units without preceding value +\newcommand{\bareU}[1]{\textnormal{#1}} +% units shortcut +\newcommand{\U}[1]{\textnormal{\ \bareU{#1}}} + +% chemicals and molecules +\newcommand{\Ox}{\ensuremath{\mathrm O_2}} +\newcommand{\Hb}{\ensuremath{\mathrm{Hb}}} +\newcommand{\HHb}{\ensuremath{\mathrm{HHb}}} +\newcommand{\dysHb}{\ensuremath{\mathrm{dysHb}}} +\newcommand{\MHb}{\ensuremath{\mathrm{MHb}}} +\newcommand{\CO}{\ensuremath{\mathrm{CO}}} +\newcommand{\Hg}{\ensuremath{\mathrm{Hg}}} + +\newcommand{\xO}[1]{\ensuremath{{\mathrm{#1}}_{\Ox}}} + +% partial pressure PiO2 +\newcommand{\PxO}[1]{\xO{P#1}} +\newcommand{\PO}{\PxO{}} +\newcommand{\PiO}{\PxO{\mathit i}} + +% saturation SiO2. Also O2Sat +\newcommand{\SxO}[1]{\xO{S#1}} +\newcommand{\SO}{\SxO{}} +\newcommand{\SiO}{\SxO{\mathit i}} + +% functional saturation +\newcommand{\SOf}{\xO{S_{\mathit f}}} + +% content CoO2. Also O2CT. +\newcommand{\CoO}{\xO{Co}} + +% Beer-Lambert law coefficients +\newcommand{\Iol}{\ensuremath{I_{0 \lambda}}} +\newcommand{\Il}{\ensuremath{I_\lambda}} +\newcommand{\Iacl}{\ensuremath{I_{AC\lambda}}} +\newcommand{\Idcl}{\ensuremath{I_{DC\lambda}}} +\newcommand{\exl}[1]{\ensuremath{\epsilon_{#1 \lambda}}} +\newcommand{\eil}{\exl{i}} +\newcommand{\cdcx}[1]{\ensuremath{c_{DC#1 \lambda}}} +\newcommand{\cdci}{\cdcx{i}} +\newcommand{\cacx}[1]{\ensuremath{c_{AC#1}}} +\newcommand{\caci}{\cacx{i}} +\newcommand{\edcxl}[1]{\ensuremath{\epsilon_{DC#1 \lambda}}} +\newcommand{\edcil}{\edcxl{i}} +\newcommand{\eacxl}[1]{\ensuremath{\epsilon_{AC#1 \lambda}}} +\newcommand{\eacil}{\eacxl{i}} +\newcommand{\eiA}[1]{\ensuremath{\epsilon_{AC#1,660}}} +\newcommand{\eiB}[1]{\ensuremath{\epsilon_{AC#1,940}}} +\newcommand{\Ldc}{\ensuremath{L_{\mathrm{DC}}}} + +% use most of the page +\topmargin -0.5in +\headheight 0.0in +\headsep 0.0in +\textheight 9.5in % leave a bit of extra room for page numbers +\oddsidemargin -0.5in +\textwidth 7.5in + +\begin{document} + +\maketitle + +\section{Oxygen content} + +The circulatory system distributes oxygen (\Ox) throughout the body. +The amount of \Ox\ at any given point is measured by the \Ox\ content +(\CoO), usually given in $\frac{\bareU{mL \Ox at BTP}}{\bareU{dL blood}}$ +(BTP is my acronym for body temperature and pressure). Most +transported \Ox\ is bound to +\href{http://en.wikipedia.org/wiki/Hemoglobin}{hemoglobin} (\Hb), but +there is also free \Ox\ disolved directly in the plasma and cytoplasm +of suspended cells. +\nomenclature{\Ox}{Molecular oxygen} +\nomenclature{\CoO}{Oxygen content of blood} +\nomenclature{BTP}{Body temperature and pressure} +\nomenclature{\Hb}{Hemoglobin monomer} +\nomenclature{\SO}{Fractional \Ox\ saturation} +\nomenclature{\PO}{\Ox\ partial pressure} +\begin{equation} + \CoO = a\C{\Hb}\SO + b\PO \;, \label{eq:CoO-symbolic} +\end{equation} +where \SO is the \Hb's \Ox\ saturation and \PO is the \Ox\ partial +pressure. Don't worry about the coefficients $a$ and $b$ yet, we'll +get back to them in a second. + +The amound of dissolved \Ox is given by its +\href{http://en.wikipedia.org/wiki/Partial_pressure}{partial pressure} +(\PO). Partial pressures are generally given in \bareU{mm} of mercury +(\Hg) at standard temperature and pressure +(\href{http://en.wikipedia.org/wiki/Standard_conditions_for_temperature_and_pressure}{STP}). +Because the partial pressure changes as blood flows through the body, +an additional specifier $i$ may be added (\PiO) to clarify the +measurement location. \nomenclature{\Hg}{Mercury} +\nomenclature{STP}{Standard temperature and pressure} +\nomenclature{\PiO}{\Ox\ partial pressure at location $i$} +\begin{center} +\begin{tabular}{ccl} + $i$ & Full symbol & Location descriptor \\ + a & \PxO{a} & arterial \\ + p & \PxO{p} & peripheral or pulsatile \\ + t & \PxO{t} & tissue \\ + v & \PxO{t} & venous \\ +\end{tabular} +\end{center} + +\Ox\ is carried in the blood primarily through binding to hemoglobin +monomers (\Hb), with each monomer potentially binding a single \Ox. +Oxygen saturation (\SO) is the fraction of hemoglobin monomers (\Hb) +that have bound an oxygen molecule (\Ox). +\begin{equation} + \SO = \frac{\C{\Hb\Ox}}{\C{\Hb}} \;. \label{eq:SO} +\end{equation} +\SO, as a ratio of concentrations, is unitless. It is often expressed +as a percentage. \C{\Hb} is often given in \bareU{g/dL}. As with +partial pressures, an additional specifier $i$ may be added (\SiO) to +clarify the measurement location (\SxO{a}, \SxO{p}, \ldots). +\nomenclature{\SiO}{\Ox\ saturation at location $i$} + +Now we can take a second look at our \Ox\ content formula +(Eq.~\ref{eq:CoO-symbolic}). The coefficient $a$ must convert +\bareU{g/dL} to $\frac{\bareU{mL \Ox\ at BTP}}{\bareU{dL blood}}$. +Using the molecular weight of \Hb\ and the +\href{http://hyperphysics.phy-astr.gsu.edu/hbase/kinetic/idegas.html}{volume + of a mole of ideal gas at STP}. +\begin{align} + \C{\Hb} &= \chi\frac{\bareU{g \Hb}}{\bareU{dL}} + \cdot\frac{1\U{mol \Hb}}{17\U{kg \Hb}} + \cdot\frac{1\U{mol \Ox}}{1\U{mol \Hb}} + \cdot\frac{22.4\U{L ideal gas}}{1\U{mol ideal gas}} \\ + &= 1.32 \frac{\bareU{mL \Ox}}{\bareU{g \Hb}} \cdot \chi +\end{align} +where $\chi$ is a pure number. Therefore, $a=1.32 \frac{\bareU{mL + \Ox}}{\bareU{g \Hb}}$. The powers that be seem to have used a +slightly different STP, since the more commonly used value is 5\% +higher at $1.39$. + +The coefficient $b$ must convert \bareU{mm \Hg\ at STP} to +$\frac{\bareU{mL \Ox\ at BTP}}{\bareU{dL blood}}$. Empirical +experiments (?) give a value of +$b=0.003\frac{\bareU{mL \Ox\ at BTP}} + {\bareU{dL blood $\cdot$ mm \Hg\ at STP}}$. +Now we can write out the familiar form +\begin{equation} + \CoO = + 1.39 \frac{\bareU{mL \Ox}}{\bareU{g \Hb}} \C{\Hb}\SO + + 0.003\frac{\bareU{mL \Ox\ at BTP}} + {\bareU{dL blood $\cdot$ mm \Hg\ at STP}} + \PO \;. \label{eq:CoO} +\end{equation} +Reasonable levels are +\begin{center} +\begin{tabular}{rl} + $\C{\Hb}$ & $14\frac{\bareU{g \Hb}}{\bareU{dL blood}}$ \\ + $\SO$ & 98\% \\ + $\PO$ & $100\U{mm \Hg\ at STP}$ \\ + $1.39 \frac{\bareU{mL \Ox}}{\bareU{g \Hb}} \C{\Hb}\SO$ & + $19.1\frac{\bareU{mL \Ox\ at BTP}}{\bareU{dL blood}}$ \\ + $0.003\frac{\bareU{mL \Ox\ at BTP}} + {\bareU{dL blood $\cdot$ mm \Hg\ at STP}} + \PO$ & + $0.299\frac{\bareU{mL \Ox\ at BTP}}{\bareU{dL blood}}$ +\end{tabular} +\end{center} +Because the dissolved \Ox\ has such a tiny contribution (1.5\% of the +total in my example), it is often measured at BTP rather than STP. +Sometimes it is dropped from the calculation entirely. We focus on +the more imporant $\C{\Hb}\SO$ in the next section. + +\section{Oxygen saturation} + +The preceding discussion used $\C{\Hb}\SO$ to represent the +concentration of \Hb\Ox\ complexes (Eqs.~\ref{eq:SO} and +~\ref{eq:CoO}). This was useful while we were getting our bearings, +but now we will replace that term with a more detailed model. Let us +sort the \Hb\ monomers into species +\begin{center} +\begin{tabular}{ll} + \Hb & all hemoglobin monomers \\ + \Hb\Ox & monomers complexed with \Ox \\ + \HHb & reduced \Hb\ (not complexed with \Ox) \\ + \dysHb & dys-hemoglobin (cannot complex with \Ox) \\ + \MHb & \href{http://en.wikipedia.org/wiki/Methemoglobin}{methemoglobin} \\ + \Hb\CO & \href{http://en.wikipedia.org/wiki/Carboxyhemoglobin} + {carboxyhemoglobin} +\end{tabular} +\end{center} +\nomenclature{\Hb\Ox}{\Hb\ monomers complexed with \Ox} +\nomenclature{\HHb}{Reduced \Hb\ (not complexed with \Ox)} +\nomenclature{\dysHb}{Dys-hemoglobin (cannot complex with \Ox)} +\nomenclature{\MHb}{Methemoglobin} +\nomenclature{\Hb\CO}{Carboxyhemoglobin} +These species are related as follows +\begin{align} + \C{\Hb} &= \C{\Hb\Ox} + \C{\HHb} + \C{\dysHb} \\ + \C{\dysHb} &= \C{\MHb} + \C{\Hb\CO} + \text{other broken forms} +\end{align} + +Because modern two-color pulse-oximeters don't measure \SO exactly, +the related quantity that they \emph{do} measure has been given a name +of its own: the \emph{functional} saturation (\SOf). +\nomenclature{\SOf}{Functional \Ox\ saturation} +\begin{equation} + \SOf = \frac{\C{\Hb\Ox}}{\C{\Hb\Ox} + \C{\HHb}} \;. \label{eq:funcSO} +\end{equation} +Rephrasing our earier saturation in Eq.~\ref{eq:SO}, we see +\begin{equation} + \SO = \frac{\C{\Hb\Ox}}{\C{\Hb}} + = \frac{\C{\Hb\Ox}} + {\C{\Hb\Ox} + \C{\HHb} + \C{\dysHb}} \;. \label{eq:fracSO} +\end{equation} +To avoid confusion with \SOf, our original \SO\ is sometimes referred +to as the\emph{fractional} saturation. + +\section{The Beer-Labmert law} + +So far we've been labeling and defining attributes of the blood. The +point of this excercise is to understand how a pulse oximeter measures +them. People have known for a while that different hemoglobin +complexes (\Hb\O, \HHb, \MHb, \Hb\CO, \ldots) have differnt absorbtion +spectra (Fig.~\ref{fig:absorbtion}), and they have been using this +difference since the 1930's to make pulse-oximeters based on two-color +transmittance measurements\citep{tremper1989}. + +\begin{figure} + \begin{center} + \includegraphics[width=0.6\textwidth]{fig/absorbtion} + \end{center} + \caption{Absorbance spectra for assorted hemoglobin + species\citep{tremper1989}.\label{fig:absorbtion}} +\end{figure} + +By passing different wavelengths of light through perfused tissue, we +can measure the relative quantities of the different \Hb\ species. +The basis for this analysis comes from the +\href{http://en.wikipedia.org/wiki/Beer\%E2\%80\%93Lambert_law}{Beer-Lambert + law} +\begin{equation} + I = I_0 e^{-c \epsilon L} \;, \label{eq:BL} +\end{equation} +where $I_0$ is the incident intensity (entering the tissue), $I$ is +the tranmitted intensity (leaving the tissue), $c$ is the tissue +density (concentration), $\epsilon$ is the extinction coefficient +(molar absorbtivity), and $L$ is the tissue thickness. Rephrasing the +math as English, this means that the intensity drops off exponentially +as you pass through the tissue, and more tissue (higher $c$ or $L$) or +more opaque tissue (higher $\epsilon$) mean you'll get less light out +the far side. This is a very simple law, and the price of the +simplicity is that it brushes all sorts of things under the rug. +Still, it will help give us a basic idea of what is going on in a +pulse-oximeter. + +Rather than treat the the tissue as a single substance, lets use the +Beer-Labmert law on a mixture of substances with concentrations $c_1$, +$c_2$, \ldots and extinction coefficients $\epsilon_1$, $\epsilon_2$, +\ldots. +\begin{equation} + I = I_0 e^{-(c_1 \epsilon_1 + c_2 \epsilon_2 + \ldots) L} \;. +\end{equation} + +We also notice that the intensities and extinction coefficients may +all depend on the wavelength of light $\lambda$, so we should really +write +\begin{equation} + \Il = \Iol e^{-(c_1 \exl{1} + c_2 \exl{2} + \ldots) L} + \;. \label{eq:BL-lambda} +\end{equation} +\nomenclature{\Iol}{Intensity of incident light at wavelength $\lambda$} +\nomenclature{\Il}{Intensity of transmitted light at wavelength $\lambda$} +\nomenclature{$c_i$}{Concentration of species $i$} +\nomenclature{\eil}{Extinction coefficient of species $i$ at + wavelength $\lambda$} +\nomenclature{$L$}{Length of tissue through which light must pass} + +Once isolated, a simple spectroscopy experiment can measure the +extinction coefficient $\eil$ of a given species across a range of +$\lambda$, and this has been done for all of our common \Hb\ flavors. +We need to play with Eq.~\ref{eq:BL-lambda} to find a way to extract +the unknown concentrations, which we can then use to calculate the +\SO\ (Eqs.~\ref{eq:funcSO} and \ref{eq:fracSO}) which we can use in +turn to calculate \CoO\ (Eq.~\ref{eq:CoO}). + +Note that by increasing the number of LEDs (adding new $\lambda$) we +increase the number of constraints on the unknown $c_i$. A +traditional pulse-oximeter uses two LEDs, at $660\U{nm}$ and +$940\U{nm}$, to measure \SOf (related to $\C{\Hb\Ox}$ and $\C{\HHb}$). +More recent designs called +\href{http://en.wikipedia.org/wiki/Co-oximeter}{pulse CO-oximeters} +use more wavelengths to allow measurement of quanties related to +additional species (approaching the end goal of measuring \SO). +\nomenclature{LED}{Light emitting diode} + +Let us deal with the fact that there is a lot of stuff absorbing light +that is not arterial blood (e.g. venous blood, other tissue, bone, +etc). The good thing about this stuff is that it's just sitting there +or moving through in a smooth fasion. Arterial blood is the only +thing that's pulsing (Fig.~\ref{fig:ac-dc}). + +\begin{figure} + \begin{center} + \includegraphics[width=0.6\textwidth]{fig/ac-dc} + \end{center} + \caption{AC and DC transmission + components\citep{tremper1989}.\label{fig:ac-dc}} +\end{figure} + +During a pulse, the pressure in the finger increases and non-arterial +tissue is compressed, changing $L$ and $c_i$ from their trough values +to peak values $L'$ and $c_i'$. Since the finger is big, the +fractional change in width $\dd L/L=(L'-L)/L$ is very small. Assuming +the change in concentration is even smaller (since most liquids are +fairly incompressible), we have +\begin{align} + \deriv{L}{\Il} + &= \deriv{L}{}\p({\Iol e^{-(c_1 \exl{1} + c_2 \exl{2} + \ldots) L}}) + = \deriv{L}{}\p({\Iol e^{-X L}}) + = -X \Iol e^{-X L} + = -X\Il \\ + \frac{\dd \Il}{\Il} &= -X \dd L \;, \label{eq:dI-I-naive} +\end{align} +where $X=c_1 \exl{1} + c_2 \exl{2} + \ldots$ is just a placeholder to +reduce clutter. \dd \Il is the AC amplitude (height of wiggle top of +the detected light intensity due to pulsatile arterial blood), while +\Il is the DC ampltude (height of the static base of the detected +light intensity due to everything else). This is actually a fairly +sneaky step, because if we can also use it to drop the DC compents. +Because we've assumed fixed concentrations (incompressible fluids), +and there is no more DC material comming in during a pulse (by +definition), we can pull out the effective $L$ for the DC components +does not change. Separating the DC and AC components and running +through the derivative again, we have +\nomenclature{\cdci}{Concentration of the $i$th DC species at + wavelength $\lambda$} \nomenclature{\caci}{Concentration of the + $i$th AC species at wavelength $\lambda$} +\nomenclature{\edcil}{Extinction coefficient of the $i$th DC species + at waveleng th $\lambda$} \nomenclature{\eacil}{Extinction + coefficient of the $i$th AC species at waveleng th $\lambda$} +\nomenclature{\Ldc}{DC finger width} +\begin{align} + \deriv{L}{\Il} + &= \deriv{L}{}\p({ + \Iol e^{-(\cdcx{1}\edcxl{1} + \cdcx{2}\edcxl{2} + \ldots) \Ldc + -(\cacx{1}\eacxl{1} + \cacx{2}\eacxl{2} + \ldots) L}}) \\ + &= \Iol e^{-(\cdcx{1}\edcxl{1} + \cdcx{2}\edcxl{2} + \ldots) \Ldc} + \deriv{L}{}\p({e^{-(\cacx{1}\eacxl{1} + \cacx{2}\eacxl{2} + \ldots) L} + }) \\ + &= \Iol Y \deriv{L}{}\p({e^{-Z L}}) + = -Z \Iol Y e^{-Z L} + = -Z \Il \\ + \frac{\dd \Il}{\Il} &= -Z \dd L \;, \label{eq:dI-I} +\end{align} +where $Y=e^{-(\cdcx{1}\edcxl{1} + \cdcx{2}\edcxl{2} + \ldots) \Ldc}$ +and $Z=\cacx{1}\eacxl{1} + \cacx{2}\eacxl{2} + \ldots$ are just +placeholders to reduce clutter. Note that Eq.~\ref{eq:dI-I} looks +just like Eq.~\ref{eq:dI-I-naive} with the translation $X\rightarrow +Z$. This means that if we stick to using the AC-DC intensity ratio +($\frac{\dd \Il}{\Il}$) we can forget about the DC contribution +completely\footnote{ +If the changing-$L$-but-static-$\Ldc$ thing bothers you, you can +imagine insteadthat $\Ldc$ grows with $L$, but \cdci shrinks +proportially (to conserve mass). With this proportionate stretching, +there is still no change in absorbtion for that component so +$\deriv{}{L}\exp(-\cdci\edcil L)=0$ and we can still pull the DC +terms out of the integral as we did for Eq.~\ref{eq:dI-I}.}. + +Taking a ratio of these amplitudes at two different wavelengths, we +get optical density ratio +\nomenclature{$R$}{Optical density ratio} +\begin{equation} + R = \frac{\frac{AC_{660}}{DC_{660}}}{\frac{AC_{940}}{DC_{940}}} + = \frac{\frac{\dd I_{660}}{I_{660}}}{\frac{\dd I_{940}}{I_{940}}} + = \frac{-Z_{660} \dd L}{-Z_{940} \dd L} + = \frac{Z_{660}}{Z_{940}} \;, +\end{equation} +because $\dd L$ (the amount of finger expansion during a pulse) +obviously doesn't depend on the color light you are using ;). +Plugging back in for $Z$, +\begin{equation} + R = \frac{\cacx{1}\eiA{1} + \cacx{2}\eiB{2} + \ldots} + {\cacx{1}\eiB{1} + \cacx{2}\eiB{2} + \ldots} \;. +\end{equation} +Assuming, for now, that there are only two species of \Hb, \Hb\Ox and +\HHb, we can solve for $\cacx{1}/\cacx{2}$. +\begin{align} + R &= \frac{\cacx{1}\eiA{1} + \cacx{2}\eiA{2}} + {\cacx{1}\eiB{1} + \cacx{2}\eiB{2}} \\ + R(\cacx{1}\eiB{1} + \cacx{2}\eiB{2}) + &= \cacx{1}\eiA{1} + \cacx{2}\eiA{2} \\ + \cacx{1} (R\eiB{1} - \eiA{1}) &= \cacx{2} (\eiA{2} - R\eiB{2}) \\ + \frac{\cacx{1}}{\cacx{2}} &= \frac{\eiA{2} - R\eiB{2}}{R\eiB{1} - \eiA{1}} + \;. +\end{align} +So now we know $\C{\Hb\Ox}/\C{\HHb}$ in terms of the measured quantity +$R$. + +Plugging in to Eq.~\ref{eq:funcSO} to find the functional saturation +\begin{align} + \SOf &= \frac{\C{\Hb\Ox}}{\C{\Hb\Ox} + \C{\HHb}} + = \frac{1}{1 + \frac{\C{\HHb}}{\C{\Hb\Ox}}} + = \frac{1}{1 + \frac{\cacx{2}}{\cacx{1}}} + = \frac{1}{1 + \frac{R\eiB{1} - \eiA{1}}{\eiA{2}-R\eiB{2}}} + \;. \label{eq:SOfvR} +\end{align} + +As a check, we can rephrase this as +\begin{align} + \SOf &= \frac{1}{1 + \frac{R\eiB{1} - \eiA{1}}{\eiA{2} - R\eiB{2}}} + = \frac{\eiA{2} - R\eiB{2}}{\eiA{2} - R\eiB{2} + R\eiB{1} - \eiA{1}} \\ + &= \frac{\eiA{2} - \eiB{2}R}{\eiA{2} - \eiA{1} + (\eiB{1} - \eiB{2})R} + = \frac{-\eiA{2} + \eiB{2}R}{\eiA{1} - \eiA{2} + (\eiB{2} - \eiB{1})R} + \;, +\end{align} +which matches \citet{mendelson1989}, Eq.~8 with the translations +$\SOf\rightarrow\SxO{p}$, $R\rightarrow R/IR$, +$\eiA{2}\rightarrow\epsilon_R(\HHb)$, +$\eiB{2}\rightarrow\epsilon_IR(\HHb)$, +$\eiA{1}\rightarrow\epsilon_R(\Hb\Ox)$, and +$\eiB{1}\rightarrow\epsilon_IR(\Hb\Ox)$. + +And that is the first-order explaination of how a pulse-oximeter +measures the functional saturation! + +Reading extinction coefficients off Fig.~\ref{fig:absorbtion}, I get +\begin{align} + \epsilon_{\Hb\Ox,660} &= \eiA{1} = 0.10 \\ + \epsilon_{\HHb,660} &= \eiA{2} = 0.83 \\ + \epsilon_{\Hb\Ox,940} &= \eiB{1} = 0.29 \\ + \epsilon_{\HHb,940} &= \eiB{2} = 0.17 +\end{align} +which are comfortingly close to those given by \citet{mendelson1989} +in their Table~1. The corresponding $\SOf(R)$ plot can be seen in +Fig.~\ref{fig:SfOvR-theory}. + +\begin{figure} + \begin{center} + \subfloat[]{\label{fig:SfOvR-experiment} + \includegraphics[width=0.48\textwidth]{fig/SPO2vR}} + \subfloat[]{\label{fig:SfOvR-theory} + \includegraphics[width=0.40\textwidth]{fig/SfO2vR-theory}} + \end{center} + \caption{Comparison of (a) an experimental calibration + curve\citep{tremper1989} with (b) a theoretical calibration curve + calculated using Eq.~\ref{eq:SOfvR}. This is why it's a good idea + to use an empirical calibration curve ;).\label{fig:SfOvR}} + % concave theoretical SfO2vR theory curve supported by + % mendelson1989, Fig. 4. +\end{figure} + +%, because LEDs are finicky, it's hard to know how bright they are +%without looking ;). Therefore, we'd like to work $\Iol$ out of the +%picture. As blood pulses through the finger, imagine that the +%concentrations + +\printnomenclature + +\phantomsection +\addcontentsline{toc}{section}{References} +\bibliography{main} + +\end{document} -- 2.26.2