Normalized Power Calculation (last "n" minutes)

Training Peaks defines an interesting metric called VI (Variability Index). It is simply NP/Pwr (Normalized Power divided by Avg Power). For endurance activities (such as a 12 or 24 hour bike race), it is helpful to track VI for, say, the last "n" minutes (user defined, say 10, 20, 30 mins). Helps you track that your power generation is smooth.

So, I need to calculate NP for the last "n" minutes.

NP is another of the native Garmin metrics that isn't exposed in the CIQ API (like Grade). Bummer. So, we have to calculate it. It is easy enough for the last 30 seconds (see the 4 step process, below). It just takes computational power to regenerate NP every second using a rolling 30 second buffer of power data. And, it is easy enough to track NP since the start of the activity by maintaining a running average of the NP values generated every second.

If I wanted to know the NP for the last "n" minutes. Would it make sense to just save the overall activity's NP value once a minute, and then average the last "n" (say: 30) values? To give me the NP for the last 30 minutes?

Here is the 4 step process to calculate the current NP value.

Thanks!

  • Hi Dave.

    Depending on you device, you could use the datafield Running Partner: https://apps.garmin.com/en-US/apps/4ee88934-ff43-45ef-b902-9eec24e4542d where I added the calculation of the running activity power, together with the normalized power, so you can select any of these values to be displayed on the screen of your device:

    • A.POW: current activity power estimation

    • N.POW: normalized activity power estimation

    • A.A.P.: average activity power estimation

    • L.A.P.: current lap average activity power estimation

    I compared the results with the ones from runalyze and are vey similar. Nevertheless it's difficult to get the same values due to several reasons; more specifically due to I compute the values on a real-time basis, not at the end of the activity., but for me it's accurate enough, so I can have a a good estimation. Note that no external devices (power sensor) are required.

    The data from the "current activity power estimation" is uploaded to Garmin Connect, as well as its average and its normalized value.

    You can find a description here: https://sites.google.com/view/tonix76/garmin/runningpartner

    I hope this helps. As I previously commented, for me it's enough.

    Toni.

  • If I wanted to know the NP for the last "n" minutes. Would it make sense to just save the overall activity's NP value once a minute, and then average the last "n" (say: 30) values? To give me the NP for the last 30 minutes?

    This answer comes from a purely mathematical, not practical angle: since we know that the value of normalized power can change every second (since it's based on power, which can change every second), the most correct thing to do would be to sample the NP value once per second (just like power itself), and take the average over the last 30 minutes (60 * 30 values).

    However, in reality you may find it doesn't make much difference if you go with a lower sampling resolution. I guess you'd have to try both methods and see if there's any noticeable difference (for you).

    I don't cycle, so I wouldn't know if normalized power changes much over a minute in practical terms - from the definition, probably not. (I have implemented the metric for a running power field, but I never actually use it in real life.)

    EDIT: Argh I just realized I commented on a 2-year old thread :(.

    I really think threads older (*) than a few months should automatically be closed, with the possible exception of bug reports and showcase threads. (* Or maybe threads with no *activity* within the last few months should automatically be closed.)