Utilizing "maxk" function in series of vectors

3 views (last 30 days)
Hi. I used "findpeaks" function, and get peak datas in vector(pks, locs): "locs" means the X value.
And I wanna get 4 peak datas in vector in order to "locs" value like the loaded picture in red grid (in the range of 1<locs<10).
But according to the present code, I can only get seperate "maxk" values for each pks and locs.
How can I get desirable vector array like the picture?
for n=1:col-2
y=numbers(:,col);
ys=smooth(y,50,'sgolay',5);
[pks,locs] = findpeaks(ys,x,'MinPeakDistance',0.5);
A{n}=[pks,locs];
B{n}=maxk(A{n,1}(locs>1&locs<10,:),4);
end

Accepted Answer

Matt J
Matt J on 2 Sep 2021
Edited: Matt J on 2 Sep 2021
for n=1:col-2
y=numbers(:,col);
ys=smooth(y,50,'sgolay',5);
[pks,locs] = findpeaks(ys,x,'MinPeakDistance',0.5);
[~,idx]=maxk( pks(locs>1&locs<10) ,4);
A{n}=[pks,locs];
B{n}=A{n}(idx,:);
end
  2 Comments
Daeyeon Koh
Daeyeon Koh on 2 Sep 2021
Hi Matt, and thank you for your help.
I understand usability of indexing.
By the way, although I set the locational range (locs>1&locs<10), it looks like "locs>1" doesn't work.
(the picture below is a result when sorting idx: sort(idx))
How to solve this problem?
Matt J
Matt J on 2 Sep 2021
Edited: Matt J on 2 Sep 2021
To troubleshoot, we need to see pks and locs. I suggest attaching them in a .mat file.

Sign in to comment.

More Answers (0)

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Tags

Products

Community Treasure Hunt

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

Start Hunting!