Average of every nth value in a vector

1 view (last 30 days)
Bethany Skinner
Bethany Skinner on 4 Dec 2019
Commented: Andrei Bobrov on 4 Dec 2019
I'm working on a project that will be measuring heart rate over long periods of time (8+ hours), and the data will be sampled every 0.1s. This will give me far more data than I would like/need! I'm looking to average the data to give me HR every 1 minute. The example data set that I'm working with at the moment is a vector of 137255x1 and I want to be able to average every 600 values. Is it possible to do this?
Thank you in advance!

Answers (2)

Matt J
Matt J on 4 Dec 2019
tmp=conv(yourvector, ones(600,1)/600,'valid');
result=tmp(1:600:end)

Andrei Bobrov
Andrei Bobrov on 4 Dec 2019
Edited: Andrei Bobrov on 4 Dec 2019
Let A - your array 137255 x 1
n = numel(A);
TT = timetable(A,'RowTimes',(0:n-1)'*saconds(.1));
out = retime(TT,'minutely','mean');
or
i = ceil((1:numel(A))'/600);
out = accumarray(i,A,[],@mean);
  2 Comments
Bethany Skinner
Bethany Skinner on 4 Dec 2019
Thanks for your answer - I've tried the first option and it returns the following error when running the final line:
"Error using timetable/retime. All variables in inpur timetables must be numeric, datetime, or duration when synchronizing using 'mean'."
Would you know how to fix this?
Andrei Bobrov
Andrei Bobrov on 4 Dec 2019
Please attach small interval of your "The example data..." as mat-file.

Sign in to comment.

Categories

Find more on Resizing and Reshaping Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!