Calculate mean values of specific (but dynamic) intervals

NB (view profile)

on 1 Aug 2019
Latest activity Commented on by NB

NB (view profile)

on 2 Aug 2019
Accepted Answer by Jos (10584)

Jos (10584) (view profile)

Hello everyone,
I want to calculate mean values of specific (but dynamic) intervals across several result files. I know how I get more than one results file into MATLAB and the other basics.
But what I dont know is the following: an interval should be defined/ starting when a value is between -0.05 and 0.05 in a specific column. It is dynamic, because it sometimes lasts for 8 seconds, sometimes for 10 seconds. So the interval should be ended when the value is <-0.05 or >0.05.
Then i want to calculate the mean value of data from another column according to the defined intervals in the other column.
I hope u understand what I want to do.

dpb

dpb (view profile)

on 1 Aug 2019
I presumed as much...one last Q? (at least last for now..."one more thing!" :) ) -- is that it will cross again a sure thing and it is only the initial time period within the threshold around zero that is of interest, correct? So one can truncate anything after the transient portion begins once it again at some distant time crosses the threshold? If that is so, then it makes the search logic much simpler.
NB

NB (view profile)

on 1 Aug 2019
well it will cross it several times (roughly 20-25 times) so there are 20-25 intervals that are of interest and which has to be defined. so unfortunately u cant truncate something
dpb

dpb (view profile)

on 1 Aug 2019
Ah! That's a key piece, then...

Tags

Answer by Jos (10584)

Jos (10584) (view profile)

on 1 Aug 2019

% interval and value are the relevant columns of your data matrix
interval = data(:,3)
value = data(:,2)
% find the sections
q = ~(interval < -.05 | interval > .05)
dq = diff([false q false])
ix1 = find(dq==1)
ix2 = find(dq == -1) - 1
% function to apply to each section
myfun = @(k) mean(value(ix1(k):ix2(k)))
R = arrayfun(myfun, 1:numel(ix1)) % mean of each section
not tested but it should work :-)

NB

on 2 Aug 2019
Thanks!