My wife was recently reviewing some pulse oxymeter 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 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
  • Baby steps during math manipulation

Oxygen content

The circulatory system distributes oxygen (O₂) throughout the body. The amount of O₂ at any given point is measured by the O₂ content ([O₂]), usually given in mL O₂ at BTPdL blood (BTP is my acronym for body temperature and pressure). Most transported O₂ is bound to hemoglobin (Hb), but there is also free O₂ disolved directly in the plasma and cytoplasm of suspended cells.

(1)[O₂]=a[Hb]S O₂+bP O₂,

where S O₂ is the Hb's O₂ saturation and P O₂ 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 (P O₂). Partial pressures are generally given in mm of mercury (Hg) at standard temperature and pressure (STP). Because the partial pressure changes as blood flows through the body, an additional specifier i may be added (Pi O₂) to clarify the measurement location.

iFull symbolLocation descriptor
aPa O₂ arterial
pPp O₂ peripheral or pulsatile
tPt O₂ tissue
vPv 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 (S O₂) is the fraction of hemoglobin monomers (Hb) that have bound an oxygen molecule (O₂).

(2)S O₂=[HbO₂][Hb].

The ratio of concentrations, S 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 (Si O₂) to clarify the measurement location (Sa O₂, Sp O₂, …).

Now we can take a second look at our O₂ content formula. The coefficient a must convert g/dL to mL O₂ at BTPdL blood. Using the molecular weight of Hb and the volume of a mole of gas at STP:

(3)[Hb] =χg HbdL blood1 mol Hb17 kg Hb1 mol O₂1 mol Hb1 mol ideal gas1 mol O₂22.4 L ideal gas at STP1 mol ideal gas1 L ideal gas at BTP1 L ideal gas at STP χg HbdL blood1.32mL O₂ at BTPg Hb=1.32χmL O₂ at BTPdL blood,

where χ is a pure number (we're just working out the unit conversion here, not converting a particular Hg concentration). Therefore, a=1.32mL O₂ at BTPg 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 mL O₂ at BTPdL blood. Empirical experiments (?) give a value of b=0.003mL O₂ at BTPdL blood ⋅ mm Hg at STP. Now we can write out the familiar form

(4)[O₂]=1.39mL O₂ at BTPg Hb[Hb]S O₂+0.003mL O₂ at BTPdL blood mm Hg at STPP O₂.

Reasonable levels are

[Hb]14g HbdL blood
S O₂98%
P O₂100 mm Hg at STP
1.39mL O₂g Hb[Hb]S O₂ 19.1mL O₂ at BTPdL blood
0.003mL O₂ at BTPdL blood mm Hg at STPP O₂ 0.300mL O₂ at BTPdL 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 [Hb]S O₂ in the next section.

Oxygen saturation

The preceding discussion used [Hb]S 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: all hemoglobin monomers
  • HbO₂: monomers complexed with O₂
  • HHb: reduced Hb (not complexed with O₂)
  • dysHb: dys-hemoglobin (cannot complex with O₂)
  • MHb: methemoglobin
  • HbCO: carboxyhemoglobin

These species are related as follows

(5)[Hb] =[HbO₂]+[HHb]+[dysHb] [dysHb] =[MHb]+[HbCO]+other broken forms

Because modern two-color pulse-oximeters don't measure S O₂ exactly, the related quantity that they do measure has been given a name of its own: the functional saturation (Sf O₂).

(6)Sf O₂=[HbO₂][HbO₂]+[HHb].

Rephrasing our earlier saturation, we see

(7)S O₂=[HbO₂][Hb]=[HbO₂][HbO₂]+[HHb]+[dysHb].

To avoid confusion with Sf O₂, our original S 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, and they have been using this difference since the 1930's to make pulse-oximeters based on two-color transmittance measurements (see Tremper 1989).

Absorbance spectra for assorted hemoglobin species (Tremper 1989)
Absorbance spectra for assorted hemoglobin species

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.

(8)I=I 0e cϵL,

where I 0 is the incident intensity (entering the tissue), I is the tranmitted intensity (leaving the tissue), c is the tissue density (concentration), ϵ 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 ϵ) 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 ϵ 1, ϵ 2, ….

(9)I=I 0e (c 1ϵ 1+c 2ϵ 2+)L.

We also notice that the intensities and extinction coefficients may all depend on the wavelength of light λ, so we should really write

(10)I λ=I 0λe (c 1ϵ 1λ+c 2ϵ 2λ+)L.

Once isolated, a simple spectroscopy experiment can measure the extinction coefficient ϵ iλ of a given species across a range of λ, 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 Sf O₂ and S O₂ which we can use in turn to calculate [O₂].

Note that by increasing the number of LEDs (adding new λ) 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 Sf O₂ (related to [HbO₂] and [HHb]). More recent designs called pulse CO-oximeters use more wavelengths to allow measurement of quanties related to additional species (approaching the end goal of measuring S 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:

AC and DC transmission components (Tremper)
AC and DC transmission components

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 dL/L=(LL)/L is very small. Assuming the change in concentration is even smaller (since most liquids are fairly incompressible), we have

(11)dI λdL =ddL(I 0λe (c 1ϵ 1λ+c 2ϵ 2λ+)L)=ddL(I 0λe XL)=XI 0λe XL=XI λ dI λI λ =XdL,

where X=c 1ϵ 1λ+c 2ϵ 2labmda+ is just a placeholder to reduce clutter. dI λ is the AC amplitude (height of wiggle top of the detected light intensity due to pulsatile arterial blood), while I λ 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

(12)dI λdL =ddL(I 0λe (c DC1ϵ DC1λ+c DC2ϵ DC2λ+)L DC(c AC1ϵ AC1λ+c AC2ϵ AC2λ+)L AC) =I 0λe (c DC1ϵ DC1λ+c DC2ϵ DC2λ+)L DCddL(e (c AC1ϵ AC1λ+c AC2ϵ AC2λ+)L AC) =I 0λYddL(e ZL AC)=ZI 0λYe ZL AC=ZI λ dI λI λ =ZdL,

where Y=e (c DC1ϵ DC1λ+c DC2ϵ DC2λ+)L DC and Z=c AC1ϵ AC1λ+c AC2ϵ AC2λ+) are just placeholders to reduce clutter. Note that the last equation looks just like the previous one with the translation XZ. This means that if we stick to using the AC-DC intensity ratio (dIlIl) we can forget about the DC contribution completely.

If the changing-L-but-static-L DC thing bothers you, you can imagine insteadthat L DC grows with L, but c DCi shrinks proportially (to conserve mass). With this proportionate stretching, there is still no change in absorbtion for that component so ddLexp(c DCiϵ DCiλL)=0 and we can still pull the DC terms out of the integral as we just did.

Taking a ratio of these amplitudes at two different wavelengths, we get optical density ratio (R)

(13)R=AC 660DC 660AC 940DC 940=dI 660I 660dI 940I 940=Z 660dLZ 940dL=Z 660Z 940,

because dL (the amount of finger expansion during a pulse) obviously doesn't depend on the color light you are using. Plugging back in for Z,

(14)R=c AC1ϵ AC1,660+c AC2ϵ AC2,660+c AC1ϵ AC1,940+c AC2ϵ AC2,940+

Assuming, for now, that there are only two species of Hb—HbO₂ and HHb—we can solve for c AC1/c AC2.

(15)R =c AC1ϵ AC1,660+c AC2ϵ AC2,660c AC1ϵ AC1,940+c AC2ϵ AC2,940 R(c AC1ϵ AC1,940+c AC2ϵ AC2,940) =c AC1ϵ AC1,660+c AC2ϵ AC2,660 c AC1(Rϵ AC1,940ϵ AC1,660) =c AC2(ϵ AC2,660Rϵ AC2,940) c AC1c AC2 =ϵ AC2,660Rϵ AC2,940Rϵ AC1,940ϵ AC1,660.

So now we know [HbO₂]/[HHb] in terms of the measured quantity R and the empirical values ϵ.

Plugging in to our equation for Sf O₂ to find the functional saturation:

(16)Sf O₂ =[HbO₂][HbO₂]+[HHb]=11+[HHb][HbO₂]=11+c AC2c AC1=11+Rϵ AC1,940ϵ AC1,660ϵ AC2,660Rϵ AC2,940.

As a check, we can rephrase this as

(17)Sf O₂ =11+Rϵ AC1,940ϵ AC1,660ϵ AC2,660Rϵ AC2,940=ϵ AC2,660Rϵ AC2,940ϵ AC2,660Rϵ AC2,940+Rϵ AC1,940ϵ AC1,660 =ϵ AC2,660Rϵ AC2,940ϵ AC2,660ϵ AC1,660+(ϵ AC1,940ϵ AC2,940)R=ϵ AC2,660+ϵ AC2,940Rϵ AC1,660ϵ AC2,660+(ϵ AC2,940ϵ AC1,940)R,

which matches Mendelson 1989, Eq. 8 with the translations:

  • Sf O₂SpO₂,
  • RR/IR,
  • ϵ AC2,660ϵ R(Hb),
  • ϵ AC2,940ϵ IR(Hb),
  • ϵ AC1,660ϵ R(HbO₂), and
  • ϵ AC1,940ϵ IR(HbO₂).

And that is the first-order explaination of how a pulse-oximeter measures the functional saturation!

Reading extinction coefficients off the absorbtion figure, I get

(18)ϵ HbO₂,660 =ϵ AC1,660=0.10 ϵ HHb,660 =ϵ AC2,660=0.83 ϵ HbO₂,940 =ϵ AC1,940=0.29 ϵ HHb,940 =ϵ AC2,940=0.17

which are comfortingly close to those given by Mendelson in Table 1. The corresponding Sf O₂(R) plot (from Tremper) is:

Experimental SpO₂ vs. R (Tremper)
Experimental SpO₂ vs. R
Theoretical SfO₂ vs. R.
Theoretical SfO₂ vs. R

The theoretical plot was calculated using and our Sf O₂ equation. 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.


Molecular oxygen
Concentration of x in the blood
Body temperature and pressure
Standard temperature and pressure
P O₂
O₂ partial pressure
Pi O₂
O₂ partial pressure at location i
S O₂
Fractional O₂ saturation
Si O₂
O₂ fractional saturation at location i
Sf O₂
Functional O₂ saturation
Hemoglobin monomer
Hemoglobin monomers complexed with O₂
Reduced hemoglobin (not complexed with O₂)
Dys-hemoglobin (cannot complex with O₂)
I 0λ
Intensity of incident light at wavelength λ
I λ
Intensity of transmitted light at wavelength λ
c i
Concentration of light-absorbing species i
c DCi
Concentration of the ith DC species at wavelength λ
c ACi
Concentration of the ith AC species at wavelength λ
ϵ iλ
Extinction coefficient of species i at wavelength λ
ϵ DCiλ
Extinction coefficient of the ith DC species wavelength λ
ϵ DCiλ
Extinction coefficient of the ith DC species wavelength λ
Length of tissue through which light must pass
Diastolic finger width
Optical density ratio
Light emitting diode