How to calculate mean wind direction

Hello!
I need help figuring out how to calculate mean wind direction when my data is in degrees (0-360). I just realized my current program does not take into account that the data is circular, and the mean of 355 and 5 will be 180, instead of 0. Any help is greatly appreciated! I am a beginner when it comes to MATLAB programming

2 comentarios

José-Luis
José-Luis el 5 de Mayo de 2014
Instead of 0, you mean?
Jenna Marie
Jenna Marie el 5 de Mayo de 2014
Ah yes thank you for catching that! Accidentally mixed up 360 degrees in a circle with 365 days in a year. It's been a long day....

Iniciar sesión para comentar.

 Respuesta aceptada

José-Luis
José-Luis el 5 de Mayo de 2014
average = mod(sum(data),360)./numel(data)
Please accept an answer if it helped you.

12 comentarios

?
? el 9 de Jul. de 2017
180 and 180 mean is 0?
Ana Soph
Ana Soph el 6 de Mayo de 2020
i can stablished for 1 minute to 10 minutes data, how can i do that?
Ana Soph
Ana Soph el 6 de Mayo de 2020
How can convert to 1 minute to 10 minutes, a wind directio data ? please, i have a matrix fo 1440x31
giacomo labbri
giacomo labbri el 13 de Jun. de 2020
Editada: Walter Roberson el 13 de Jun. de 2020
I tried to use the proposed function but for me it didn't work. Here is the function I wrote instead (based on https://en.wikipedia.org/wiki/Mean_of_circular_quantities
function [windir_avged] = windir_avg(windir)
windir_avged=180/pi*angle(sum(exp(1i.*windir.*pi/180))/numel(windir));
if windir_avged<=-0.001 %it should be 0 but the it would inclde some slightly negative numbers that are just due to numerical precision
windir_avged=abs(windir_avged)+180;
end
end
The idea is to look at angles as vector of unit lenght and treat these as complex numbers
Ana Soph
Ana Soph el 5 de Ag. de 2020
THANK YOU SO MUCH! :d
Ana Soph
Ana Soph el 5 de Ag. de 2020
how can i calculate for rows ?
Ana Soph
Ana Soph el 5 de Ag. de 2020
windir are my data ?
The below version handles arrays.
function [windir_avged] = windir_avg(windir)
windir_avged=180/pi*angle(sum(exp(1i.*windir.*pi/180))/numel(windir));
mask = windir_avged<=-0.001; %it should be 0 but the it would inclde some slightly negative numbers that are just due to numerical precision
windir_avged(mask) = abs(windir_avged(mask))+180;
end
Naseef Muhammed
Naseef Muhammed el 9 de Sept. de 2022
Editada: Naseef Muhammed el 12 de Sept. de 2022
According to your script, average of 345 and 355 degrees are 190 !
Walter Roberson
Walter Roberson el 9 de Sept. de 2022
It is not clear which script you are referring to?
@Walter Roberson I'm refering to the function 'windir_avg' you provided above. In that function, if we given 2 anlges from third or fourth, it will give a wrong answer. for example, if we put 345 and 355 the answer will be 190. similarly, 240 and 250 will result in 295. I hope it can be resolved if we edit your script as below:
function [windir_avged] = windir_avg(windir)
windir_avged=180/pi*angle(sum(exp(1i.*windir.*pi/180))/numel(windir));
if windir_avged < 0
windir_avged=windir_avged+360;
end

Iniciar sesión para comentar.

Más respuestas (3)

Jenna Marie
Jenna Marie el 5 de Mayo de 2014

0 votos

Thank you so much for your response!
What does numel mean?

1 comentario

No worries.
doc numel
Counts the number of elements in the matrix.

Iniciar sesión para comentar.

Walter Roberson
Walter Roberson el 9 de Jul. de 2017

0 votos

See unwrap() but you will need to convert to radians
Robert Daly
Robert Daly el 16 de Jun. de 2021
I needed a solution that would ignore NAN values in the data.
Converts the direction data into X & Y vector components, averages those, then converts back to direction.
function [windir_avged] = windir_avg(windir)
[x,y] = pol2cart(deg2rad(windir),ones(size(windir)));
x=mean(x,'omitnan');
y=mean(y,'omitnan');
[windir_avged,~]=cart2pol(x,y);
windir_avged = rad2deg(windir_avged);
end

Categorías

Preguntada:

el 5 de Mayo de 2014

Comentada:

el 10 de Feb. de 2023

Community Treasure Hunt

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

Start Hunting!

Translated by