MATLAB: Split and group data in Array

arraygroup

Hello,
I have array of size 2200056*1 and it is plotted below.
I want to split the array based on different steps.
Goal: I want to find index in figure2 based on input signal array (figure1).
In this case, from input of multiple steps(figure 1), the output should be index numbers 1,2,3,4,7,9,10,11
If array consist only one step signal then i can find index easily by taking median(array). But if the array has multiple sequences then how can we achieve it? I think if i can split data in to groups then it would be possible but not sure how to split it?

Best Answer

Here's one way if you want the values to be rounded to represent what is in your input speed array.
load speed.mat
% Round values to remove perturbations
p10 = floor(log10(speed));
% Set resolution
p10(p10<1)=1; % smallest increment is 10
p10(p10>3)=3; % largest increment is 1000
tmp = speed./10.^p10;
newSpeed = round(tmp).*10.^p10;
% find and remove transitions
idx = find(diff(newSpeed)>0);
idx([inf; diff(idx)]>5000) = [];
newSpeed(ismember(newSpeed,newSpeed(idx)))=[];
% remove tail
idx = find(diff(newSpeed)<0);
newSpeed(idx(1):end)=[];
steps = unique(newSpeed)
steps = 8×1
0
100
600
1000
4000
8000
10000
13000