My Normalized Power Quest
My quest to understanding Normalized Power (NP) for my road cycling training left me a little wanting, so I decided to share my understanding of it (hopefully in a simplistic way). In my search, the articles were not exactly clear or descriptive on how to calculate it. My need for understanding/calculating normalized power arose from when I decided to write a code to calculate my fitness, like that provided by TrainingPeaks.com.
Below, I provide a MATLAB code, Python code, and Microsoft Excel link for how to calculate NP, and I also give graphical examples of how to calculate it. NP is a value among others needed to determine your fitness and Dr. Andrew Coggan shares a little bit of the history behind them. Training Peaks is only one system that has been developed for determining fitness, a great article by Science4Perfromance compares different training metrics used by Training Peaks, Golden Cheetah, and Strava
What is Normalized Power?
Normalized Power (NP) is a value that was developed/calibrated empirically to encompass the physiological workout stresses or how “hard” a workout felt. Basically, the premise of NP is that the average power of a highly variable workout will be approximately equal to the average power of a steady workout. This becomes important when riding terrain that has a lot of elevation changes, e.g., for mountain biking, hilly/mountain road ride, etc. or when performing interval workouts (Fig. 1).
Though, for steady or flat road rides, the NP will almost be equal to your average power for the ride, therefore NP isn’t as important on these types of ride. NP was mainly developed for rides that have a lot of surges, a lot of coasting, or interval training. The average power for non-steady types of ride will be significantly less than the Normalized Power and won’t give an accurate representation of the power for that particular ride.
The “Normalized” in Normalized Power
The name “Normalized Power” in a strict mathematical sense is an incorrect name for how the power values are manipulated to determine the NP. In mathematics or statistics, normalizing typically is performed to scale data values between 0 and 1. This process is usually done to eliminate the data units of measurements, which allows for the comparison of different data sets. This usually implies dividing each value of the data set by a certain value. It is understandable that the name “Normalized Power” was chosen because in a sense you are giving less weight or importance to 0 W values and a higher weight or importance to typical power values (typical, as in values while riding at speed). This is just my gripe about the naming of NP, but below I describe how it is calculated and its importance.
Calculating Normalized Power
The calculation of Normalize Power essentially has 4 steps and the are listed below. Fig. 2 gives an example of how to calculate NP. At the bottom of the page I have sample codes in both MATLAB and Python on how to calculate NP.
-
1.
-
2.
-
3.
-
4.
How to use Normalized Power
In this section, I mention functional threshold power or typically refereed to as FTP. More details on FTP, such as how to determine it and how it is related to training can be found here (post coming soon).
Fig. 3 shows a target power trace (training workout) that is to be followed on a smart trainer in erg mode. The power trace values in Fig. 3 are based on a functional threshold power (FTP) 282 W. Therefore, this power trace has little use to anyone other than people with an FTP of 282 W. On the other hand, a standardized trace can be made by dividing all the vales by the FTP. This gives Fig. 4, a more easily usable trace that can be used by others that know their FTP. All one needs to be done to determine one’s workout values would be to multiply the values of the power trace in Fig. 4 by their FTP.
Looking at the power trace from Fig. 3, not including the initial 10 min warm up time, the average power would be 219 W, whereas the Normalized Power is 250 W. This is a 31 W difference or a 13.2% difference between the average and the normalized power values. Obviously, these are just theoretical values, but if the rider rode the exact trace this is best that could be obtained. Therefore, by putting more importance on the higher values, a ride like the power trace in Fig. 2 is more like a steady 250 W average ride than a ride that has a steady 219 W average.
Normalized Power Functions
MATLAB NP Function
function [P_avg,NP] = cycling_norm_power(power)
power_30s = movmean(power,30,'omitnan','endpoints','discard');
P_avg = round(nanmean(power_30s));
NP = round(nanmean(power_30s.^4).^0.25);
end
Python NP Function
import pandas as pd
import numpy as np
def cycling_norm_power(Power):
WindowSize = 30; # second rolling average
NumberSeries = pd.Series(Power)
NumberSeries = NumberSeries.dropna()
Windows = NumberSeries.rolling(WindowSize)
Power_30s = Windows.mean().dropna()
PowerAvg = round(Power_30s.mean(),0)
NP = round((((Power_30s**4).mean())**0.25),0)
return(NP,PowerAvg)
Excel Moving Average
References
de Vroet, Matthew. “What Is Normalised Power and What Can It Tell Us?” CyclingTips, 15 Nov. 2017, cyclingtips.com/2017/11/normalised-power-vs-average-power/.
Ganoung, George. “What Is Normalized Power?” TrainingPeaks, TrainingPeaks, 3 Sept. 2015, www.trainingpeaks.com/blog/what-is-normalized-power/.
SUPPORT JAYLO CYCLING
Did you find this post useful? If you have any questions, feel free to leave a comment below. If you have any suggestions of reviews or things you would like to see in the future contact me. My reviews are thorough and often take a significant amount of time to produce.
Please consider checking out my Instagram, YouTube, and Facebook accounts to show me support there. If you feel generous and have the ability, consider buying me a coffee to help support this site. Thank you for taking the time to check out my website and don’t forget to Subscribe to my newsletter too.
12 thoughts on “Cycling Training: Easily Understand Normalized Power in 4 Steps”
Great article. Much more clear. Thank you.
Thanks. Finally someone stating the actual formula for computing the NP.
Thank you for reading! Yes, NP isn’t some mysterious black box that people can’t understand, especially when written out mathematically. I hope my post was useful. Have a good day.
Very helpful breakdown, I appreciate it.
Couple possible typos here:
* Under “CALCULATING NORMALIZED POWER”, you say “Figure 1 gives a graphical example of how to calculate NP.” I think this should say Figure 2.
* In Figure 2, when calculating the 3-second moving average power, the values shown are n/a, 155, 168, 162, 164, 163, n/a. I think the 3rd value, 168, should actually be 158. (156+158+161) / 3 = 158.333. The average cannot be greater than all of the numbers you’re averaging. Continuing the calculations with a corrected value I get a normalized power for this data set of 160.5, instead of 163.
Russ, You are quite right. Thank you for the catch. I have updated the figure. I believe I made a transcription error and wrote 168 instead of 158 and I carried that value through. Thank you for taking the time to read and for your feedback.
Hi,
Firstly, thank you for this article. So nice!
I copy the code but it doesn’t run well.
Do you have the full code? I’m trying to calculate the NP and other cycling metrics by myself, But I still haven’t succeeded.
Hope your response, thx! 😀
Alex, Thank you for taking the time to read the article. I’m glad you liked it. Send me an email or contact me on one of my social media platforms and I will gladly help you out. You can find it on my Contact Me Page.
Coding can be a little fussy sometimes. The codes I have in the article are functions I have saved a separate files. For pythons you need to import the function and for Matlab the function needs to be saved in the same folder or you need to tell Matlab which folder to look in, depending on where you save your functions. I look forward to hearing from you.
Jason
@Jason, what a great post – exactly they type of breakdown I was looking for!
Any sense on where the decision to take the 4th power comes from? Arbitrary / human guess, or is there any science behind it? Why not take the 2nd, 3rd or 5th? I’m guessing there’s a way to measure fatigue that aligns closely to the 4th power variable but curious about background. – James
@James, that is a good question. Thank you for reading my post and taking the time to respond. First, I don’t think it was arbitrary and probably the only science behind it has to do with statistics. The reason the concept of normalized power was developed was to have an averaged power that was more comparable to the actual workout energy expenditure than the just the average alone. For steady state workouts the difference between NP and avg power isn’t much different, but for all other rides that could be slightly different to extremely different. Thus, anytime you stop pedaling you will have short times of 0 watts but over a long ride it could add up and heavily skew the average power. I think this is where the the 4th power comes in. I assume that many non-steady state rides were performed, and through iterations of different exponents for the normalized power equation, they were fit to a steady state ride. The 4th power is was probably the closet integer number that best fit for many people. What is the actual value? Maybe 4.2. I would have to dig into Coggin’s papers again, but I believe they said 4 was a best fit for many people.
NP I think has become a standard that is referred to in the cycling industry. Is it super useful? Probably. Are the better ways of doing things? Probably. It is possible to just only include a range of power values say 75 W and above, then take the average. Programmatically, it may be easier to just perform the NP equation then finding the range of values to perform the avg power.
I think if someone has a lot of data, they could fit their own data and have a more accurate value. At an elite level it might be worth the effort, but probably not even then. If you are out there riding putting in miles, you are going to get faster/stronger. All of these training methods were developed to optimize training and to plus a rider to the limit with out over training.
In my FTP test I talk a little bit about fatigue and power. A little off topic, a lot of these things are possible to measure directly. So, using power we can correlate fatigue, stresses, etc. Even the Power isn’t directly measured. The power meter uses strain gauges that measures the changes in voltage and based on your cross section the force and power can be back calculated. Thus, NP was a better fit of an avg. power (specifically for non-steady state workouts) to a workout that would have been steady state in nature. Therefore, a more accurate value to calculate other values like intensity factor, Training Stress Score, etc.
The highest ratio NP to average power follows from 0 power half of the time and 100% power the other half: NP = ( 0.5*(2 * average power)^4 )^(1/4) = 1.68 * average power.
So that should result in the same fatigue as riding the whole time at 50% power?
Maybe worth to try 🙂
whole time at 50% * 1.68 = 84% power that is.
Thank you for checking out my post. NP is really only a guide to how a workout went not necessarily a method for optimized fatigue. Typically, if you are riding a flat road with steady power output, your Avg. power and NP are going to be the same. But, if you were to ride a hilly road your Avg. power and NP will be quite different. It is just a different type of averaging/weighting method so 0 W and lower W count less compared to your higher watts. Another method could be to truncate any power below a certain threshold, say 100 W.