From 71bfefb05d27f1021a1da11c60ea3bcd70ebf6ae Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Thu, 23 Feb 2012 13:05:01 -0500 Subject: [PATCH] Convert pulse oxymetry post from LaTeX to Markdown/itex (avoid external build). --- Makefile | 17 +- local.css | 5 + posts/Pulse_oxymetry.mdwn | 19 - posts/Pulse_oxymetry.mdwn_itex | 560 ++++++++++++++++++ posts/Pulse_oxymetry/SConstruct | 11 - posts/Pulse_oxymetry/{fig => }/SPO2vR.png | Bin posts/Pulse_oxymetry/SfO2vR-theory.png | Bin 0 -> 71502 bytes .../Pulse_oxymetry/{fig => }/SfO2vR-theory.py | 0 posts/Pulse_oxymetry/{fig => }/absorbtion.png | Bin posts/Pulse_oxymetry/{fig => }/ac-dc.png | Bin posts/Pulse_oxymetry/main.bib | 25 - posts/Pulse_oxymetry/main.tex | 499 ---------------- 12 files changed, 567 insertions(+), 569 deletions(-) delete mode 100644 posts/Pulse_oxymetry.mdwn create mode 100644 posts/Pulse_oxymetry.mdwn_itex delete mode 100644 posts/Pulse_oxymetry/SConstruct rename posts/Pulse_oxymetry/{fig => }/SPO2vR.png (100%) create mode 100644 posts/Pulse_oxymetry/SfO2vR-theory.png rename posts/Pulse_oxymetry/{fig => }/SfO2vR-theory.py (100%) rename posts/Pulse_oxymetry/{fig => }/absorbtion.png (100%) rename posts/Pulse_oxymetry/{fig => }/ac-dc.png (100%) delete mode 100644 posts/Pulse_oxymetry/main.bib delete mode 100644 posts/Pulse_oxymetry/main.tex diff --git a/Makefile b/Makefile index c734fa8..7c0aafa 100644 --- a/Makefile +++ b/Makefile @@ -5,23 +5,10 @@ SUBDIRS = posts/drexel-thesis posts/problempack \ posts/XSLT/chapter posts/XSLT/code TARGETS = all clean -SCONS_SUBDIRS = posts/Pulse_oxymetry - - -all : make-all scons-all -clean : make-clean scons-clean +all : make-all +clean : make-clean $(TARGETS:%=make-%) : @for i in $(SUBDIRS); do \ 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/local.css b/local.css index 5cda467..c61564d 100644 --- a/local.css +++ b/local.css @@ -84,3 +84,8 @@ code { color: gray; font-family: monospace; } + +.center { + margin-left: auto; + margin-right: auto; +} diff --git a/posts/Pulse_oxymetry.mdwn b/posts/Pulse_oxymetry.mdwn deleted file mode 100644 index 2e11910..0000000 --- a/posts/Pulse_oxymetry.mdwn +++ /dev/null @@ -1,19 +0,0 @@ -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 cautious 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|main.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.mdwn_itex b/posts/Pulse_oxymetry.mdwn_itex new file mode 100644 index 0000000..755daab --- /dev/null +++ b/posts/Pulse_oxymetry.mdwn_itex @@ -0,0 +1,560 @@ +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 cautious 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 to +the pulse-ox noise ;). Highlights include: + +* Short and sweet (with pictures) +* [Symbols table](#nomenclature) +* Baby steps during math manipulation + +Oxygen content +============== + +The circulatory system distributes oxygen ([O₂](#O2)) throughout the +body. The amount of O₂ at any given point is measured by the O₂ +content ([O₂]), usually given in $\frac{\text{mL O₂ at BTP}}{\text{dL +blood}}$ ([BTP](#BTP) is my acronym for body temperature and +pressure). Most transported O₂ is bound to [hemoglobin][] +([Hb](#Hb)), but there is also free O₂ disolved directly in the plasma +and cytoplasm of suspended cells. + + + + +\[ [\text{O₂}] = a\text{[Hb]}\text{S}_\text{O₂} + b\text{P}_\text{O₂} \;, \] + +where [$\text{S}_\text{O₂}$](#S-O2) is the Hb's O₂ saturation and +[$\text{P}_\text{O₂}$](#P-O2) is the O₂ 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 O₂ is given by its [partial pressure][partial] +($\text{P}_\text{O₂}$). Partial pressures are generally given in mm +of mercury ([Hg](#Hg)) at standard temperature and pressure +([STP](#STP)). Because the partial pressure changes as blood flows +through the body, an additional specifier $i$ may be added +([$\text{P}i_\text{O₂}$](#Pi-O2)) to clarify the measurement location. + + + + + + + + + + + +
$i$Full symbolLocation descriptor
a$\text{Pa}_\text{O₂}$arterial
p$\text{Pp}_\text{O₂}$peripheral or pulsatile
t$\text{Pt}_\text{O₂}$tissue
v$\text{Pv}_\text{O₂}$venous
+ +O₂ is carried in the blood primarily through binding to hemoglobin +monomers (Hb), with each monomer potentially binding a single O₂. +Oxygen saturation ($\text{S}_\text{O₂}$) is the fraction of hemoglobin +monomers (Hb) that have bound an oxygen molecule (O₂). + + + +\[ \text{S}_\text{O₂} = \frac{\text{[HbO₂]}}{\text{[Hb]}} \;. \] + +The ratio of concentrations, $\text{S}_\text{O₂}$, is unitless. It +is often expressed as a percentage. [Hb] is often given in g/dL. As +with partial pressures, an additional specifier $i$ may be added +([$\text{S}i_\text{O₂}$](#Si-O2)) to clarify the measurement location +($\text{Sa}_\text{O₂}$, $\text{Sp}_\text{O₂}$, …). + +Now we can take a second look at our [O₂ content +formula](#eq:O2-symbolic). The coefficient $a$ must convert g/dL +to $\frac{\text{mL O₂ at BTP}}{\text{dL blood}}$. Using the molecular +weight of Hb and the [volume of a mole of gas at STP][mole-volume]: + + + +\[ +\begin{aligned} + \text{[Hb]} &= \chi \frac{\text{g Hb}}{\text{dL blood}} + \cdot\frac{1\text{ mol Hb}}{17\text{ kg Hb}} + \cdot\frac{1\text{ mol O₂}}{1\text{ mol Hb}} + \cdot\frac{\sim1\text{ mol ideal gas}}{1\text{ mol O₂}} + \cdot\frac{22.4\text{ L ideal gas at STP}}{1\text{ mol ideal gas}} + \cdot\frac{\sim1\text{ L ideal gas at BTP}}{1\text{ L ideal gas at STP}} + \\ + &\approx + \chi \frac{\text{g Hb}}{\text{dL blood}} + \cdot 1.32 \frac{\text{mL O₂ at BTP}}{\text{g Hb}} + = 1.32\chi \frac{\text{mL O₂ at BTP}}{\text{dL blood}} \;, +\end{aligned} +\] + +where $\chi$ is a pure number (we're just working out the unit +conversion here, not converting a particular Hg concentration). +Therefore, $a=1.32 \frac{\text{mL O₂ at BTP}}{\text{g Hb}}$. The +powers that be seem to have used a slightly different density, since +the more commonly used value is 5% higher at $1.39$. Possibly someone +actually measured the density of O₂ at BTP, because BTP is not STP, +and O₂ is not an ideal gas. + +The coefficient $b$ must convert mm Hg at STP +to $\frac{\text{mL O₂ at BTP}}{\text{dL blood}}$. Empirical +experiments (?) give a value +of $b=0.003\frac{\text{mL O₂ at BTP}}{\text{dL blood ⋅ mm Hg at STP}}$. +Now we can write out the familiar form + + + +\[ \text{[O₂]} + = 1.39 \frac{\text{mL O₂ at BTP}}{\text{g Hb}} [Hb] \text{S}_\text{O₂} + + 0.003\frac{\text{mL O₂ at BTP}} + {\text{dL blood } \cdot \text{ mm Hg at STP}} + \text{P}_\text{O₂} \;. \] + +Reasonable levels are + + + + + + + +
[Hb]$14\frac{\text{g Hb}}{\text{dL blood}}$
$\text{S}_\text{O₂}$98%
$\text{P}_\text{O₂}$100 mm Hg at STP
$1.39 \frac{\text{mL O₂}}{\text{g Hb}}\text{[Hb]}\text{S}_\text{O₂}$ $19.1\frac{\text{mL O₂ at BTP}}{\text{dL blood}}$
$0.003\frac{\text{mL O₂ at BTP}} + {\text{dL blood } \cdot \text{ mm Hg at STP}}\text{P}_\text{O₂}$ + $0.300\frac{\text{mL O₂ at BTP}}{\text{dL blood}}$
+ +Because the dissolved O₂ has such a tiny contribution (1.5% of the +total in my example), it is often measured at STP rather than BTP. +Sometimes it is dropped from the calculation entirely. We focus on +the more imporant $\text{[Hb]}\text{S}_\text{O₂}$ in the next section. + +Oxygen saturation +================= + +The [preceding](#eq:S-O2) [discussion](#eq:O2) +used $\text{[Hb]}\text{S}_\text{O₂}$ to represent the concentration of +HbO₂ complexes. 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: + +* [Hb](#Hb): all hemoglobin monomers +* [HbO₂](#HHb): monomers complexed with O₂ +* [HHb](#HHb): reduced Hb (not complexed with O₂) +* [dysHb](#dysHb): dys-hemoglobin (cannot complex with O₂) +* [MHb](#MHb): methemoglobin +* [HbCO](#HbCO): carboxyhemoglobin + +These species are related as follows + +\[ +\begin{aligned} + \text{[Hb]} &= \text{[HbO₂]} + \text{[HHb]} + \text{[dysHb]} \\ + \text{[dysHb]} &= \text{[MHb]} + \text{[HbCO]} + \text{other broken forms} +\end{aligned} +\] + +Because modern two-color pulse-oximeters don't +measure $\text{S}_\text{O₂}$ exactly, the related quantity that they +*do* measure has been given a name of its own: the *functional* +saturation ([$\text{Sf}_\text{O₂}$](#Sf-O2)). + + + +\[ + \text{Sf}_\text{O₂} = \frac{\text{[HbO₂]}}{\text{[HbO₂]} + \text{[HHb]}} \;. +\] + +Rephrasing our [earlier saturation](#eq:S-O2), we see + + + +\[ + \text{S}_\text{O₂} = \frac{\text{[HbO₂]}}{\text{[Hb]}} + = \frac{\text{[HbO₂]}}{\text{[HbO₂]} + \text{[HHb]} + \text{[dysHb]}} \;. +\] + +To avoid confusion with $\text{Sf}_\text{O₂}$, our +original $\text{S}_\text{O₂}$ is sometimes referred to as the +*fractional* saturation. + +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 (HbO₂, HHb, MHb, HbCO, …) 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 (see [Tremper 1989][T89]). + +[[!img absorbtion.png + size="600x418" + alt="Absorbance spectra for assorted hemoglobin species" + caption="Absorbance spectra for assorted hemoglobin species (Tremper 1989)"]] + +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 [Beer-Lambert law][BL]. + + + +\[ I = I_0 e^{-c \epsilon L} \;, \] + +where [$I_0$](#I0) is the incident intensity (entering the tissue), +[$I$](#I0lambda) is the tranmitted intensity (leaving the tissue), +[$c$](#c) is the tissue density (concentration), +[$\epsilon$](#eilambda) is the extinction coefficient (molar +absorbtivity), and [$L$](#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$, … and extinction +coefficients $\epsilon_1$, $\epsilon_2$, …. + +\[ I = I_0 e^{-(c_1 \epsilon_1 + c_2 \epsilon_2 + \ldots) L} \;. \] + +We also notice that the intensities and extinction coefficients may +all depend on the wavelength of light $\lambda$, so we should really +write + + + +\[ + I_\lambda = I_{0\lambda} e^{-(c_1 \epsilon_{1\lambda} + + c_2 \epsilon_{2\lambda} + \ldots) L} \;. +\] + +Once isolated, a simple spectroscopy experiment can measure the +extinction coefficient [$\epsilon_{i\lambda}$](#eilambda) 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 the last equation to find +a way to extract the unknown concentrations, which we can then use to +[calculate the $\text{Sf}_\text{O₂}$](#eq:Sfunc-O2) and +[$\text{S}_\text{O₂}$](#eq:Sfrac-O2) which we can use in turn to +calculate [$\text{[O₂]}$](#eq:O2). + +Note that by increasing the number of [LEDs](#LED) (adding +new $\lambda$) we increase the number of constraints on the +unknown $c_i$. A traditional pulse-oximeter uses two LEDs, at 660 nm +and 940 nm, to measure $\text{Sf}_\text{O₂}$ (related to [HbO₂] and +[HHb]). More recent designs called [pulse CO-oximeters][CO-ox] use +more wavelengths to allow measurement of quanties related to +additional species (approaching the end goal of +measuring $\text{S}_\text{O₂}$). + +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. Here's another figure from [Tremper][T89]: + + + +[[!img ac-dc.png + size="600x204" + alt="AC and DC transmission components" + caption="AC and DC transmission components (Tremper)"]] + +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 $\mathrm{d} 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{aligned} + \frac{\mathrm{d} I_\lambda}{\mathrm{d} L} + &= \frac{\mathrm{d}}{\mathrm{d}L} + \left(I_{0\lambda} + e^{-(c_1 \epsilon_{1\lambda} + + c_2 \epsilon_{2\lambda} + \ldots) L}\right) + = \frac{\mathrm{d}}{\mathrm{d} L} \left( I_{0\lambda} e^{-X L} \right) + = -X I_{0\lambda} e^{-X L} + = -XI_\lambda \\ + \frac{\mathrm{d} I_\lambda}{I_\lambda} + &= -X \mathrm{d} L \;, +\end{aligned} +\] + +where $X=c_1 \epsilon_{1\lambda} + c_2 \epsilon_{2\labmda} + \ldots$ +is just a placeholder to reduce clutter. $\mathrm{d} I_\lambda$ is +the AC amplitude (height of wiggle top of the detected light intensity +due to pulsatile arterial blood), while $I_\lambda$ 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 coming in during a pulse (by definition), the effective $L$ +for the DC components does not change. Separating the DC and AC +components and running through the derivative again, we have + + + +\[ +\begin{aligned} + \frac{\mathrm{d} I_\lambda}{\mathrm{d} L} + &= \frac{\mathrm{d}}{\mathrm{d} L} \left( + I_{0\lambda} + e^{-(c_{\text{DC}1}\epsilon_{\text{DC}1\lambda} + +c_{\text{DC}2}\epsilon_{\text{DC}2\lambda} + \ldots) + L_\text{DC} + -(c_{\text{AC}1}\epsilon_{\text{AC}1\lambda} + +c_{\text{AC}2}\epsilon_{\text{AC}2\lambda} + \ldots) + L_\text{AC}} + \right) \\ + &= I_{0\lambda} + e^{-(c_{\text{DC}1}\epsilon_{\text{DC}1\lambda} + +c_{\text{DC}2}\epsilon_{\text{DC}2\lambda} + \ldots) + L_\text{DC}} + \frac{\mathrm{d}}{\mathrm{d} L} \left( + e^{-(c_{\text{AC}1}\epsilon_{\text{AC}1\lambda} + +c_{\text{AC}2}\epsilon_{\text{AC}2\lambda} + \ldots) + L_\text{AC}} + \right) \\ + &= I_{0\lambda} Y \frac{\mathrm{d}}{\mathrm{d} L} \left( + e^{-Z L_\text{AC}} \right) + = -Z I_{0\lambda} Y e^{-Z L_\text{AC}} + = -Z I_\lambda \\ + \frac{\mathrm{d} I_\lambda}{I_\lambda} &= -Z \mathrm{d} L \;, +\end{aligned} +\] + +where $Y=e^{-(c_{\text{DC}1}\epsilon_{\text{DC}1\lambda} + +c_{\text{DC}2}\epsilon_{\text{DC}2\lambda} + \ldots) + L_\text{DC}}$ +and $Z=c_{\text{AC}1}\epsilon_{\text{AC}1\lambda} + +c_{\text{AC}2}\epsilon_{\text{AC}2\lambda} + \ldots)$ +are just placeholders to reduce clutter. Note that the [last +equation](#eq:dI-I) looks just like the [previous one](#eq:dI-I-naive) +with the translation $X\rightarrow Z$. This means that if we stick to +using the AC-DC intensity ratio ($\frac{\mathrm{d} \Il}{\Il}$) we can +forget about the DC contribution completely. + +If the changing-$L$-but-static-$L_\text{DC}$ thing bothers you, you +can imagine insteadthat $L_\text{DC}$ grows with $L$, +but $c_{\text{DC}i}$ shrinks proportially (to conserve mass). With +this proportionate stretching, there is still no change in absorbtion +for that component +so $\frac{\mathrm{d}}{\mathrm{d}L}\exp(-c_{\text{DC}i}\epsilon_{\text{DC}i\lambda}L)=0$ +and we can still pull the DC terms out of the integral as we +[just did](#eq:dI-I). + +Taking a ratio of these amplitudes at two different wavelengths, we +get optical density ratio ([R](#R)) + + + +\[ + R = \frac{\frac{\text{AC}_{660}}{\text{DC}_{660}}} + {\frac{\text{AC}_{940}}{\text{DC}_{940}}} + = \frac{\frac{\mathrm{d} I_{660}}{I_{660}}} + {\frac{\mathrm{d} I_{940}}{I_{940}}} + = \frac{-Z_{660} \mathrm{d} L}{-Z_{940} \mathrm{d} L} + = \frac{Z_{660}}{Z_{940}} \;, +\] + +because $\mathrm{d} 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$, + + + +\[ + R = \frac{c_{\text{AC}1}\epsilon_{\text{AC}1,660} + + c_{\text{AC}2}\epsilon_{\text{AC}2,660} + \ldots} + {c_{\text{AC}1}\epsilon_{\text{AC}1,940} + + c_{\text{AC}2}\epsilon_{\text{AC}2,940} + \ldots} +\] + +Assuming, for now, that there are only two species of Hb—HbO₂ and +HHb—we can solve for $c_{\text{AC}1}/c_{\text{AC}2}$. + +\[ +\begin{aligned} + R &= \frac{c_{\text{AC}1}\epsilon_{\text{AC}1,660} + + c_{\text{AC}2}\epsilon_{\text{AC}2,660}} + {c_{\text{AC}1}\epsilon_{\text{AC}1,940} + + c_{\text{AC}2}\epsilon_{\text{AC}2,940}} \\ + R(c_{\text{AC}1}\epsilon_{\text{AC}1,940} + + c_{\text{AC}2}\epsilon_{\text{AC}2,940}) + &= c_{\text{AC}1}\epsilon_{\text{AC}1,660} + + c_{\text{AC}2}\epsilon_{\text{AC}2,660} \\ + c_{\text{AC}1} (R\epsilon_{\text{AC}1,940} - \epsilon_{\text{AC}1,660}) + &= c_{\text{AC}2} (\epsilon_{\text{AC}2,660} - R\epsilon_{\text{AC}2,940}) + \\ + \frac{c_{\text{AC}1}}{c_{\text{AC}2}} + &= \frac{\epsilon_{\text{AC}2,660} - R\epsilon_{\text{AC}2,940}} + {R\epsilon_{\text{AC}1,940} - \epsilon_{\text{AC}1,660}} + \;. +\end{aligned} +\] + +So now we know [HbO₂]/[HHb] in terms of the measured quantity $R$ and +the empirical values $\epsilon$. + +Plugging in to our [equation for $\text{Sf}_\text{O₂}$](#eq:Sfunc-O2) +to find the functional saturation: + + + +\[ +\begin{aligned} + \text{Sf}_\text{O₂} &= \frac{\text{[HbO₂]}}{\text{[HbO₂]} + \text{[HHb]}} + = \frac{1}{1 + \frac{\text{[HHb]}}{\text{[HbO₂]}}} + = \frac{1}{1 + \frac{c_{\text{AC}2}}{c_{\text{AC}1}}} + = \frac{1} + {1 + \frac{R\epsilon_{\text{AC}1,940} - \epsilon_{\text{AC}1,660}} + {\epsilon_{\text{AC}2,660} - R\epsilon_{\text{AC}2,940}}} + \;. +\end{aligned} +\] + +As a check, we can rephrase this as + +\[ +\begin{aligned} + \text{Sf}_\text{O₂} + &= \frac{1} + {1 + \frac{R\epsilon_{\text{AC}1,940} - \epsilon_{\text{AC}1,660}} + {\epsilon_{\text{AC}2,660} - R\epsilon_{\text{AC}2,940}}} + = \frac{\epsilon_{\text{AC}2,660} - R\epsilon_{\text{AC}2,940}} + {\epsilon_{\text{AC}2,660} - R\epsilon_{\text{AC}2,940} + + R\epsilon_{\text{AC}1,940} - \epsilon_{\text{AC}1,660}} \\ + &= \frac{\epsilon_{\text{AC}2,660} - R\epsilon_{\text{AC}2,940}} + {\epsilon_{\text{AC}2,660} - \epsilon_{\text{AC}1,660} + + (\epsilon_{\text{AC}1,940} - \epsilon_{\text{AC}2,940})R} + = \frac{-\epsilon_{\text{AC}2,660} + \epsilon_{\text{AC}2,940}R} + {\epsilon_{\text{AC}1,660} - \epsilon_{\text{AC}2,660} + + (\epsilon_{\text{AC}2,940} - \epsilon_{\text{AC}1,940})R} + \;, +\end{aligned} +\] + +which matches [Mendelson 1989][M89], Eq. 8 with the translations: + +* $\text{Sf}_\text{O₂}\rightarrow Sp\text{O₂}$, +* $R\rightarrow R/IR$, +* $\epsilon_{\text{AC}2,660}\rightarrow\epsilon_R(\text{Hb})$, +* $\epsilon_{\text{AC}2,940}\rightarrow\epsilon_IR(\text{Hb})$, +* $\epsilon_{\text{AC}1,660}\rightarrow\epsilon_R(\text{HbO₂})$, and +* $\epsilon_{\text{AC}1,940}\rightarrow\epsilon_IR(\text{HbO₂})$. + +And that is the first-order explaination of how a pulse-oximeter +measures the functional saturation! + +Reading extinction coefficients off the [absorbtion +figure](#fig:absorbtion), I get + +\[ +\begin{aligned} + \epsilon_{\text{HbO₂},660} &= \epsilon_{\text{AC}1,660} = 0.10 \\ + \epsilon_{\text{HHb},660} &= \epsilon_{\text{AC}2,660} = 0.83 \\ + \epsilon_{\text{HbO₂},940} &= \epsilon_{\text{AC}1,940} = 0.29 \\ + \epsilon_{\text{HHb},940} &= \epsilon_{\text{AC}2,940} = 0.17 +\end{aligned} +\] + +which are comfortingly close to those given by [Mendelson][M89] in +Table 1. The corresponding $\text{Sf}_\text{O₂}(R)$ plot (from +[Tremper][T89]) is: + +[[!img SPO2vR.png + size="400x330" + alt="Experimental SpO₂ vs. R" + caption="Experimental SpO₂ vs. R (Tremper)"]] + +[[!img SfO2vR-theory.png + size="300x300" + alt="Theoretical SfO₂ vs. R" + caption="Theoretical SfO₂ vs. R."]] + +The theoretical plot was calculated using [[SfO2vR-theory.py]] and +[our $\text{Sf}_\text{O₂}$ equation](#eq:Sfunc-O2-R). This is why +it’s a good idea to use an empirical calibration curve! The concave +theoretical curve is supported by [Mendelson's figure 4][M89]. + + + + + +Nomenclature +============ + +
+
O₂
Molecular oxygen
+
[$x$]
Concentration of $x$ in the blood
+
BTP
Body temperature and pressure
+
STP
+
+ Standard temperature and pressure
+
$\text{P}_\text{O₂}$
O₂ partial pressure
+
$\text{P}i_\text{O₂}$
+
O₂ partial pressure at location $i$
+
$\text{S}_\text{O₂}$
+
Fractional O₂ saturation
+
$\text{S}i_\text{O₂}$
+
O₂ fractional saturation at location $i$
+
$\text{Sf}_\text{O₂}$
+
Functional O₂ saturation
+
Hg
Mercury
+
Hb
Hemoglobin monomer
+
HbO₂
Hemoglobin monomers complexed with O₂
+
HHb
Reduced hemoglobin (not complexed with O₂)
+
dysHb
Dys-hemoglobin (cannot complex with O₂)
+
MHb
+
+ Methemoglobin
+
HbCO
+
+ Carboxyhemoglobin
+
$I_{0\lambda}$
+
Intensity of incident light at wavelength $\lambda$
+
$I_\lambda$
+
Intensity of transmitted light at wavelength $\lambda$
+
$c_i$
+
Concentration of light-absorbing species $i$
+
$c_{\text{DC}i}$
+
Concentration of the $i$th DC species at wavelength $\lambda$
+
$c_{\text{AC}i}$
+
Concentration of the $i$th AC species at wavelength $\lambda$
+
$\epsilon_{i\lambda}$
+
Extinction coefficient of species $i$ at wavelength $\lambda$
+
$\epsilon_{\text{DC}i\lambda}$
+
Extinction coefficient of the $i$th DC species + wavelength $\lambda$
+
$\epsilon_{\text{DC}i\lambda}$
+
Extinction coefficient of the $i$th DC species + wavelength $\lambda$
+
$L$
Length of tissue through which light must pass
+
$L_\text{DC}$
Diastolic finger width
+
$R$
Optical density ratio}
+
LED
Light emitting diode
+
+ + +[pox]: http://en.wikipedia.org/wiki/Pulse_oximeter +[art]: http://journals.lww.com/anesthesiology/Citation/1989/01000/Pulse_Oximetry.19.aspx +[hemoglobin]: http://en.wikipedia.org/wiki/Hemoglobin +[partial]: http://en.wikipedia.org/wiki/Partial_pressure +[mole-volume]: http://hyperphysics.phy-astr.gsu.edu/hbase/kinetic/idegas.html +[T89]: http://journals.lww.com/anesthesiology/Citation/1989/01000/Pulse_Oximetry.19.aspx +[BL]: http://en.wikipedia.org/wiki/Beer\%E2\%80\%93Lambert_law +[CO-ox]: http://en.wikipedia.org/wiki/Co-oximeter +[M89]: http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=30810 + +[[!tag tags/theory]] diff --git a/posts/Pulse_oxymetry/SConstruct b/posts/Pulse_oxymetry/SConstruct deleted file mode 100644 index 306becd..0000000 --- a/posts/Pulse_oxymetry/SConstruct +++ /dev/null @@ -1,11 +0,0 @@ -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/SPO2vR.png similarity index 100% rename from posts/Pulse_oxymetry/fig/SPO2vR.png rename to posts/Pulse_oxymetry/SPO2vR.png diff --git a/posts/Pulse_oxymetry/SfO2vR-theory.png b/posts/Pulse_oxymetry/SfO2vR-theory.png new file mode 100644 index 0000000000000000000000000000000000000000..f1b7229930e827e501456e5e3c64c049c7e4874b GIT binary patch literal 71502 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 LS@!Ne<4gYw8R0>! literal 0 HcmV?d00001 diff --git a/posts/Pulse_oxymetry/fig/SfO2vR-theory.py b/posts/Pulse_oxymetry/SfO2vR-theory.py similarity index 100% rename from posts/Pulse_oxymetry/fig/SfO2vR-theory.py rename to posts/Pulse_oxymetry/SfO2vR-theory.py diff --git a/posts/Pulse_oxymetry/fig/absorbtion.png b/posts/Pulse_oxymetry/absorbtion.png similarity index 100% rename from posts/Pulse_oxymetry/fig/absorbtion.png rename to posts/Pulse_oxymetry/absorbtion.png diff --git a/posts/Pulse_oxymetry/fig/ac-dc.png b/posts/Pulse_oxymetry/ac-dc.png similarity index 100% rename from posts/Pulse_oxymetry/fig/ac-dc.png rename to posts/Pulse_oxymetry/ac-dc.png diff --git a/posts/Pulse_oxymetry/main.bib b/posts/Pulse_oxymetry/main.bib deleted file mode 100644 index 3ab909e..0000000 --- a/posts/Pulse_oxymetry/main.bib +++ /dev/null @@ -1,25 +0,0 @@ -@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 deleted file mode 100644 index 8a4a7b7..0000000 --- a/posts/Pulse_oxymetry/main.tex +++ /dev/null @@ -1,499 +0,0 @@ -\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