Pulse oximetry and cooximetry

Vivian Imbriotis | April 4, 2026

A pulse oximeter measures arterial oxygen saturation. It relies on

  1. The different absorption spectra of OxyHb and DeoxyHb
  2. The pulsatile absorption signal generated by change in optical length
  3. The Beer-Lambert law, optical absorbance by a solute is proportional to the length of the light ray, the concentration of the solute, and the extinction coefficient for the solute and wavelength, \(A = \Delta L \epsilon_{\text{solute}}C_{\text{solute}}\)


The device measures the ratio of the pulsatile absorbances (each normalized by the nonpulsatile part to account for different LED intensities):

$$R = \frac{AC_{660} / DC_{660}}{AC_{940} / DC_{940}}$$

And, by applying Beer-Lambert twice, we can see

$$R = \frac{\Delta L}{\Delta L} \frac{(\epsilon_{\text{oxy}} C_{\text{oxy}} + \epsilon_{\text{deoxy}} C_{\text{deoxy}})_{660}}{(\epsilon_{\text{oxy}} C_{\text{oxy}} + \epsilon_{\text{deoxy}} C_{\text{deoxy}})_{940}}$$

$$R = \frac{(\epsilon_{\text{oxy}} C_{\text{oxy}} + \epsilon_{\text{deoxy}} C_{\text{deoxy}})_{660}}{(\epsilon_{\text{oxy}} C_{\text{oxy}} + \epsilon_{\text{deoxy}} C_{\text{deoxy}})_{940}}$$

If we then assume that there is only OxyHb and DeoxyHb i.e. \(F_{oxy} + F_{deoxy} = 1\) then

$$R = \frac{(\epsilon_{oxy} F_{oxy} [Hb] + \epsilon_{deoxy} (1-F_{oxy}) [Hb])_{660}}{(\epsilon_{oxy} F_{oxy} [Hb] + \epsilon_{deoxy} (1-F_{oxy}) [Hb])_{940}}$$

$$R = \frac{(\epsilon_{oxy} F_{oxy} + \epsilon_{deoxy} (1-F_{oxy}))_{660}}{(\epsilon_{oxy} F_{oxy} + \epsilon_{deoxy} (1-F_{oxy}))_{940}}$$

We could then solve for \(F_{oxy}\) directly; unfortunately, there is a lot of error (due to differential scattering of the different wavelengths, such that \(\Delta L_{660} \neq \Delta L_{940}\)

In practice, R is regressed against SpO2 of healthy subjects breathing gas of varying hypoxic FiO2. R of 1 \(\approx\) SO2 of 85%. Values below 70% are extrapolated.


Issues due to R's calibration

  1. Dark skin tone \(\to\) overestimates sO2
  2. Anaemia \(\to\) low signal:noise ratio
  3. Sats < 70% \(\to\) never calibrated

Issues due to abnormal Hb species

  1. COHb has a 660nm and 940nm absorbance close to OxyHb, and also left-shifts the ODC \(\to\) overestimates the sO2
  2. MetHb readily absorbs both wavelengths; \(R \to 1,\ sO_2 \to 85\%\)

Issues due to pulsatility

  1. Shock/tourniquet/malposition \(\to\) poor waveform \(\to\) artifact included in pulsatile component \(\to \ R \approx 1 \to sO2 \approx 85\%\)
  2. Movement \(\to\) tissue/venous blood included in AC component \(\to\) underestimated sO2
  3. Venous pulsations e.g. severe TR \(\to\) venous blood in AC component \(\to\) underestimated sO2

Cooximeters analyse a blood sample extracorporally and expose it to >4 (usually 128) wavelengths of light.

The total absorbance spectrum is the sum of the absorbance spectra of each species, multiplied by each concentration:

$$A(f) = \sum_{i \in \text{Hb species}} \epsilon^f_i \cdot [i]$$

We can therefore compute the concentration of oxyHb, deoxyHb, COHb, metHb, and sulfHb, and derived quantities:

$$[Hb] = \sum_{i \in \text{Hb species}} [i]$$

$$sO2 = \frac{[oxyHb]}{[Hb]}$$


Cooximetry is not confused by abnormal haemoglobin species, abnormal pulsatility patterns, or a moving patient, and can measure total Hb; but it requires venepuncture (or arterial puncture to get saO2), is not continuous, and does not incidentally measure the heart rate.