SpO2 Waveform


I’ve been working on implementing a waveform for SpO2. It’s my understanding that the waveform should be driven by perfusion and that is measured as blood volume per unit time per unit tissue mass. I’m working in Unity and I have been using the provided blood volume parameter to drive a line renderer for the waveform.

Before explaining my current issues can you verify whether or not this an appropriate approach to visualizing the SpO2 waveform?


1 Like


SPO2 is oxygen saturation or the percent of oxygen carrying hemoglobin in the blood. It is typically displayed as a value not a waveform. A pulse counter sometimes produces a waveform that is based on the variation of light through the tissue and is a substitute for invasive blood pressure measurements. I have also seen a SPvplet waveform associated with ventilation measures.

Can you clarify what you are trying to produce with the waveform and maybe what kind of sensor ina orient would produce the waveform. Maybe I can answer your question better with that info.

Sorry if that is not very helpful.

1 Like

I meant pulse oximeter not pulse count.

Thank you for the clarification. I am trying to replicate the pulse oximeter waveform you described.

That waveform will be difficult to duplicate. Because it is estimating blood pressure from perfusion which is estimated by measuring the infrared light through tissue.

You might be able to pull the blood flow through the arm and add some noise to the signal and use that to estimate your waveform.

You would need to do a data request for the flow through the right or left arm. There are some filters available that add noise to a signal that may make it look more realistic. The calculated signal from Pulse will be pretty clean for that type of signal.

Let me know what you think about that idea and I will keep thinking as well.


I am working on this in Unity too. Right now I am trying it like this:

SEDataRequest.CreatePhysiologyRequest(“MeanSkinFlow”, “mL/min”)

But the result is not correct. I don’t have a lot of medical knowledge so I am a bit at loss with all the variables.

How do you actually get the blood flow through the arm? Is there an example on how to apply a filter?

Thanks a lot!

Thanks for the question.
In attempts to help improve our documentation in using Pulse, I would love to hear which pages you are using to get to know Pulse, as this will help us organize/insert more detail about usage in key areas of our documentation.

I am hoping you go to the Engine Interface page from either our documentation page or our wiki

I think adding more detail about how to construct and pull data via the Data Requests should be added to the Engine Interface Page. Specifically in the Engine Track data section.

There is a Data Request section on our Scenrio page, and some of this content should be added to the interface page

Rachel mentioned that you should pull the flow from the right arm.
This translates to a Compartment Data Request, not a Physiology Data Request
This is because you want to pull a specific physical value (volume, pressure or flow) from a specific anatonmical location

So you will want to create a compartment data request similar to this, but for a Liquid (blood) rather than gas.

And you would use the compartment name “RightArmVasculature” (You use the 2nd value as the Data Request string value)

So, In C# that should look like
SEDataRequest.CreateLiquidCompartmentRequest("RightArmVasculature", "InFlow", "mL/min")

Pulse provides an API for many different languages. To learn more about working with the Pulse API, you can find HowTo folders in many of the language folders in src Pulse provides an API for each of these languages, and they are designed to be very consistent with each other. So if you are looking for how to use a particular feature in Pulse and the language you are using does not provide an example, look around in the other languages and it should be trivial to translate to the language of your application.

Improved documentation on constructing Data Requests is definelty needed, any thoughts on what and where you would expect to find this would be much appreciated.

Let us know if you have more questions



Hello abray. Thanks a lot for the answer! It was super informative.

Right now I am using a mixture of the pulse Docs. Mainly the actions, the patient tables, the how tos of the csharp code and the patient methodology. Sometimes I search in the c++ code of pulse for answers or check the Doxygen files too.

The Data Requests part was quite a mistery for me until now that I have a somewhat clearer picture with your explanation. I just understood Physiology requests because they came with the example and are simple. For example, the CreateSubstanceGasRequest for ETC02 was a mistery to me how it worked (keep in mind I don’t have medical training).

Thanks a lot again for the explanation for the liquid compartment request!

I will read closely the other the Engine Interface how tos and , I have only been reading the c# one and a bit of the java one.

Where to find the data requests maybe in the Physiology Engine Interface before Engine Configuation or Data tracking? The one thing I also struggled with is to find the correct units for each SEDataRequest (mV, 1/min,mmHg, mL/min) which I had to search in the C++ engine since providing an incorrect one makes Unity crash.

One more question. I have been searching for the filters mentioned by rachel to add noise. I have searched in the Doxygen resources but I can’t seem to find them. Where are they?


The filters are not in Pulse. You would have to get a noise filter from another library or implement one on your own. Sorry for the confusion. I have not looked into this recently, so I do not have a recommendation.



Hi Aaron!

Pulling from the arm compartment worked perfectly! Thank you!

As for your questions:
I have mostly been using pages in the methodology sections, exploring the definitions through my ide and have consulted the source code a few of times. The methodology drop down is where I tend to look first, so that’s probably where I would expect to find it. Either there or in some other appropriate drop down would be especially intuitive.

Privacy Notice