Raising Frankenstein…Bringing a BSX Insight Back to Life

20 01 2020

So…after being away from racing while employed at DHS (a rather “not what I thought is was going to be” type of experience,) I decided to look for employ where I could (actually) use my technical skills from my post-grad degree. After all, why endure all that effort, expense, and time only to not use it? This decision led me to new job-field entry discussions with WSDOT, which led to a certification in an ESRI GIS course, certification in the Python 3 programming language, and a professional certification in IBM data science. Moving right along, I’m happily absorbing specialty courses in machine learning (really fun stuff by the way.)

By the nature of my blog, you know that I like to use tools at hand to examine, evaluate, and improve the processes I’m interested in, namely, improving my physiological systems in order to accomplish my racing goals. One of the tools I’ve used in the past was the BSX Insight device. In early 2018, BSX Technologies decided to discontinue support for the monitor effectively turning it into a brick; much to my disappointment. (And that’s saying it nicely.) That was about $300 USD out of my wallet so the news was not received lightly. My 2nd generation monitor started gathering dust.

Then I found this: Start BSX without the app or internet using an Android device. Basically, the author used the nRF Connect App in an Android device to connect and start the BSX Insight monitor. What? I had already used this App to diagnose other BLE hardware but did not know the specific write values and specific UUIDs to start my monitor.

I had to try this windfall. Incredulously, while my tablet was starting, I dug out my Garmin Edge 810 head unit, powered-up, and selected the BSX sensor feed profile I set up so long ago. I scrambled back to the tablet. Opened the nRF Connect App, enabled the (3) notification characteristics, and then wrote the hexadecimal value “0402” to the UUID indicated in the blog post above annnnddd…


I couldn’t believe it. There, on my Garmin display, were my SmO2 and tHb values happily reporting what my forearm muscle was doing energy-wise.

Figure 1. BSX Insight Enabled and Reporting to a Garmin Edge 810

In Figure 1, we see the Insight monitor sitting on my forearm. Behind, my tablet shows the nRF Connect App. Between, my 810 displays the SmO2 as “rpm”, and tHb “mph” values. Note that years ago, this sensor profile using the “rpm” and “mph” labels was the only one I could utilize with the 810 model. Today, there are various other cycling devices which display the metrics correctly.

Back then, I used the very flexible and open source Golden Cheetah software (GC) to assemble all my data streams onto one display:

Figure 2. Golden Cheetah “Oxy” tab showing W (yellow), HR (red), SmO2 (blue), and tHb (brown) Data Streams

I’m sure I’ll figure out if I want to continue using GC or if another platform would be more suitable, such as Rouvy. I’m not certain that I’ll be able to configure the BSX data streams because the Rouvy App interprets the device as an rpm/speed sensor:

Figure 3. Rouvy’s Post-Ride Data Display Example

Figure 3 shows how Rouvy displays your post-ride measures. This example show my usual sensor input setup for a trainer session. There is a “workout” mode that I have used for HIT intervals or specific training targets, but as of this writing I’ve not verified how I might integrate the BSX streams.

Bring on the Python skillz…

Figure 4. Using Python and tkinter to Build a New GUI for the BSX Insight

At any rate, I’ve set about building my own BSX Insight GUI/interface using Python. The first Python-Windows compatible package I’ve found is tkinter. Thus far my experience using this library to build the GUI has been lukewarm, but I just want something functional for now…I can always make it pretty later. I’m relieved that my Insight monitor will not join the group of today’s electronic detritus. It can still provide useful information.

I’ve the idea to assemble ALL of my data into one structure so that I might throw my data science skills at it in order to help answer the many questions I have about achieving physiological training goals. And that’s definitely a post in the future. I hope all of you will find what you’re looking for in this new year. Thanks for reading.

Not So Quick Fix for Broken Joule GPS Mounting Tabs

17 03 2016

So I finally rendered my Cycleops Joule GPS un-mountable. I could always just toss it in my jersey pocket before rolling-off, but then I’d have to fish it back out if I needed to look at the display. And that’s kind of a PITA. I suppose the tab yielded to my abuse and decided to break. On the other hand, maybe it’s about time. I mean, the thing’s almost six years old. Then again, I’ve no stats on the expected product life span of this gadget. Additionally, I’m not the only one to have broken tabs happen. Other users experienced the same thing. It’s perfectly functional except for not being able to mount it on my bars. What to do?

Yeah, well, fix it. That’s what to do. The first thing I did was to call the folks at Powertap, and ask them for a replacement back cover. No such luck. Furthermore, they offered $150 to replace a mostly functional unit, that its, the back cover is not replaceable.

Irritated, I scoured the internet and found an article that showed a new tab “plate” attached to repair a Garmin unit. This gave me an idea: I already have a Garmin 810; is there a replacement tab part for their device? Kind of. I found plenty of Garmin back covers on Ebay. You pay about $25 USD for a Garmin 500 (or 800/810) back cover and lithium battery, plus you get to wait while this thing ships from China. Mnnnah— nope. More irritation. I kept looking, and good thing to because I found this little jewel:

Figure 1. The Solution (Cheap, like $7 USD)

This is SRAM’s Quickview Adapter Mount. I thought, “Cool. I can use this to make a new mount.” How would I attach it? Yeah, I’m not putting screws into the body—not a good idea because I don’t know what’s behind the back case. (This would be a different story had I been able to get the back cover removed to inspect.) Anyway, “Maybe I can glue it.” So the question is now: What materials are involved here? A call back to Powertap reveals that the back casing is made of polycarbonate, which reminded me that I haven’t had much luck with before on the glue situation. This little SRAM adapter’s made from nylon/glass composite. Again, more materials complexity.

More searching around on the internet shows that one of the top company’s for different adhesive bonding scenarios is JB Weld. Note that this is not a shill for the company, but I have used their usual two-part epoxy for a bunch of stuff in the past. Their “plastic bonder” product, as confirmed by the tech. rep. that I talked to, seemed to be the perfect adhesive for this project. This project was starting to look better.

Quick steps:

Figure 2. Grind the lower half of the adapter flush
Figure 3. The flip side
Figure 4. The broken tab and the sanded surface ready for adhesive. The new mounting tab plate adjacent.

At this point, make sure that you assemble the quarter-turn tab plate in the correct orientation. In this case, the mounting tabs place is at the 3 and 9 o’clock locations (not shown.)

Figure 5. The repaired Joule GPS mounted in out-front style
Figure 6. Not much stack height increase

That’s pretty much it. I’ll add a longevity comment later-on once I’ve completed a few races and/or significant rides using this setup. I’ll be watching how vibration affects this rig.

Thanks for reading!

A Quiet Start to the 2016 Season

17 03 2016

It’s pretty quiet. At least from my perspective; the months and weeks of off-season training gave way to the first event: The Ridge Circuit Race and Time Trial #2. I finished well, not having bonked, or experienced a mechanical or flat, or having bumped elbows or shoulders with another in the bunch. Maybe this was karma from having completed a preemptive commuter crash during an evening return from the super market (read: got it out of my system.) Or maybe it was ’cause everyone in the pack was super cool and not real nervous. (Most of us were Cat 3 masters.)

This was a first-time event site for me and I found the experience a positive one overall. The venue was well-organized, had plenty of parking (paved or gravel,) and the Motorsports park environment a nice change from courses run on public roads. The weather was typical northwest overcast with occasional rain, and the ~9 mph wind was out of the WSW. The course was already wet. I hoped more rain would stay away for a while.

Bird's eye view of the race track
The Ridge – Bird’s eye view

The pop-up awning went up and this time I staked it down…if it rains, no problem, I’m ready. At earlier events, not tying down meant that the wind would blow it over and crumple it like tissue— no worries right? I’ve repaired the thing twice so far. Got the gear bags, trainer, and stuff laid-out. Race prep as usual.

Figure 1. On the straight-away into the Finish, looking toward the downhill “S” turn
Figure 2. The Finish seems farther than it is…

I learned a couple of things this day…one, fix that front-end high-zoot skewer (the one that keeps loosening.) two, tweak the TT position to bring the elbows in more, three, even though the pop up awning might be braced-down, the wind can STILL blow it down. As was the case when I returned to my car after the circuit race.

Figure 3. Circuit race. I’m (hidden) drafting the guy with the yellow frame

The circuit race was without mishap, no bumping, bar-ends getting tangled or any such nonsense, just a clean race. A good start to the season. At any rate, round and round we went. Into the wind and out of the wind. The “selection” for the last lap was decided at the top of the descent before the corkscrew, and I made sure that I was in the right place at the right time. Kyle (the rider in red, Figure 3,) was first into the corkscrew. I was second. I feathered my brake too much and watched him get on-the-gas out of the last turn. Even on the top of my gears and out of the saddle; I wasn’t able to close the gap.

Figure 4. Out of gears and out of time…approaching the Finish.

A fun race and venue, and an easy drive. I’ll look forward to next year’s opening. Thanks for reading and good luck with your race season!

Figure 5. 3rd place for the Circuit race this day.

Here, There, and Back Again. Incorporating Muscle Oxygenation (SmO2) into Training

13 11 2015

What? It’s been almost a year since my last post. Incredible how time flies by. On the other hand, when you crash hard in a race sometimes it takes awhile to come back.

The outlier crash during the Wenatchee Criterium left me with many facial fractures and wondering if I was ever going to be the same again. Short story version our group was overtaking a lapped racer, some rolled into turn #1 on the inside line, me and some others rolled-in from the outside line. Yeah, I thought there’s plenty of room for us to pass, and we’ll be able to carry our speed through the turn. (This was coasting down from 32 mph – I looked at the Powertap file some days later.) Sure, plenty of room, until…lapped racer guy decides to change his line in the middle of the turn. “No! no! no!” is what I heard my self yelling but it was too late. My front wheel was already overlapped and he was moving out taking us toward the curb. I knew I was going down. The surprise was the steel “No Parking” sign post that materialized right in front of my face. Like it beamed down from the Starship Enterprise. I heard the metallic ping, felt the bouncing-crack of bone all in slow motion. And then there was blackness. That flipping sucked. Worse yet was the two weeks that followed while I had to drink all my meals as my face bones knitted back together. Talk about weight loss. Anyway, that’s over and done with, as is the anger what accompanied it. Next time I’ll move to an inside line early. The 2015 competitive season was a write-off loss after that point.

Anyway, my last post discussed HRV as a means of quantifying recovery. If I recall correctly I didn’t find it fully reflective, that is to say, most of the time I think the method and data were truly representative of my state, but there were other times when I think the estimate was a bit off the mark.

So, on to other things. You may have heard of blood oxygen saturation as a personal, dynamic, physiological indicator of how your particular muscle group(s) is meeting the demand for cycling power? Well, there’s two devices now retail-available by which you can harness this next evolution metric. The first is the MOXY muscle oxygen monitor. A small, portable, go-with-you device that measures the saturation metric (SmO2) at the muscle group of your choice. It will give the SmO2 and blood volume (tHb) metrics so you can get a detailed understanding of what’s happening in your system. The MOXY broadcasts its data via the ANT+ protocol. The other device is the BSX Insight, Generation 2 sensor. Likewise, this instrument measures relative SmO2 and (drum roll) uses an optional protocol to report your lactate threshold in watts and heart rate units. Additionally, this units provides your training zones (based on Dr. Coggan’s percentile structure I believe.) The BSX Insight will accept ANT+ data streams from HR straps and power-measuring devices, and is controlled via Bluetooth from an iPad or Android device. At the moment, The BSX does not broadcast any other devices.

So, for my first move to integrate muscle oxygenation into my training plan, I wrote this short report at the MOXY forum: “First Use of SmO2 during Hypertrophy Training”

“Greetings all,
I hope this is the correct place to post my information and experience using SmO2 to monitor the current lifting phase.

Back squats: Phase 3 of 4 hypertrophy period. Lifting four days/week with a full break on Wednesday. Monday and Thursday are heavy lift days (65, 70, and 75% of one-repetition-maximum -1RM). Tuesday and Friday are light lift days (60, 65, and 70% of 1RM respectively.) Each percentile level consists of two sets of 10 to 12 repetitions each separated by 1.5 to 2 minutes of rest.
Stiff-legged dead lifts: three sets of eight repetitions each separated by 1.5 to 2 minutes rest
51-year-old, male, road-racing since 2009, firm user of periodization plans and quantified, goal-oriented training

Routine: warm-up with 2 minutes of running stairs and no-load squats at the top/bottom of stairwell.

Here’s the results:

P1hwk3 squat sldl.jpg


  1. Starting SmO2 level (~50-70%) appears as expected at the left vastus lateralis location based on other workouts
  2. The recovery baseline was met in all squat lifts except after the second (~8:19:21)
  3. The target, or depletion baseline was met in all squat lift attempts
  4. SmO2 re-stock seems to replenish sufficiently, although the trend slope is steeper/quicker during intervals on the bike trainer comparatively
  5. Stiff-legged dead lifts (SLDL) follow the squats after weight change on the bar
  6. The current weight level of the SLDLs do not seem to produce the same SmO2 depletion rate as the squats before
  7. The SmO2 SLDL re-stock rate seems rather slow compared to the squats rate
  8. Weight bar/rack clean-up occurs after the last SLDL (~8:39)

Monitoring format was based on the guidance from “Moxy Strength Training eBook.” Full recovery was used between lifts as a starting point. Unfortunately, my device does not expose the tHb metric, although the text mentions using this metric as a performance indicator.

Warm-up and bar setup ends at about 8:16. One difficulty was the inability to observe the real-time measure of SmO2 during lifting by use of the Tablet software application. The squat rack is outside and exposed to the weather, which in the current Seattle, Washington weather, would likely render the device unusable. Between-lift breaks are controlled with a stopwatch. I think in order to use the other recovery protocols, I would need to observe the SmO2 measures in real-time, or use appropriate stopwatch durations based on re-stock trends for like workouts.

It’s likely that I didn’t rest long enough after squat #2 in changing weights to the next level (65% 1RM,) hence the insufficient recovery level.


  1. I’m not certain that the depletion target (~43%) meets requirements? Is this target sufficient to cause hypertrophy adaptation? Thoughts?
  2. I think that the SLDLs required their own recovery/target baselines since they are a different lift pattern. Thoughts?

I think I’m generally on the right track in order to achieve the plan intent and outcomes. My plan is similar to last year’s; and contains corrections for lessons-learned. Your comments and thoughts are welcome! Thanks for reading.”

There will be more posts with SmO2 content to follow. Specifically, reports concerning the determination of training zones based on individual physiological markers like SmO2 and tHb, and improving the quality of focused training like intervals. Stay tuned and thanks for reading!

End of Phase II—Two Steps Forward, One Step Back? Using HRV in a Training Plan

31 12 2014

I’ve found curious results when considering heart-rate variability (HRV) readings in the training plan. For the most part, the two analysis domains followed the proper trend, that is to say when the LF/HF ratio was high, the dominance level of HF power was low as was the index for the natural log of rMSSD x 20. That being said, I look back over the respective phases and think about where I am versus where I thought I would be. Maybe there’s more “art” to this than “science.”

Back in September, I wrote about a phased training plan that I would use to organize my off-season training. Soon after, I learned a bit more about HRV and it’s value as a factor for day-to-day training decisions. There are two types of analysis that I pay attention to: time-domain and frequency-domain. Fortunately, the Kubios HRV software puts the results side-by-side for easy comparison.

There were roughly 21 medical and sports journal articles that I studied when I decided to check what I call the “big picture.” That is to say, I would watch the Mean R-R, SDNN, and rMSSD variables from the time-domain analysis, the LF/HF ratio (Fast Fourier Transform,) and LF/HF ratio and HF (AR) variables from the frequency-domain analysis. The reason I did this was because most of the journal articles held conclusions for particular domains (and metrics.) Since I was extracting the report variables all at the same time from the Kubios software, there wasn’t any extra work involved to create the tracking graphs. (I feel that I should at least mention that the “non-linear” group of variables were available, but that I didn’t see enough recommendation or acceptance within the art to call for tracking them.)

Day-to-day decision rationale: I mostly consider the following graph (Figure 1) for training vs. recovery decisions. If the index is low (near or below the lower standard limit,) I opt for a day of rest. If the index is between 47 and 52, I’ll workout, but maybe with a lesser duration. If the index is higher than 52, I’ll definitely put in a hard or extended workout. I do look at the other tracking graphs, and if they point the other way, I’d re-consider…again viewing the big picture. Thus, a higher index indicates increased capacity to engage a tough workout and benefit from it.

Line graph of the natural log of rMSSD times 20

Figure 1. rMSSD variable from the Time-domain analysis

Some remarks about the various phases:

  • Resistance Phase/hypertrophy (P1h)—I had the impression that my legs mass-gain would be more…granted I added 16 pounds of body weight and a 5% increase in body fat compared to this time last year. Then, the BF calipers indicated less than 10% so the current level of 15% objectively puts me at the “fat body” self-ranking. On the other hand, my wife says my thighs definitely got big and my butt got rounder (she says she likes it, whatever.) Graph-wise, I thought I should see larger swings as I lifted the big weights and then into rest/recovery.I still think that I goofed my 1 repetition max test by attempting six lifts when I should have attempted a higher set by using only three lifts (instead of wearing myself out faster with six.) The hypertrophy part was characterized high lifting volume with moderately high resistance.
  • Resistance Phase/strength (P1s)—this portion was characterized as reduced lifting volume and increased resistance. There were some definite sore points within this period, although at the end my system seemed to spring back with some better index numbers at the end. I think the percentage lift points would’ve been higher…noted for next time.
  • Resistance Phase/power (P1p)—characteristics include increased lifting speed, reduced resistance, and sprint interval workouts. This was a volatile combination. Most of the period saw lower index points where near December 10, I forced a couple of recovery days less I continued to dig myself into over-training. The need to lift “faster” eventually found me lifting the squat bar enough to “hop” into the air. Again, these workouts were draining, and it reflected in the index plot.
  • Aerobic Endurance Phase (P2)—the graph shows a higher index trend, which I believe reflects the lower measure of time spent on riding near/above the 76% FTP minimum target. There were sprint and muscle endurance intervals intended to complement the endurance riding, most of the time the difficulty was not in completing the intervals. The problem was in accruing time-in-the-zone (TIZ) at the minimum target for the specified duration. Try as I might and even with best effort, the most effective extraction to stay in zone two (above 76% FTP) was only 44% to 51%. In other words, I could ride for three hours, yet only have half the ride time above my target. If I rode for five hours, again roughly half would be credited towards correct TIZ. So, to accomplish four to six hours at zone, I would have to ride for six to eight hours…not a realistic idea. The cause was this: riding outside, I’m subject to traffic, stop light and signs, pedestrians and speed limits on multi-user trails, etc.—constraints to my effort. There’s nothing I can do to omit those factors. On the other hand, I could decide to do that time requirement on the trainer, and I did for most of it. However, about 3 ½ hours was all I could muster on a trainer, any more than that I just could not get my brain around. Note: the 76% figure comes from Morris’ designation of the lower limit for the endurance zone on his scale. I figure he’s got a good reason for making it that way. Overall, I did not gain the volume target for this period, and that’ll likely hurt me later on. Because the phase intensity/impact was less extensive, the graph shows higher index marks. (My reasoning anyway.) I had played with the idea that this phase indicated that some type of “form” had incurred, but then I hadn’t done much riding comparatively for me to truly accept having any “form.” I had also extended this period by two weeks to try to meet requires. Next year, I’ll try to find a longer, uninterrupted stretch of road like a secondary state highway to meet the TIZ requirements.
  • Aerobic Endurance Phase/rest week (P2r)—this is the built-in rest week for the second phase. It has its own training regimen oriented around rest days and a few (but more intense) short interval workouts. This is also the week that I spent out-sick courtesy of the local flu bug, so not really much training to speak of, nor of much quality rest either. Kind of a waste of a week progress-wise. It’s why the graph’s index numbers are swirling around the bottom of the plot, again, dashed lines indicate non-training days.
  • Phase 3 Supermaximum Sustainable Power Intervals (P3)—the first two days of this period were sick/non-training days. Although I did try part of the first workout during the second day. Not bad results, I made the target wattage, but was not able to complete the full workout. I deemed it “OK” after being sick for a week.

In closing, I’ll keep watching the “big picture.” Next year this time, I’ll use the lessons learned after this evolution to make the program better.

Thanks for reading. My next post should show how I was able to integrate the BSXinsight Lactate Meter into the training program…and I’m really looking forward to learning that! See ya.

Heart Rate Variability—the Not-So-Hidden Indicator

13 11 2014

I first read about heart rate variability (HRV) in September of 2012. Back then, HRV was background information in the context of a laboratory comparison to examine the relative effectiveness of HR-based training vs. power meter (PM)-based training. The next occurrence was from a team newsletter early this month. Least to say…I took interest.

Basically, HRV is about the variances in duration for your beat-to-beat time period. Here’s what I’m talking about:

Graphic showing the RR or NN endpoints within an ECG graph
The RR (or N-N) periods from the high-point of the QRS complex

Any variance is clear when one RR period differs from another RR period and so on throughout the tracing. So why is this variance important? Well, remember when training stress balance (TSB) used exponential weighted moving average equations to estimate where your training stress level (form and freshness) was? HRV is a direct (although inclusive) indicator of the level of stress that your system is experiencing.

In a fashion, your heartbeat rate is controlled by two systems within your body, the sympathetic nervous system (SN) and the parasympathetic nervous system (PN). The SN system functions to regulate the body’s unconscious actions, like fight-or-flight, and is constantly active at a basic level to maintain system stability. The PN system on the other hand, is responsible for stimulation of “rest and digest” or “feed and breed” activities that occur when the body is at rest. Basically, each system is the opposite and compliment to the other. The SN system increases the uniformity of the RR period, the PN increases dissimilarity. Both these systems “vie for control” and as such, the variability in the length of time between heart beats rises and falls.

Understanding how HRV is affected becomes important to us when we train in our respective sports. The body reacts to various types of stress. In training, we call this stimulation and adaptation. For instance, our bodies compensate for the anticipated future strain by making muscles stronger and/or more efficient. This occurs during the rest cycle, when we sleep. Accordingly, the balance between beat-to-beat uniformity and non-uniformity reflects this state. That is to say, when the body and/or mind is stressed, the variance tends to decrease. When the human body is rested and has capacity to take-on work, the variance increases. However, this “HRV gauge” isn’t specific to a particular stress source—it’s inclusive. This is the part that caught my attention. Why? Because I’m terrible at estimating just how depleted my athletic engine has become.

One particular article of research studied changes in autonomic function related to athletic over-training syndrome. Mourot et al. (2003) discussed how HRV provides information related to the regulation of heart rate in real-life conditions. Their study demonstrated that analysis of HRV using linear and non-linear methods (Poincare Plots specifically,) could be used as a direct indicator of fatigue after prolonged exercise.

Note that you’ll have to make some choices about how you collect and interpret HRV data. You could download an Android application to your smart phone, and have a super simplified green/yellow/red scheme to tell you your stress level, but this version might not give the detail that you want. Or you could spend near $175 USD for a more professional program (maybe with hardware) to give you a bit more detail, but again, you might not learn how that information is derived. I preferred to do the homework, learn the method(s), and gain an understanding at a deeper level. Choose what’s important for you.

I started learning how I could take advantage of this phenomena. Equipment-wise, I have heart rate straps of the ANT+ variety, an ANT+ USB dongle, a Power Tap hub on one of my wheel sets, and I have a computer. Problem was, I didn’t have the Windows-compatible software to analyse an ECG tracing. As it turns out, I didn’t need to mess around with tracings. After four to five days of searching the web, I found the HRV_Tracker application, which records RR intervals. This free software program accepts the data stream that my ANT+ compatible HR strap produces and drops it into a pre-formatted .hrm file. This only produces the data file however, and that’s when I found the Kubios HRV – Heart Rate Variability Analysis Software. This software application is an advanced tool for studying the variability of heart beat intervals.

After you get the software installed and setup, the basic process is to:

  1. Wake-up the next morning and create a daily data file using HRV_Tracker
  2. Open that file using Kubios HRV. Adjust for artifacts and frequency cut-off
  3. Determine which analysis method and metrics to track (time-domain, frequency-domain, or non-linear)
  4. Transfer chosen metrics over to a Minitab 16 statistics file (or Microsoft Excel, or other graphing application)
  5. Decide how the indicated data affects your training decision for the day
Recording Your Data File

I paraphrased the data collection steps from the Medicore SA-3000P clinical manual—simple and straight-forward:

  1. Surrounding environment
    1. Keep the same collection time since HRV is known to have circadian rhythm (morning/evening)
    2. The proper environment
      1. Avoid bright light or noise
      2. Maintain comfortable room temperature
  2. Before the measurement
    1. Avoid caffeine or smoking before recording your data file
    2. Do not eat breakfast
    3. Allow time to adjust to your seated position
  3. During the measurement
    1. Maintain a comfortable sitting position
    2. Don’t move or talk
    3. Don’t close your eyes or fall asleep
    4. Don’t intentionally control your breathing

I wake-up, visit the restroom then return to my desk’s seat, put on my HR strap, then launch the HRV_Tracker software (Figure 1.)

Picture of HRV_Tracker's Software Interface
Figure 1. HRV_Tracker Application Interface

See the Device and Script Recording tool bars? Check the “Help and Support Documentation” section of the index.html file within your installation folder for detail on how to set these up. Something to pay attention to is that if you have the application window at some other size than full-screen…the stage time values will not display. I found this out by happenstance and always maximize the application window now when I’m recording.

After launching the application, plug-in your USB ANT+ stick. Your HR strap can now talk to your computer. When your ready (and if you’re using a script file) mouse over and click the “Start Scrip” button. Otherwise click “Start” to begin recording. You’ll see something like Figure 2:

Screen picture of the application after start of recording
Figure 2. Record file start screen

Within the “Heart rate status” window you’ll see your HR rate (self-explanatory) and the sequential R-R interval as it’s being recorded in milliseconds. Within the “Script status” window (if you’re using one,) you’ll see the stage message and elapsed time that you’ve implemented in your script file. (Refer to the help file noted before.) I chose three minutes as my recording period mainly because I decided to focus on Low Frequency (LF) and High Frequency (HF) and because these components are distinguished in short-term recordings according to the HRV Guidelines suggested by the Task Force of the European Society of Cardiology and the North American Society of Pacing and Electrophysiology. Other periods include five minutes, 20 minutes, and 24 hours. Whatever you decide as your recording period, try not to mix different length files.

Once you’ve reached the end of your chosen recording period, the application will automatically save your data file to your folder of choice, Figure 3.

Screen picture of saved .hrv data file
Figure 3. Data file location and file name structure

Note the date and 24-hr time stamp within the file name, this is automatic and it makes it easy to manage your information over time.

Preparing Your Data

There are a couple things I do before copying my metrics over to my tracking file. In sequence, they are: deal with artifacts (if any), and remove the very low-frequency bands (VLF.) An artifact is basically any type of RR interval point that can be considered an outlier. These points are easy to spot…and easier to deal with, consider Figure 4:

Screen picture of an .hrm file opened in Kubios
Figure 4. A raw data .hrm file opened in Kubios

Note the main graphing window, see the four points that lie far outside the rest of the data points? Those are artifacts. You’ll find their causes within the Kubios user manual. All I need to do is get rid of them otherwise they’ll skew the rest of the LF and HF frequency information. In the left-side margin you’ll see a drop-down box labeled “Artifact correction.” Click it and you’ll see a range of options from “none” to “custom.” The idea is to pick the option that will highlight only the outlying points and not the rest of the data stream. Note that your retained data points turn the color green from blue temporarily. I usually pick down the list until this condition is true, thus in Figure 5:

Screen picture of the data file with artifacts selected for exclusion
Figure 5. Artifacts selected with the correction drop box

Here, the “low” correction level has excluded all the artifact points. Click “Apply” to screen the points out. The graph will automatically re-range for you. Click the “Frequency-Domain” button under the horizontal scroll bar for the next step.

Let’s reduce the very low-frequency (VLF) band from our analysis. (It’s the pink area in the FFT and AR spectrum graphs.) Basically this frequency zone (0 Hz to .04 Hz) is background noise for our purposes, so we can get rid of it. Select “Smoothing priors” from the “Method” drop box under “Remove trend components.” You’ll note that the Lambda value field (500) and the estimated frequency cutoff “fc = 0.035 Hz” appear. I debated changing the default value to “390,” to give me “fc = 0.039” but I’m not certain that the effect will be statistically significant. [Edit: I set the default to 0.039 anyway.] To save yourself some time set the detrending method and default Lambda value in your “Analysis options” section of your Preferences settings.  Your screen would look something like Figure 6:

Screen picture of detrended data in the Kubios application
Figure 6. Detrended data file in Kubios

Note that most of the pink VLF band area is gone.

One of the neat things about Kubios is that there are various analysis methods to consider depending on your disposition. Some pros and cons about my particular metrics choices from types of analysis are:

Time-Domain Analysis

  • Pro—the simplest to apply. There are a few available metrics in this category SDNN, pNN50, TINN, and Triangular Index; but the root mean square of successive differences (rMSSD) is considered easiest for convenience by non-expert users. One substantiated argument for rMSSD as the ideal metric comes from this article. Also, another reference for the preference of rMSSD vs. pNN50 because of its mathematical robustness is made by the Task Force for HRV.
  • Con—On the other hand, George Moody, Harvard-MIT Division of Health Sciences and Technology stated in an article published in PhysioNet that, “The commonly quoted scalar measures (…SDNN, pNN50, rMSSD) offer only a limited view of HRV.” He goes on to say that these measures were devised when the standard technology for estimating HRV was a pair of calipers and a hand calculator.

Frequency-Domain Analysis

Available metrics in this category are very-low-frequency (VLF), low-frequency (LF), and high-frequency (HF).

Fast Fourier Transform Approach (FFT)

Autoregressive Modeling Analysis (AR)

  • Pro—this model smooths the frequency components allowing discrimination of the bands, and not depending on pre-selection. In essence, the produced graph is easier to see compared to FFT. According to the Kubios users manual, the AR model, “…yields improved resolution especially for short samples.”
  • Con—A limitation concerns the suitability of the value for the model order. This value will affect the determination of the center frequency and the amplitude of the frequency components, and non-optimal selections may introduce inaccuracies. Previously, Task Force guidelines recommended a range from 8 to 20. More definitively, a study by Boardman et al. (2002) recommended the best model order to be 16, to reduce spikes and smearing, and to produce easily observable peaks. The default model order in the preferences of the software is now 16.

Non-linear Analysis

Poincare plot

  • Pro—using this graphical method, it can be easy to identify artifacts. Refer to Figure 7. Note that in the main graph display, we find a couple of outliers, aka artifacts near the 7:10:35 time mark. Correspondingly, with the view results button “Nonlinear” selected, we see three points within the Poincare plot quite separated from the main cloud; these are the same indicators. I suppose that with practice, deciding on outlying points that are closer to the cloud will become clearer.
Application screen print of Kubios Poincare plot showing artifacts with the data file
Figure 7. Poincare plot and locations of artifact points
  • Con—even though Mourot et al. (2004) demonstrated that Poincare plots reliably delineated shifts in parasympathetic balance, and that “…changes in SD1 and SD1n paralleled changes observed in rMSSD, pNN50, TP, HF, and HF/TP.” it might be difficult to attempt day-to-day decisions about training based on the graph alone. Alternatively, a trend based on SD1 and/or SD2 fluctuation compared to a baseline could be a solution, although I found no study to date has demonstrated this idea.

Approximate Entropy (ApEn)

  • Pro—this method might work well for an HRV file with less than 50 points, can be applied in real-time, and is also less affected by noise. Additionally, research by Lau et al. (2005) shows that ApEn can be a natural measure of HRV.
  • Con—Based on the first reference in Pro, ApEn could estimate lower than expected for small records. ApEn could also lack relative consistency. Relative difficulties in applying this method in ECG data analysis were examined in this study by Holzinger et al. Furthermore, “ApEn was shown to be a biased statistic.” Pincus S. (1995)

Sample Entropy (SampEn)

An extension of ApEn. Technically explained, “Sample Entropy is the negative natural logarithm of an estimate of the conditional probability that sub-series (epochs) of length m that match point-wise within a tolerance r also match at the next point.”

  • Pro— (still searching for a reason to use this method by itself or in addition to the previous methods.) None found to date.
  • Con—Values for the variables m, and r must be chosen before analysis. As of this writing, various directions have been published. Accordingly, Aktaruzzanman and Sassi (2013) determined the following guidance: “The value m depends on the length of the series and it should be kept small (m = 1) for short series (length ≤ 120 points.)” and “The recommended value of r in the range [0.1 0.2] x STD has been shown to be applicable to a variety of signals.” Additionally, Heffernan et al. in their study of HR and HRV following resistance training, set their embedding value m = 2, and their filtering value (tolerance) r = 0.2 x STD. These latter settings happen to be the default in Kubios HRV.
Understanding Your Data

This is the tough part. Up to now all effort was put towards collecting and processing data. Now for the interpretation, because analysis methods and related metrics all have pros and cons I decided to approach any training decision-making from a more-holistic approach. That is to say, I wouldn’t make decisions based solely on a single method or metric. I would look at a multiple method and metric “picture” of the statistics for that morning and trend. I copy the following prepared metrics from Kubios into my Minitab 16 tracking sheet each morning Date, Mean RR, SDNN, rMSSD, NN50, pNN50, FFT(LF/HF), AR(LF/HF), and HF power (AR results). See Figure 8.

I input these metrics in every morning after creating the .hrm file; easily less than 5 minutes typically. Note that the last column, lnRMSSD, is actually a formula that I inserted into each cell of that column. Basically, it takes the rMSSD figure from column C4 and produces the natural logarithm then multiplies by 20. I then round to an integer for a nicer “real” number. In other words, it’s easier to look at “2” in a graph and not “2.876.”

When I initially started collecting HRV data, one of the first tracking graphs I created was my mean RR over time. This graph doesn’t carry much decision-making weight and I don’t really look at it anymore. It simply confirms that my RR average has decreased along the years, i.e., my average isn’t like it was in my twenties.

Note: all graphs contain a baseline of seven to ten days of non-training HRV measurements. This forms the position of the “mean.” Another way to do this would be to assign the baseline value as a horizontal reference line, and let the mean calculate and display as usual.

Based on my continued reading of research articles, and in some part observation of (then) current sports HRV measuring practice, I created LF/HF ratio tracking graphs from the FFT and AR analysis methods. Those are shown here as Figure 9 and Figure 10. Note that the vertical lines from the “Date” axis are days-off (no training) and that all data points are plotted in the morning before any workout or training:

Graph picture of HRV (LF/HF) over time
Figure 9. Minitab 16 Individuals graph of HRV FFT (LF/HF) over time

For this method, a lower ratio is better, indicating “balance” between the ANS and PNS systems. According to FFT, my system was stressed far above the green average of 4.76. (This coincides with when I started the off-season lifting phase.) Curiously, only the latter date of Oct 29 shows higher stress, as I was lifting weights on the non-rest days. Or does this show adaptation?

Later on, again based on the research articles I was reading, the Autoregressive method seemed the way to go:

Picture of graph of Autoregressive LF/HF ratio over time
Figure 10. Graph of AR LF/HF ratio over time

The AR method reveals more stress days beyond what FFT showed in Figure 9. Again, for recovery, lower numbers are better. Per my understanding, system stress should increment higher during successive training days and reduce after a rest day. That’s basically the pattern here.

I’ve read plenty of studies that suggested that the HF band is indicative of parasympathetic activity. This was another graph that I created to help me understand the big picture. For the HF graph, higher numbers are better (Figure 11.)

Picture of graph of HF values over time
Figure 11. Graph of HF values over time

In the HF graph, higher plots are better, showing an increased level of recovery or capacity for more work. What alarms me here is the downward trend starting Nov 1 (a rest day.) A bit of recovery followed for the morning of Nov 3 (heavy lift day), a continued negative trend for Nov 4 (light lift day), and an expected decrease for the morning of Nov 5 (rest day). A day of rest should have manifested as an increase for the morning reading on Nov 6 (a scheduled heavy lift day), but instead the plot continued its downward trend. At this point I decided not to lift, but to instead take another rest day. If the plot for the morning of Nov 7 shows an increase, then I know I’m recovering. However, if the plot decreases, then I know I’ve dug myself a good hole by training too much and not watching my trend line.

Nov 7: fortunately, the morning reading shows that my system recovery is back up to where I wanted it to be—above the baseline (47.) See Figure 12.

Picture of a graph of ln rMSSD over time
Figure 12. Graph of ln rMSSD over time

I’d like to think that I avoided a potential over-reaching scenario by understanding the warning signal as shown in Figure 12 for Nov 4 to Nov 6. Good meals and three nights rest allowed the regular workout as scheduled.

Control Limits & Historical Tendency

One of the challenges with this approach is the context of whole system change over time. Throughout the Minitab 16 graphs above you would have noticed the (red) horizontal line(s) above and below the mean value (green) line. These represent warning lines more or less, and they’re temporarily a way for me to easily tell when I’ve went overboard. For now, I’m setting the position of the upper and lower control limits equal to one, and some cases two, standard deviations because I haven’t installed a better mechanism for setting these “gates.”

One solution may be the exponentially weighted moving average (EWMA) equation like that used to calculate training stress balance (TSB). Using initial gain factors of 7 days for short-term and 42 days for long-term, I might be able to forecast the level of recovery. On the other hand, Dr. Larry Creswell, M.D., states in his blog post:

HRV responses to training are not only specific to an individual but also to both the recent and remote training history. The most important observation is that the relationship between HRV and fitness is simply different in well-trained athletes: there can be increases in HRV with no corresponding increase in fitness over a training cycle and there can also be decreases in HRV despite increases in fitness.

Another example of a gate-keeping solution is the BioForce HRV software application. This program color-codes a daily, weekly, and monthly index to give criteria for training decisions. At first glance, the index seems to be an average from the current period as compared to the previous and respective period but I haven’t read anything that explains the calculation method yet; so maybe I’ll have to keep looking.


I know there’s particular applications and authors who maintain that their method or metric is the way to go about tracking of this stuff. I’m not convinced based on what I’ve read thus far which says that a specific method and metric is the true and accurate way. So, what I’ve done is collect methods and metrics to examine as a whole to give me the “big picture” compared to what I expect to see. For example, the following methods and metrics when recorded the next morning after the earlier day’s training should behave thus:


Autoregression (AR LF/HF) graph—plot point should increase from previous; higher ratio indicates additional system stress

Fast Fourier Transform (FFT LF/HF) graph—plot point should increase from previous; higher ratio indicates additional system stress

High Frequency (HF) graph—an indicator of parasympathetic activity or magnitude. The plot point should decrease from the previous.


Mean RR graph—plot point should decrease; a lower value indicates increased sympathetic action (or decreased parasympathetic action.) An extended trend upward could mean general system adaptation. An extended downward trend could mean I’m moving into an over-reaching or over-training state

Natural log of rMSSD index graph—plot point should decrease from the previous as this metric is supposed to be an indicator of parasympathetic system magnitude compared to the sympathetic system.

If the direction of one graph doesn’t agree with the others, or if the plot doesn’t go in the direction I thought it would, the first thing I look for is an input error when I transferred the data values to the tracking spreadsheet (Minitab 16,) or maybe I didn’t do a pre-processing step correctly. If the data checks-out, then I attribute the disagreement between graphs to the “fuzziness” of the deal. After all, I’m not certain this is an exact science (yet?) So far there have been a few contradictions since my start date on October 6, but for the most part, graph behavior has been consistent.

My next issue concerns the size or amount of change from one day’s plot to the next. Does the amount of change make sense? Should the plot point be farther up or down? Well, this condition is why I’m doing it in the first place; to try to predict or understand how much change is involved based on the level of training I did. This condition relates to the “gating” function I spoke of earlier. In other words, when race weekend arrives, where will my system’s recovery level be? Will I be ready for a great effort, or should I wait for the next venue? I think if I can figure-out the pattern, I’ll be able to back plan my training (and recovery) from one of my target races, like an “A” race/stage race/etc.

That was a lot of stuff to put in one blog post. I only have one months-worth of data based on Phase 1‘s training input. The next training level is the Strength Period of Phase 1, which starts this coming Monday. My next post should be (hopefully) much shorter.

Hey, thanks for reading, and let me know any questions you may have. Best of luck for your racing efforts!

2015 Four-Phase Plan: Hypertrophy Period—Raising the Bar

18 10 2014

It’s mid-October and I’ve been getting antsy about getting started since mid-September. For the last few weeks I’ve walked here, jogging there; trying to be active without being in the saddle. Nothing crazy, just different. I’ve also been doing preparation work with the Olympic bar in the squat rack, evaluating my form to help avoid injury and to anticipate the heavy work to come later. The specifics of lifting form are prolific on the web; just use a browser search and you’ll find them.

Phase I Hypertrophy Period

So in my mind, working backwards in a process context—to be competitive I must create and sustain higher power outputs than I was accustomed to producing as a Cat 4. In order to produce higher power outputs I must create and/or change the muscle fiber needed. In order to create or change the muscle fiber I must use the proper training, nutrition, and rest regimen.

Phase I is where I create the muscle mass. Specifically, the purpose is to: “stimulate muscle growth by requiring a high number of repetitions against moderately high resistances.” According to the author, “…these experimental models elicit significant increases in muscle size in relatively short periods of time.” I’m rather curious just how much of a mass gain will be realized. I wonder if I’ll end up looking like the character “Champion” from the animated movie The Triplets of Belleville:

Picture of the animated character

“Champion” Huge legs and tiny upper body


Performance Cycling author Dave Morris prefers that during this period we should not ride at all or very little because of the high work volume. He also recommends that many riders pay close attention to their response, while discomfort is expected, chronic soreness specifically from the joints should be followed by a reduction in either weight or sets performed.

First thing to do is determine my one-repetition-max (1RM.) Note that I’m using the low-cost concrete discs that I cast. Your discs will weigh a bit different. I’ll start this with a warm-up routine: 6 to 8 repetitions with the 19 lb. weights that ended my preparation period. Next, start the lift attempt sequence. Allow 2 to 3 minutes rest before trying the next level:

  • First attempt: 45 lb. set (135 total lbs.)
  • Second attempt: 45 and 7 lb. sets (149 total lbs.)
  • Third attempt: 59 and 7 lb. sets (177 total lbs.)
  • Fourth attempt: 59, 19, and 7 lb. sets (215 total lbs.)
  • Fifth attempt: 59, 45, and 7 lb. sets (267 total lbs.)
  • Final attempt: 59, 45, 19, and 7 lb. sets (305 total lbs.)

Crap. I was able to do the third attempt successfully, a total of 177 lbs. But when I tried the next level, 215 lbs., I had nothing in my legs and slowly sunk to the safety bars of the squat rack.  My second try at it resulted the same way, so I guess it is what it is—a starting point. I would have liked to have made the ~200 lb. level though.

All this lifting’s going to require food (based on my body weight):

  • CHO quantity—on heavy days-576 grams to 780 grams, on light days—390 grams to 476 grams
  • Protein quantity—117 grams per day.
  • Fat grams will make-up what’s left using a 65% CHO/ ~15% fat / 20% protein scheme.

In other words, I want to eat my minimum CHO and protein per day then allow fat calories to take up what’s left. I’ll use the Fitbit’s software to track food intake and burn rates. It worked really good for me last off-season for weight control so I’m going to stick with it.

Lift Schedule



Percent of 1RM

Rest between sets (min.)

#1 and #2 10 to 12 65 (light day 60) 1½ to 2
#3 and #4 10 to 12 70 (light day 65) 1½ to 2
#5 and #6 10 to 12 75 (light day 70) 1½ to 2

Weekly Plan

Monday Tuesday Wednesday Thursday Friday Saturday Sunday
Heavy Light Day off Heavy Light Day off (or team ride if I’m recovered) Day off

I can expect to get some aches but I need to watch out for chronic soreness in the joints…if this condition presents itself, I’ll decrease the training load by reducing resistance or sets.

Speaking of recovery and how to measure it. One new thing I’m trying is called heart rate variability (HRV) monitoring. This method has been around since about 2006, but I think it’s really starting to make its way into training regimens. Basically, the stress your body’s system is under manifests itself as changes in the beat-to-beat time period of your heart rate. When your body experiences stress, training input let’s say, it responds in certain ways, and one of those ways can be measured as trends in HRV.

In the next post I’ll write about how I’m using HRV in this year’s training program. Thanks for tuning-in.


%d bloggers like this: