Tuesday, September 25, 2018

VO2 max/peak estimation


As physical effort rises, the amount of fuel used by the active muscle increases.  Part of this energy is dependent on oxygen, and the amount of O2 used at a given time is referred to as the VO2.  This will rise as muscular work increases, up to an eventual maximal value.  The VO2 was discussed in some detail in the last post looking at the Fast Start strategy.  

Why is the VO2 max such a popular subject?
Many sports scientists believe that the maximal VO2 attainable is predictive of success in many endurance sports.  In addition, many of the interval protocols in the literature are adjusted to a percent of VO2max.  The usual way to measure the VO2 max is with a metabolic cart looking at accurate gas exchange and power parameters.  

Since most of us don't have access to this type of testing, I would like to discuss some non metabolic cart estimations of VO2 max power, in particular the VO2 peak cycling power.  There are other terms used to describe this maximal usage of O2.  According to this paper, several functional limits can be measured:

"The V̇O2max, mode-specific V̇O2max and V̇O2peak provide estimates of functional limits: V̇O2max represents the upper functional limit; mode-specific V̇O2max represents an upper functional limit reached during a specific exercise mode; and V̇O2peak represents an upper functional limit during a single test."

What we will be discussing here will be more of a mode specific VO2 peak, since it is cycling specific and based on single test (or multiple single tests).

Interestingly, even if we were able to be tested with a full metabolic cart approach, the VO2/power result from ramp type exercise is different than a constant steady state pace (or perhaps a Fast Start).  Dr Murias and his group published a great paper both explaining the issues with ramp testing, as well as providing some actual examples. 
Here is an illustration of the variation in power measured at the peak VO2 depending on the ramp type as well as constant intensity pacing.
Although the VO2 max (gas exchange) is the same, the corresponding power is quite different.  Training zones and race pacing would be dramatically affected by this.


Here is another look at constant power intervals (from 20 watts) labeled in blue.  At the lower intensities, the VO2(not max) stabilizes by about 90 sec and is flat for 10 minutes.  At the higher power zones, VO2 max is achieved eventually, but quicker at the higher power (Fast start interval like).  The 360 watt line is short, presumably since the power was so high, the rider was unable to continue.

The bottom line here is that it may be possible to approximate VO2 max (or peak VO2 cycling power) by observing the power curve of a given individual, particularly at the 3-6 minute interval length.

Another study looked at a 4 minute maximal run compared to the traditional graded exercise VO2 max:
The first trial was circled as an example, and indeed the VO2 is very close to the standard test result.  One of the points made in the discussion was that the speed during this 4 min test could be used as a field measure of speed at VO2 max:

An interesting paper on estimating the MAP (maximal aerobic power similar to VO2 peak) in elite cyclists used their own maximal power historical records for a range of time intervals on a log axis.  It is a very informative paper and I recommend taking a look.
According to the authors, the shift in the power vs log time plot tracing could be used for MAP (VO2 max cycling power).

In addition, the plot can be extended to estimate power for longer time spans

Although I have done many near max 3, 4, 5, 7 and 10 min intervals, I don't do longer time spans.  Based on my last years numbers, I made a log plot and tried to emulate what the study did above.

Although it is certainly not definitive, but it does give me some guidelines for MAP, VO2 peak power.  According to this tracing, my MAP is about 350 watts at the 4+ minute mark which agrees with the study.

Ventilation response to VO2 max testing
Since we are able to measure ventilation parameters in the field with the Hexoskin shirt, can these metrics be helpful in verifying VO2 peak power territory?  Although that was not the question asked in this study, a look at their data does support the concept.  This paper addressed the potential differences in respiratory response in treadmill vs cycle VO2 testing in different populations.  

The red grouping is the ventilation rate that increases steadily up to VO2 max, with a reasonable stratification below 100%.  HR in orange also behaves this way.
Interestingly, the breathing rate did increase between 90 and 100%, but the tidal volume remained the same:
In summary, at the VO2 power peak I would expect a maximal breathing rate and ventilation volume.


Does looking at the 4 min interval data indicate that a peak VO2 value should be present? 

Since VO2 depends on cardiac output (stroke volume x heart rate) we should see a near max heart rate.  The other part of the equation is the A-V O2 difference.  If flow in the measured area is near maximal, the NIRS O2 desaturation should correlate with oxygen extraction.  Therefore we would expect the desat to be near max.  Let's look at the interval tracings:

  • The heart rate by mid interval was near max, and by the end was at max.
  • The ventilation by mid interval was near max, by end interval was close to max.
  • The breathing rate was high throughout and spiked at the end
  • The RF desat of 51% at end interval was the same as the end of the 1 min max interval later in the ride (530 watt avg).
Therefore: HR, ventilation and O2 extraction were at maximal values by mid to end interval, which is good supporting evidence for reaching VO2 peak in a time zone consistent with that found in the literature.

Conversion Formulas to traditional VO2 values
Although there are many equations based on the ACSM field guidelines, the VO2 max ml/kg/min is relatively meaningless number in the field (not so in a lab setting).  But if you are interested, here is a commonly used formula and relationship of watts to VO2:


 Summary points:
  • A practical approach to estimating your VO2 peak cycling power can be valuable for monitoring your training, fitness, pacing and choosing interval protocols.
  • The power average during a relatively stable 4 minute maximal interval may be a indicator of maximal aerobic power/VO2 peak power.
  • The end interval HR, breathing rate, O2 desaturation and ventilation rate should be at near maximal levels

Other VO2 max related posts

Wednesday, September 19, 2018

Hexoskin App Overlay - Real time display and data recording

The monitoring of respiratory rate and ventilation has value in both power zone demarcation as well as pacing and recovery.  In prior posts multiple examples have been presented as well as supporting literature.  
To that end, I did not want to give up on the real time visual monitoring of respiratory data.  The Hexoskin shirt does have a smartphone app, but as explored previously, there are major issues.  
  • The heart rate can no longer be measured by your usual bike head unit (bluetooth pairing limitation).  
  • The data downloading and formats are not very user friendly.  
  • Scaling of data in the web site is very truncated.
  • Display data size is relatively small so is not very visible on a bike while riding.

My new project was getting around these limitations and create a better front end display as well as generating a very simple .csv file containing the elapsed time, heart rate, breathing rate and ventilation.  Yes, there is an api and a good programmer could write one from scratch, read the bluetooth output of the device and put that into a data storage script. The problem is that although the heart rate is easily seen on the bluetooth output, the ventilation is not.  
Here is the bluetooth spec from Hexoskin for the respiratory data:
Not very user friendly (unless you are a bluetooth programmer)

On the other hand, this is the bluetooth output from a Polar OH1, the Hexoskin heart rate data is identical but the ventilation is in hex and needs substantial math conversion for the result.


The next level of "programming" is more of a scraping and scripting technique.  Trying to get the data through logs, "intents", and notifications.  The logcat was empty and there is no obvious logging to files that I could see.  If the data was sent to the notification bar (in android), it would have been very easy to intercept that, even with the app in the background.  Unfortunately, the Hexoskin app displays a notification but no data is shown.  What I ended up doing is to "scrape" the data from the Hexoskin app display. There is a plugin for the android scripting app Tasker called "autonotification".  This plugin will create a variable for each field on the screen display.  The data can then be "lifted" off the display if the target app is active in the foreground.  So in this case, I need to have the Hexoskin app running in the foreground, then activate my "overlay" which will scrape the data from the display and place it into a .csv as well as showing it in a more user friendly fashion (as an overlay).  Tasker is also able to adjust the display sleep time and brightness for optimal usability while outside.


Notice underneath the black overlay is the regular Hexoskin app in blue (Recording, Show Sensors, 79%).
Using Tasker with autonotification, I was able to get the elapsed time, ventilation (Q), HR, breathing rate.  Then it's just a matter of looping every 1-2 seconds to get a continuous output.  I also placed a "maximum" field to the right of each data point (in color).  The graph in green is the ventilation rate (L/min) and was done with Google graph api (internet connection required) and the last 6 minutes of data.
Here is what the .csv looks like:

Once in this format, it would relatively easy to run numerical averages, range of values over a particular interval, etc. 

After getting your full session of data you can then graph it out with better visual dynamic range than on the Hexoskin web site.
There is a helpful web site called Ploty that one can use to graph out the results.  

Here is an example
First the full ride in one of the created charts:



I circled the 5 min fast start, 1 min max and a 4 min 250 watt interval.  Ventilation is purple, HR is red.  Everything is able to be customized in ploty:


In this case, the 5 min fast start is zoomed in for a better look.  The ability to scale the axis for better discernment is very helpful.
You can also save the graph to a file:

The Hexoskin web display is of course not affected by doing this.  In fact, if there is an artifact (in yellow) it will be present in both overlay data as well as the web page.
For example:



The scaling is a bit different but the flat (?drop out) in ventilation is present in both.
Also, since the scaling is adjustable in ploty, one can better appreciate the rapid swings in ventilation rates

I am still in the process of streamlining the data collection loop, improving the graphing and interface.  Another potential feature could be text to speech over bluetooth.  This could be useful for folks who are running, skiing and therefore can't see the display.  They then can get ventilation/HR data in real time over a wireless bluetooth earbud.
In addition, one could also have the overlay send a notification (of data) which would be displayed on your Garmin watch (since the watch will flash incoming notifications).  A minor issue is that the Hexoskin web app ventilation (L/min) is a "raw" figure but the smartphone app is corrected for size.  I need to clarify what the conversion formula is.

According to Hexoskin tech support it is more than a simple conversion: 
"In fact, there isn't a conversion from the data on the app to the dashboard. The raw data is processed by "lighter" algorithms on the app and "more robust" algorithms on the servers to be displayed on the dashboard.
And the algorithms cannot be shared as they are proprietary to Hexoskin."


Even with this situation, the data is on par with the fully processed web app.


The bottom line is that it is possible to both display the Hexoskin data in a more visually friendly way as well as create a simple .csv file with your data to analyze after the session.

With a little imagination and the power of some clever android apps, real time respiratory data display and data recording can happen.


  • Better on bike visual readability.
  • Extend display time out to hours, increase brightness
  • Show max values (could also potentially show last 10 second average for example)
  • Simple .csv for graphing and spreadsheet calculations


Sunday, September 9, 2018

Post flat tire metrics, a look at concurrent training?

One man's trash is another man's treasure......

A few days ago I was just getting ready for a "monitored" interval after doing a 1 hour warmup on the road.  To preface, I only ride hard a couple of days a week and on those days wear all 3 BSX sensors with light shields and my Hexoskin shirt.  There is a bit of effort involved getting it all together and having it all working.  After the 20 minute "gear-up" (like the astronauts), it takes about an hour to reach the location of testing.  On this particular day all was well until I hit the lap button beginning the interval and promptly got a flat tire.  Even worse, I have tubeless tires that can be finicky with re inflation after a change.  The bad luck continued with going through 2 air canisters and having a leak around the valve.  Before calling my wife for help, I tried using a hand pump that shouldn't have worked (does not provide that blast of air volume for tubeless inflation).  However my luck changed at that moment and after pumping like a maniac for several minutes, the tire bead seated.  I proceeded to finish pumping, got back on the bike, turned around, warmed back up 10 minutes and hit the hill again.  The power profile wasn't bad, but towards the end of the effort, I felt something was not quite right.  This post will be about my experience and a brief look at some literature as well.  

The use of both resistance and aerobic exercise in the same session is called concurrent training.  There are an infinite amount of permutations in regards to exercise order, intensity, and between session rest.  There is also a huge amount of literature looking at this but for my purposes, just a narrow scenario will be explored.

This is what the session looked like:
There is an almost 1 hour warm up, the flat tire change (part of that being vigorous hand pumping associated with heart rate elevation), a brief warm up then a 5 minute Fast start interval.
A closer look at the 5 min FS:
Several remarks:
  • The starting HR, costal O2, RF O2 sats were all within the usual range
  • The prompt HR elevation at 30s was similar to other FS intervals
  • The Costal O2 pattern (initial drop during the FS, stabilization at about 280 watts, further drop in green with higher power of 330 watts, re-stabilization after power cut) was very typical
  • The RF O2 pattern was also very similar to previous FS intervals (see previous FS posts)
  • But, I knew something was off.  I was severely winded and fatigued after.  My plan was to go for a longer interval but couldn't do it.  At the time, I couldn't figure out why since my Costal O2 was not excessively low, nor was the HR that high.

After looking at my Hexoskin data (post ride), it becomes more understandable:

Compared to previous FS intervals of similar power:
  • The baseline ventilation is about double.
  • The mid and latter portions are at near maximal.
  • The 1 min post effort ventilation (while coasting) is almost double.

What about later in the ride, is the ventilation elevation still an issue?

Here is the 1 minute maximal effort:
  • The baseline ventilation was lower at 42, near usual
  • Baseline HR at usual.
  • Max HR same as usual
  • Max ventilation same as usual.
  • Interval average power slightly lower (but close).

The probable cause:
3 minutes of fast hand pumping (after the regular battle of changing a tubeless tire).
If we go back to the graphic of the whole ride above, there is a segment of the tire change associated with heart rate elevation.  After 2 failed attempts at tire inflation, I got out the small hand pump and gave it a go.  Needless to say, my expectations were low, but surprisingly it did work.  I was a bit winded doing this, but did not really pay attention to it.
Closer inspection though does confirm a significant effort in regards to HR and ventilation.
  • The fast hand pumping elevated both ventilation as well as HR (140 max).  The HR is not an artifact of motion since it was measured with the Hexoskin (I looked at the raw data and it is correct).
Comparison with a "control":
On a ride last month, I also had a flat but did not hand pump.  The flat was about 30 minutes pre interval, with no change in ventilation rate patterns.


  • It seems that a session of upper body exercise in close proximity to a subsequent cycling interval, will cause elevation of minute ventilation.
  • The elevation of ventilation is in both baseline values as well as reaching maximal levels earlier than expected.
  • The HR pre interval does not appear to elevated.
  • The O2 desaturation pattern of the active muscle does not appear to change.
  • The O2 desaturation pattern of the costal muscle does not appear to change.
  • Latter on in the session, the ventilation parameters come back to baseline.


What does the literature tell us?
Kang and associates published a study looking at physiologic parameters after a combination resistance then cycling session:


The exercise protocol was as follows (4 of the 6 strength exercises were upper body):
Essentially, either a low or higher intensity resistance session was done, then a 5 min rest followed by 20 minutes of cycling at 50% of the VO2 max power.  Measurements were done throughout with averages below:
  • There was a HR elevation in both resistance groups compared to the control (no resistance session before cycling).
  • In both men and women, Ventilation was significantly higher after the resistance sessions while cycling.
  • The low vs high resistance sessions had similar elevation of ventilation.  The higher resistance did not elevate ventilation more than the low.
  • Although VO2 was not statistically different for men, it was elevated in women and appeared to be elevated (p>.05) in men as well. 
  • There may be many reasons for this "compensation" such as EPOC (excess post exercise O2 consumption).

Although this is not exactly a simulation of my ride experience, the underlying theme is the same.  A given amount of resistance work (mainly upper body) in close time proximity before cycling can increase ventilation rates as well as total VO2.


Some take away points:
  • The addition of non cycling exercise before an interval or during a race may have significant effects on performance.
  • The usual monitoring modalities including heart rate and even muscle O2 may not be able to indicate this situation.
  • The surrogate marker of cardiac output redistribution, namely costal O2 does not appear to be predictive as well.
  • Ventilation volume does appear to be the best measure of post resistance physiologic compensation.
  • If you do have a difficult tire change, consider a longer active recovery time with easy cycling to avoid the above.  Conversely, if recovery is not an option, be prepared for higher ventilation rates and potentially higher RPE.  The time of recovery undoubtedly will vary between individuals and their circumstances.
  • Real time knowledge of the ventilation volume would have been helpful.  I probably would have delayed the interval to latter into the ride and/or limited the power/time of the session.
  • Cycling after a resistance exercise session (as in a fitness center) will have ramifications as noted.