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

 Akzeptierte Antwort

Mark Brandon
Mark Brandon am 5 Okt. 2011

1 Stimme

You could look at the excellent "Circular Statistics Toolbox"

5 Kommentare

Ana Soph
Ana Soph am 6 Mai 2020
if i have the matlaba 2015, what can i do ?
Walter Roberson
Walter Roberson am 6 Mai 2020
You can still use that File Exchange contribution. Just download it and install it and add the directory to your MATLAB path.
Ana Soph
Ana Soph am 6 Mai 2020
Thanks good man
Ana Soph
Ana Soph am 6 Mai 2020
  1. how can i use mean angle?
  2. M = xlsread('Dic2019','Dic2019mat')
  3. ten_minute_avarege = meanangle(reshape(M, 10, []), 'omitnan')
  4. xlswrite('datosexcel1.xlsx', ten_minute_avarege, 'Hoja1', 'A1');
Walter Roberson
Walter Roberson am 7 Mai 2020
I am not aware of any meanangle() function that has 'omitnan' as an option.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Jakob Sievers
Jakob Sievers am 5 Okt. 2011

0 Stimmen

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 Kommentare

David Young
David Young am 5 Okt. 2011
Could you say more about what the problem is? What's actually going wrong, that can't be solved with unwrap? Do you know how to do a running mean on non-circular data?
Jakob Sievers
Jakob Sievers am 5 Okt. 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 am 5 Okt. 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 am 5 Okt. 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!

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by