MATLAB Answers

running mean of circular data (angles)

97 views (last 30 days)
Hi there
Im trying to do a running mean of a quite large wind-direction data-set but I'm having trouble finding solutions that work. Does anyone know of a simple solution?
Thanks in advance

  1 Comment

Sign in to comment.

Accepted Answer

Mark Brandon
Mark Brandon on 5 Oct 2011
You could look at the excellent "Circular Statistics Toolbox"

  0 Comments

Sign in to comment.

More Answers (2)

David Young
David Young on 5 Oct 2011
Have a look at
doc unwrap

  0 Comments

Sign in to comment.


Jakob Sievers
Jakob Sievers on 5 Oct 2011
The Circular Statistics Toolbox doesnt appear to have a running mean function though. I have used its circ_mean function to make my own running mean but it takes hours to complete its calculation due to the size of the dataset (basically a long vector containing 10 million points).
Does anyone have any other suggestions?

  4 Comments

Show 1 older comment
Jakob Sievers
Jakob Sievers on 5 Oct 2011
Well. I looked though the running mean function that I usually use, but it uses a trick looking like this: cumsum(angles)./wl where wl is the window length being meaned over, and im not sure how to transfer this fast method into a circular-data setting. So what I did was to do a "for" loop which continuously uses the circ_mean function from the above mentioned toolbox. Since I have this long dataset it takes around 5 hours to calculate it and im sure it can be done more easily. Im just not sure how.
What I did with your suggestion was:
angles2=unwrap(angles);
angles2_rm=runmean(angles2,100); %(where 100 is the window)
and then im thinking using the mod function to get back into circular mode:
mod(angles2_rm,360)
but it doesnt look right.
David Young
David Young on 5 Oct 2011
Note that unwrap assumes your angles are in radians. If you're using degrees (and from the 360 in your code I think you are), multiply your data by pi/180 before using unwrap. You can convert back afterwards if necessary by multiplying by 180/pi.
Also, perhaps there's a problem with runmean. Maybe you could explain a little more about what this function does, or if it's very short even copy it into your question. (Not into a comment or answer though.)
Jakob Sievers
Jakob Sievers on 5 Oct 2011
Hi David
I just talked with a colleague who said that a 30min mean would be sufficient, meaning that I can make a simple running mean that runs in a 20 seconds or so myself using the circ_mean as described above. Thanks for the help though!

Sign in to comment.

Sign in to answer this question.


Translated by