2013-05-29 2 views
1

MATLAB을 사용하여 플로팅 한 데이터 세트에서 첫 번째, 두 번째 및 세 번째 봉우리를 찾고 싶습니다. 누군가 이걸로 나를 도울 수 있습니까? 저는 여기에 중앙 아이디어는 특정 시간 간격 이후에 발생하는 피크를 찾는 것입니다플롯에서 첫 번째, 두 번째 및 세 번째 최대 값 찾기

enter image description here

업로드 한 플롯에 대한 링크입니다. 두 번째 조건은 처음 네 개의 피크를 저장 한 다음 조건을 깨는 것입니다. 그래프에서 첫 번째 최대 값을 찾습니다. 나는 X 축에서 2530 인 시간 값을 봅니다. 나는 곧바로 이웃을 보지 않고 X 축에서 180-200 후에 오는 피크를 찾는다. 나는 그 때 저장되는 첨단 2를 얻는다. 그런 다음 다시 180 ~ 200으로 점프하고 이웃의 봉우리를 다시 검색합니다. 마지막으로 처음 네 개의 최대 값을 얻은 후에 나는 봉우리 검색을 중단합니다.

+2

최대 값을 정의하여 시작하십시오. 두 번째 큰 원점이 두 번째 점입니다. – Rasman

+0

@Rasman 더 많은 maximas가 있음을 알고 있지만 표시된 부분 만 필요합니다. 또한 그래프에서 첫 번째 파형 피크가 2530이라고 가정하면 파형의 다음 피크는 첫 번째 파형 피크 이후 약 180-200 밀리 초가됩니다. 그래서 다음 피크는 2710과 2730 사이에 있습니다. – maverick

+0

그러면 3350에 피크가없는 이유는 무엇입니까? – Rasman

답변

2

이러한 경우 일반적으로 수행하는 작업은 최대 값을 검색 한 다음 해당 최대 점을 중심으로 한 작은 주변에서 모든 점을 지우고 프로세스를 반복합니다. 이웃 크기는 물론 응용 프로그램에 따라 다릅니다. 당신이 벡터 y의 데이터가있는 경우

그래서, 다음과 같은 작업을해야합니다 : 대안으로

[max1, max_ind] = max(y); 
y(max_ind-delta:max_ind+delta) = 0; 

[max2, max_ind2] = max(y); 
+0

위의 솔루션에 대한 문제점은 내 그림에서 표시된 최고점이 아닌 최대 max_ind-delta 및 max_ind + delta의 값을 가지고 있다고 가정합니다. 따라서이 가치는 또한 구원 받지만 사실은 무시해야합니다. – maverick

+0

@maverick : 'max_ind'에서 주 피크를 찾으면이 코드는 주변 윈도우의 보조 피크를 지 웁니다. 인접 피크를 저장해서는 안됩니다. –

1

을 nimrodm의 대답에, 당신은 당신의 이점에 알려진 시간 지연을 사용할 수 있습니다. 첫 번째 최대 값을 찾은 다음 알려진 지연 시간을 뛰어 넘어 작은 창에서 최대 값을 검색하십시오. 이 작업을 수행 할 때 인덱스를 조정해야하지만 훌륭하게 작동합니다. 벡터 y에서

으로 데이터 :

[max1,max_ind1] = max(y); 
next_ind = max_ind + 190; 

[max2,max_ind2] = max(y(next_ind-20:next_ind+20)); 
max_ind2 = max_ind2 + next_ind-21; 
+0

예 David 위의 코드는 위의 경우에 잘 작동하지만 단 하나의 피크가있는 일부 파형이 있으므로 실제로 거기에서 절개를 중지하고 하나의 값만 저장해야합니다. – maverick

+0

@maverick 당신은 nimrodm의 해결책에도 문제가 있습니다. 두 경우 모두 임계 값을 설정할 수 있으며, 임계 값보다 높은 피크를 찾지 못하면 찾고있는 것을 중지하십시오. –

0

findpeaks 기능은 당신에게 벡터의 모든 피크를 줄 것이다, 그러나 더 많은 일을 당신이 상관 없어 피크를 필터링하기 위해 노력 필요. 낮은 패스 필터는 findpeaks 전에 적용될 수 있습니다.

관련 문제