How to convert decimal hour and calculate the average every 5 min?

I'm a beginner at Matlab and I need to solve a problem. First, I need to convert the UT columm from decimal hour to hour:minute:seconds. Then, I need to calculate every 5 minutes on average the ROT collumn and show the reply in a new matrix (hour:min:sec,rot mean).

Data

UT (column 1) A matrix 5.4 5.404 5.408

ROT (column2) A matrix

0.22

0.123

0.129

e.g. UT (5.404)=0.404*60=24.252; 0.252*60=15.12 ,then UT(5.404)=5:24:15 hours:min:sec

Thanks in advance

Marcelo

Answers


First convert decimal hour dates into serial dates where unity is a day:

serdates = [5.4;5.404;5.408]/24;

Then convert to string with datestr (this is however a cosmetic operation):

datestr(serdates,'HH:MM:SS')

Group observation in 5 minute bins (lb <= x < up):

ymdhms      = datevec(serdates);
[~,minbins] = histc(ymdhms(:,5),[0:5:60])

Group then by year, day, month, hour and 5 minute bins:

[untime,~,subs] = unique([ymdhms(:,1:4) minbins*5],'rows')

Accumulate rot:

rot5min = accumarray(subs,[0.22;0.123;0.129]);

And for fancier presentation collect into dataset with datestrings

dataset({ cellstr(datestr(datenum([untime,zeros(size(untime,1),1)]),31)),'Datetime'}, {rot5min 'ROT5min'})

ans = 
    Datetime                     ROT5min
    '0000-01-00 05:05:00'        0.472  

This will do. Cheers.

function v=myfunction(ut,rot)
% ut is a vector of decimal hours
% rot is a vector of the same length as ut
% v is a matrix with rows of the form (hour, min, sec, rot5) where
%   rot5 is an average of rot over 5 min interval from 2.5 min in the past
%   to 2.5 min to the future.

m=numel(ut);

% input validation
assert(isvector(ut) && isvector(rot) && numel(rot)==m);

% array initialization
v=zeros(m,4);
utCopy=ut;

for i=1:m
    % calculate hour from decimal hour
    v(i,1)=floor(utCopy(i));

    % calculate minute from decimal hour
    utCopy(i)=(utCopy(i)-v(i,1))*60;
    v(i,2)=floor(utCopy(i));

    % calculate second from decimal hour, round to nearest integer
    utCopy(i)=(utCopy(i)-v(i,2))*60;
    v(i,3)=round(utCopy(i));

    % calculate 5 mins central average of rot
    % to get forward average just replace the logical indexing with
    % ut>=ut(i) & ut<=ut(i)+1/12
    v(i,4)=mean(rot(ut>=ut(i)-1/24 & ut<=ut(i)+1/24));
end

end

Need Your Help

Auto suggestion in search with json return

php jquery css ajax

Auto suggestion in search with json return

How to use Java Swing Actions to create menu items and toolbar items in Netbeans

java swing netbeans action netbeans-7

I am reading a java book and the author creates menu items and toolbar items using the same action.

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.