I wrote a program in Matlab that uses the data for each ride to calculate the speed I would have gone for two situations: (1) the same ride with no wind present and (2) a windless, flat ride, similar to riding on an indoor trainer or inside a velodrome. Calculated totals are included in the statistics on the data-summary page and show that tail winds are slightly more numerous than headwinds for all my rides, on average.

I decided to test the mathematical cycling power model published by Martin, Milliken, Cobb, McFadden, and Coggan using the data from my iAero. I developed a routine that calculates power using the iAero data (minus its power data) and the power equation described in this article. The equation is quite detailed and includes several components:

- aerodynamic resistance, based on C
_{D}A (coefficient of drag times frontal area) - wheel rotation resistance, due to the wheel spokes slicing through the air similar to a fan
- rolling resistance, based on C
_{RR}(the coefficient of rolling resistance for the tire) - frictional wheel bearing losses
- changes in potential energy, due to elevation change
- changes in kinetic energy, due to inertial changes in (1) the velocity of the bike and cyclist and (2) the spinning wheels
- frictional losses between the gears and chain

Values for C_{D}A and C_{RR} can be difficult to determine, especially since they change throughout any ride based on the position of the cyclist and the quality of the road. Fortunately, the iAero computes average values for both of these coefficients during a calibration ride. I decided to use three different values of C_{D}A in my program: (1) the iAero coefficient for regular road grades, (2) a scaled-up number for high grades, and (3) a scaled-down number for downhill grades.
I had to guess a value for the wheel rotation resistance, but this isn't a big deal since it amounts to about one or two percent of the total aerodynamic resistance, which is itself a fraction of the overall power. An equation for wheel bearing frictional losses included in the article was used. Changes in potential and kinetic energy were easy to calculate given that wind speed, bike speed, and elevation data are gathered by the iAero.

The first component of the program that I wrote calculates power based on all the above-mentioned factors and compares it to the power measured by the iAero. The figure below shows that the model does a fairly good job of calculating power throughout the ride. Indeed, when I ran this program for multiple power files, the average error in total energy (power*time=energy) was 2.65%. This is quite good considering major factors, like the coefficients of aerodynamic drag and rolling resistance, are anything but constant. More importantly, inspection of the figure indicates that the calculation tracks the actual data quite well. Some of this error is due to the calculated power oscillating above and below the power indicated by the iAero. It may be that the iAero applies some smoothing to the data, which could mean that certain spikes in the calculated power are more accurate than the iAero power data since actual rides are subject to drastic changes in wind speed, braking, etc.

Once the power calculation model had been validated, I decided to have it output two sets of data. First, the data from the iAero (minus power data) was used to calculate how fast I would have gone (and how far) without any wind. This negates the detriment of headwinds as well as the benefit of tailwinds. Second, I used the iAero data to calculate how fast and far I would have traveled without any wind on a flat road. This second calculation in essence converts the outdoor effort to a ride on an indoor trainer or in a velodrome and normalizes rides so that they can be compared by distance. I've included figures of data from four different rides illustrating how these efforts compare with the idealized rides.

This first ride was a 36-mile loop that includes little elevation gain (789 feet) and had very little wind that day. There is little difference in the three velocities, as is to be expected for a fairly flat, wind-free ride. The distances (in miles) were 36.918 (actual ride), 36.601 (ride with no wind, –0.9%), and 37.227 (flat ride with no wind, +0.8%).

The second ride was a criterium workout on a 1.2-mile loop that has about 35 feet elevation gain per loop. This figure shows that the wind actually increased my peak speed by a few miles per hour on many of the laps. The distances (in miles) were 20.586 (actual ride), 19.088 (ride with no wind, –7.3%), and 19.711 (flat ride with no wind, +4.2%).

The third ride was a 45-mile out-and-back ride up and down a mountain, including an elevation gain of about 3,600 feet. It is obvious in the figure where I was climbing the mountain as the calculated flat, windless speed is consistently double to triple my actual speed (from 4000 to about 7800 sec). Then, on descending the mountain, that same flat, windless speed plummets and hovers near zero while my actual speed averaged about 30 mph and peaked over 45 mph. The distances (in miles) were 44.914 (actual ride), 43.050 (ride with no wind, –4.2%), and 51.542 (flat ride with no wind, +14.8%).

The fourth ride was the middle day (3 of 5) of my trip from Provo, UT to Mesquite, NV (2010). This ride included an elevation gain of about 8,800 feet and a brutal headwind that never let up and that I will never forget. The figure shows how my power output was a consistent effort that would average 18 mph on a flat road with no wind. However, the incessant wind kept me down between five and ten mph for much of the ride. The distances (in miles) were 70.651 (actual ride), 90.196 (ride with no wind, +27.7%), and 106.381 (flat ride with no wind, +50.6%).