evanpeikon / intensity_prediction

Predicting exercise intensity zones using an unsupervised learning model with using muscle oxygenation data and its derivatives.
MIT License
0 stars 0 forks source link

Q: SmO2 dynamic range #1

Open ib00 opened 1 month ago

ib00 commented 1 month ago

This is cool.

Few questions:

  1. How do you compute the derivatives of SmO2? Just normal finite differences for both first and second order?
  2. What must be the dynamic range (min/max) of SmO2 to get decent results? The sensor I am using doesn't have a great dynamic range.

Thanks.

evanpeikon commented 1 month ago

Thank you!

  1. That's correct. I computed SmO2' and SmO2'' using finite differences.
  2. This will largely depend on whether you have additional data, such as acceleration and jerk, being used as inputs to your model. In those cases, we can get by with fairly compressed SmO2 ranges (<10%), though larger ranges are still advantageous. If you do not have external load data (acceleration, jerk, etc) you will likely need a fairly large dynamic range in your muscle oxygenation signal to get reliable results, and the model's performance may still be limited.

Out of curiosity, what type of sensor are you currently using?

ib00 commented 1 month ago

Thanks for your reply and sharing this code of course.

I am a trail runner and a cyclist, so most of my efforts are longer and stochastic (due to terrain). I have Moxy which probably desaturates way too much. On certain types of intervals I can go from 80% to 20%. I also have Humon which has the opposite problem, not much dynamic range. I go from 75% to about 60% which is not much.

I haven't seen much use for hemoglobin concentration. Hopefully, you have some good ideas on how to put it into your model.

evanpeikon commented 1 month ago

You're welcome.

Understood. This type of model actually performs quite well with unstructured workouts on mixed terrain.

Screenshot 2024-07-31 at 9 13 12 AM

The image above is from a ~4 hour bike ride at altitude and on mixed terrain (mountains). Ultimatley, I see these types of models being most useful in these contexts where traditional power-based intensity zones tend to fall short.

I haven't used this model on Moxy or Humon data since I currently do all of my data collection with the NNOXX wearable (which measures SmO2, NO, and acceleration). In my experience the range in SmO2 values provided by NNOXX is somewhere between what you'd see on a Moxy or Humon device, though NNOXX has more measurement-to-measurement variability since it's sampling at 50x/second whereas Moxy is 1x/ every other second (I don't know what Humon's sampling frequency is).

Like you, I don't see a lot of value in total hemoglobin (THb) measurements. Blood volume measurements, of that sort, are sensitive to many different factors such as mechanical effects of muscle contraction (compression, venous occlusion, etc), local muscle metabolic response (hypoxic vasodilation, changes in Hb's O2 dissociation curve, etc), and things like sympathetically mediated vasoconstriction. As a result, it tends to be a fairly 'dirty' signal, and often worsens these types of model's predictive values.