running mean of circular data (angles)

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

 Respuesta aceptada

Mark Brandon
Mark Brandon el 5 de Oct. de 2011

1 voto

You could look at the excellent "Circular Statistics Toolbox"

5 comentarios

Ana Soph
Ana Soph el 6 de Mayo de 2020
if i have the matlaba 2015, what can i do ?
Walter Roberson
Walter Roberson el 6 de Mayo de 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 el 6 de Mayo de 2020
Thanks good man
Ana Soph
Ana Soph el 6 de Mayo de 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 el 7 de Mayo de 2020
I am not aware of any meanangle() function that has 'omitnan' as an option.

Iniciar sesión para comentar.

Más respuestas (2)

Jakob Sievers
Jakob Sievers el 5 de Oct. de 2011

0 votos

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 comentarios

David Young
David Young el 5 de Oct. de 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 el 5 de Oct. de 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 el 5 de Oct. de 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 el 5 de Oct. de 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!

Iniciar sesión para comentar.

Preguntada:

el 5 de Oct. de 2011

Comentada:

el 7 de Mayo de 2020

Community Treasure Hunt

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

Start Hunting!

Translated by