Saturday, January 5, 2013

About yaw II

I wasn't going to write more posts about this subject but I've got some results to share. If you remember my previous post about yaw, I calculated the relation between the standard deviation of the Maxwellian distribution and the average of the Rayleigh distribution for wind speeds. One of the main problems of the Rayleigh distribution is that there is only one tuning parameter. That means that average value and variability can't be chosen indepently or, alternatively, that a high average wind speed means high variability.

For that reason, I have tried to modify Dan Connelly's yaw model for a more evolved wind speed model. The Weibull distribution is a two-parameter distribution that is used to model wind speed in the energy industry but its complexity means that no analytical expression can be obtained for the yaw probability model for the fixed bike speed case. If we consider that bike speed is variable, it becomes too much computing intensive and impractical.
As I wanted to take into account variable bike speeds, the Rayleigh model was the only option for wind speeds. Assuming a Weibull distribution of bike speeds, the yaw probability function for variable bike and wind speed and bike and wind direction is:
κ, shape factor of the Weibull distribution. λ, scale parameter of the Weibull distribution. va, average wind speed
The main problem of this distribution is that it isn't normalized and, as no analytical solution exists, the normalization constant can't be computed. The normalization constant could be calculated numerically but this would be too computing intensive so I have used an alternative method. If you calculate the probability for a given yaw, the real probability would be that value divided by the normalization constant. So, if you calculate the probability for different yaws and you fit that data to a null-average gaussian distribution (as Mavic's data) multiplied by that unkown constant, the standard deviation and the normalization constant can be determined.

An example. Weibull distribution for bike speeds:
Rayleigh distribution for wind speeds:

And the resulting probability function and CDF of yaw:

More soon. Thanks for reading!


  1. Will you only be doing analytical math or do some kind of (monte carlo) simulations? I believe the model should be more refined and thus too complex for anything analytical. Could be done with some python code.
    I'm not a fan of the mavic data. If you watch the video you can see their setup at some point. They have the sensor way up front on the aero bars which means they're susceptible to big variations if the rider only wiggles with the steer a few degrees. I think their sensor should be in line with the fulcrum (headset) or close to it.

  2. Hi Aralo,

    If you analyze steering while pedalling in a straight line, you will see that the handlebar is continuosly turning from left to right with a small amplitude so the effect on the yaw probability function should be negligeable (wind coming from the right. yaw increase due to turning to the left is compensated by turning to the right). The same can be applied for steady-state turning considering that the same number of turns to the left and to the right is present.

    From my point of view, the only problem of Mavic's data is the lack of information about the population that generated it. For that reason, I have tried to develop a model that can be tuned for different bike and wind speed cases. Monte Carlo simulations is an option to analyze correlation with the model but I consider that there are more interesting methods. For example, given a bike course route, bike speed evolution and wind speed and direction, you can compute yaw frequency of ocurrence. Do it with different conditions and analyze if the data fits the model. It's some sort of Monte Carlo simulation but you are sure that the simulation represents real world conditions

  3. Hmm, maybe I didn't express myself very clearly regarding the Mavic data: I think the sensor needs to be mounted fixed to the frame (maybe where you'd mount a front light). Let's say the rider rides straight ahead and he/she wiggles by +-2 degress (very little) simply because you never steer quite straight, then you will get a variation of 4 deg. in your data which is quite a lot since most of the yaw distribution is around 0..20deg. It effectively smooths (convolves) the data which means the estimated distribution can be quite far from the ground truth.

    Personally, I'd never spend the time on doing anything analytically with yaw distributions since you'd have to do the math again and again for different distributions / assumptions. Performing a few thousand simulations is only a matter of a few ms and can be performed on a more complex model which would allow even arbitrary input distributions. I've posted the program code for a Mathematica simulation on ST and it was only a few lines IIRC (a year ago).
    For instance, doing a simulation you could generate the rider data from a bimodal distribution (probably suitable for an out-back time trial) with only adding 2-3 lines of code and get the results immediately. Doing this with a theoretical model would require a lot more time. But then, I'm more of a computer engineer as opposed to mathematician... :)

  4. I agree with you about the shift of the data to non-zero values due to steering but the variable wind speed will smooth those results to the Gaussian distribution that we have tipically seen (Mavic, Zipp, etc) with a slightly higher standard deviation. Maybe they have chosen that position for the sensor to know what typical yaws the front wheel sees.

    I have seen your post in ST and it would be definitely an advantage due to its flexibility to different distributions. As I have said, considering a Weibull distribution for bike and wind speed, the calculation takes forever and a Monte Carlo approach could be more practical.

  5. Never thought of that! You're right, that makes sense to mount the sensor that way to get the yaw that the front wheel sees.
    Keep your posts coming. I'll read them!