Multi-spectral sensing is based on different reflection (actually includes back scattering as well) behavior of the constituent material in the optical path of the sensor at different wavelength. Beer-Lambert law describing the absorption phenomenon relates the optical path length, material concentration, and the measured light loss this way: A = ε C L = log10 (Light intensity IN / Light intensity OUT), where
- ε is the molar extinction coefficient
- C is the material concentration in the optical path
- L is the optical path length.
- We will pick up a lot of excitation light (rather than the light bouncing off Hemoglobin molecules in the skin)
- We are picking up only a small fraction (well below 1% even in the best case) of the photons that are bouncing back from the Hemoglobin molecules. A photo-diode array found in a tightly integrated SoC may be on the order of a 1 mm^2. Since isotropic radiation loses strength as 1/radius^2, the signal bearing light landing on the photodiode rapidly goes down, while leakage light from the ambient (the baseline) goes up rapidly when the sensor is worn loosely around the wrist.
Right away, we know that the excitation light has to be pretty strong, to get reasonable photons landing back on the photo-diodes. In fact, it has to be strong enough to reach into the dermis layer, where there is blood flow due to the blood pressure pulse. The blood movement we CAN see in the epidermis layer moves (other than the movement of the wrist and the skin due to the heart beat itself) through diffusion. The pictures below show that the excitation light should be FOCUSED at much deeper than 100 um—ideally at 200 um or deeper, as shown in the following images available at Wikipedia:
The light that reaches into the dermis layer will see primarily the epi/dermis tissue, melanosome (organelle that makes and stores melanin in the epidermis), and oxy/deoxy Hemoglobin molecules. In the plot below, extinction (light loss) spectra of dermis (contains no melanin) and epidermis with 30 % volume fraction (for very dark skin case) of melanosome are shown. The dermal tissue can be considered transparent compared to the melanin, which especially absorbs strongly in the shorter wavelengths according to the extinction spectra data I downloaded from http://www.OMLC.org
The visible light spectrum may be of help in understanding the difference between the oxygenated and deoxygenated Hemoglobin molecule: the large difference in the extinction coefficient in the deep blue, and to a lesser extent, near red) explains why the venous blood looks blue, and the arterial blood looks red.
The total absorbance is the sum of absorbance of all material found in the optical path; that is, Atot = SUM_i(Ai). Because there is little blood in the epidermis (~0.1% by volume) and dermis (5~8% by volume), the light encounters mostly melanin, rather than the oxy/deoxy Hb molecules, so that the amount of light NOT absorbed/scattered (what survives the absorbance equation in the previous page) is dominated by the melanin amount. Even for a lightly tanned Caucasian, with 10% melanosome volume fraction, the total light surviving the absorbance in the optical path looks virtually identical for both the oxygenated and deoxygenated Hb (dashed red and blue lines)—except in the deep blue region.
So even though melanin stops being a significant absorber at deep red and infra-red wavelengths, OBSERVABLE difference between the oxy/deoxy cases is quite small in this region. The black line in the bottom of the above graph shows the DIFFERENCE between the 100% oxygenated and 100% deoxygenated case. To see the difference spectrum in detail, we need to plot it on a log axis.
Other than showing again why the excitation light must be boosted for higher melanosome volume fraction case, this plot suggests where the wavelength peak for different photodiode band-pass filter should be, but even at the peak signal wavelengths, the minisuscule difference requires efforts to map the tiny differences into the available dynamic range of the measurement circuit. Let's do a thought experiment. Assuming:
- A Gaussian distribution of excitation light (say LED) source with 5% standard deviation of the mean (just an average voltage regulator spec), which is turned on and then off in step function manner
- Ambient (leakage) light of 20% of the intensity as the LED source, and 5% standard deviation of the mean intensity landing on the photodiode
- Photodiode conversion efficiency (photodiode output volt per lux) is 1 [V/lux]
- 5% of the excitation light reflects off the skin
- 100 PPM of the photons reaching INSIDE the skin (which I believe is quite generous)
The expected total output voltage from the photodiode is 8 bits larger than the expected voltage due to the signal.
If I were using a 12-bit ADC (as many bits as can be expected on an on-chip ADC), I would have only (12 - 8) = 4 bits left as the signal's dynamic range (averaging would gain back more bits). How might we increase the dynamic range of the expected signal?
Idea 1: a photo-diode dedicated for ambient (leakage) light
What if we put not just 1 photodiode for the desired wavelength, but a PAIR of such photodiodes--one placed in a way to be shielded away from the light being reflected off the skin? Since the photo-diodes will NOT be exactly the same (the band-pass filter and the photo-diodes are slightly different). By measuring the output from the 2 photodiodes with the excitation light off, we should be able to estimate the leakage light in an unbiased manner. We can gain back more than 2 bits in this example. The ADC is measuring the sum of the reflection and true signal at this point.Idea 2: subtract offset
Since the reflection still dominates in this example (by roughly 6 bits), what if we could programmatically set the ADC offset? Observe the ADC output if we subtract 0.4 in the above example: we gain an additional ~3 bits, for a cumulative ~5 bits of information, so that even with a 12-bit on-chip ADC, we have ~9 bits of information (dynamic range of ~500).Idea 3: estimate reflection and signal sum
To clarify idea 1, there is of course no way to KNOW the ambient light falling on the photodiode; the best I can do is build a HW that can estimate that unknown in an unbiased manner. An averaging function is one such unbiased estimator, and one that can even be implemented in HW (like an FPGA) with some effort. The moving average of the photodiode dedicated to measuring just the ambient light will rapidly approach the true value, and the moving average of the difference of the other photodiode (exposed to reflection and signal) and the unbiased estimate will also approach the true value (the bound drops by 1/SQRT(N), where N is the averaging window size), as shown below.
By oversampling (higher battery drain), I can build an estimator for the reflection and the signal with a few percent error.