필터 지우기
필터 지우기

Finding local minimums/maximums for a set of data

조회 수: 134 (최근 30일)
Si14
Si14 2012년 7월 21일
댓글: Umesh Gautam 2023년 5월 11일
Hi, I have a set of data which oscillates between minimums and maximum values. The min and max values change slightly over time. I want to see the trend of changing of min and max values over time. In order to do that, it seems that I need to extract the local min and local maximums.
Is there any function to extract the local minimums and maximums of the following graph?
Thanks.
  댓글 수: 4
Steev Mathew
Steev Mathew 2021년 3월 4일
Thanks! This helped me a lot. I was looking for a way to filter out noise from my data.
Anupama V
Anupama V 2022년 11월 6일
How to find the valley of a ppg signal?(secondary peak of a signal)

댓글을 달려면 로그인하십시오.

채택된 답변

Star Strider
Star Strider 2012년 7월 22일
편집: Star Strider 2012년 7월 22일
Another option is ‘findpeaks’ in the Signal Processing Toolbox. It will give you the maximum (and indirectly the minimum) values and their index locations. If ‘Data’ is the vector that produced the plot, to find the maxima and minima:
[Maxima,MaxIdx] = findpeaks(Data);
DataInv = 1.01*max(Data) - Data;
[Minima,MinIdx] = findpeaks(DataInv);
The true minima will then be:
Minima = Data(MinIdx);
The index values also allow you to determine the times the maxima and minima occurred.
  댓글 수: 9
Christos-Nikolaos  Zacharopoulos
Christos-Nikolaos Zacharopoulos 2018년 2월 27일
Hi, I know that this is an old question, but why is the signal inverted using : DataInv = 1.01*max(Data) - Data; Cheers,
Star Strider
Star Strider 2018년 2월 27일
For some reason, it was important that the inverted waveform be greater than zero. (That was years ago, so I don’t remember the details.)
That’s likely not necessary for every signal. If you want the minima, just negate the original signal and use the indices findpeaks returns in the second output to get the values of the original signal.
I you have R2017b, the islocalmin function is also an option to get the minima without inverting the signal.

댓글을 달려면 로그인하십시오.

추가 답변 (5개)

Steven Lord
Steven Lord 2021년 3월 4일
For more recent releases take a look at the islocalmin, islocalmax, and (perhaps) detrend functions.

Si14
Si14 2012년 7월 26일
Thank you guys for your responses. I am using the following and it works nice:
[Maxima,MaxIdx] = findpeaks(Data);
DataInv = 1.01*max(Data) - Data;
[Minima,MinIdx] = findpeaks(DataInv);
Minima = Data(MinIdx);
  댓글 수: 2
Star Strider
Star Strider 2012년 7월 26일
Thank you for accepting my answer!
Umesh Gautam
Umesh Gautam 2023년 5월 11일
It is working great.

댓글을 달려면 로그인하십시오.


Image Analyst
Image Analyst 2012년 7월 22일
편집: Image Analyst 2012년 7월 22일
If you have the Image Processing Toolbox, you can use imregionmax() and imregionalmin(). Do you have that toolbox? If you do that would be the simplest because it's just simply one line of code to find either the maxs or the mins.
You can also do it by seeing where the morphological max or min (performed by imdilate() and imerode() respectively) equals the original array. But again, that requires the Image Processing Toolbox.

Randy82
Randy82 2014년 8월 13일
I have one question: Why do i have to multiply max(Data) with a factor 1.01?
  댓글 수: 1
Star Strider
Star Strider 2014년 8월 13일
To keep all the values of the inverted vector > 0.

댓글을 달려면 로그인하십시오.


Prithisha K
Prithisha K 2021년 9월 8일
Set the prominence window value to 25. Then increase the min.prominence value untill there are exactly 9 minima found.

카테고리

Help CenterFile Exchange에서 Descriptive Statistics에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by