Tech Tip: Human Skin and Heart Rate Sensor Modelling

  • 2 February 2022
  • 1 reply


Heart rate sensors are often included in wearable tech devices. What is the technology that enables us to measure the heartbeat with our smartwatch or fitness tracker? How can we simulate it with Zemax OpticStudio?



Photoplethysmography (PPG) is a low cost, non-invasive optical technology that takes physiological measurements on the surface of the skin. PPG devices consist of infrared or visible range light-emitting diodes (LEDs) and photodetectors. They provide a simple optical technique to detect blood volume changes in tissues. Light is more strongly absorbed and scattered by blood than by the surrounding tissue. Therefore, the pulsation of blood causes a variation of opposite phase in the signal of the detector.

How to implement a human skin tissue model in OpticStudio, and how to simulate the measured signal of a PPG device over time using a ZOS-API application is described in detail in our Knowledgebase article.

Light scattering by small particles in turbid media, such as in biological tissues, can be accurately described by the Henyey-Greenstein scatter distribution function. In the Non-Sequential Mode of OpticStudio, the Henyey-Greenstein bulk scattering model is available in a DLL (Henyey-Greenstein-bulk.DLL). The parameters of this function, along with other model settings, can be adjusted to mimic the behavior of light traveling through each of the different layers of human tissue, each of which may be of different refractive index and more or less scattering than the previous tissue layer.



In the second image, colors are not indicative of wavelength; instead, they represent the number of scatter events each ray has undergone. The blue rays are those initially emitted from a modelled LED light source, then the rays change color each time they encounter a change in direction.

To simulate how our detector results change over time, as blood pulses through the body, our model must cycle through different levels of blood content in the skin layers. To simulate heart rate monitoring, the ZOS-API to mimic pulsating blood flow in the tissue was used. This example used the Python API - connected to OpticStudio via .NET - to change the model parameters, run ray traces with the fine-tuned settings, and finally analyze and plot the results.



For more details on how to implement a human skin tissue model in OpticStudio and simulate the measured signal of a PPG device over time using a ZOS-API application, see our Knowledgebase article referenced below.


1 reply


I am trying to determine the absorbed in your example. I just add a detector volume before all the skin layers and using `inside of` put all the layers inside the detector volume.

However, when I want the results of `absorbed flux` in the detector viewer the signal is zero for all the voxels. 

Do you have any advice on how to get the absorbed flux?