2012-04-24 4 views
14

히스토그램에서 두 개의 피크를 감지하는 방법을 이해하려고했습니다. 여러 명이있을 수 있지만 가장 높은 두 개를 선택해야합니다. 근본적으로 내가해야 할 것은 왼쪽이나 오른쪽으로이 봉우리를 옮길지라도, 나는 그것들을 잡아야한다는 것입니다. 그들의 퍼짐은 다양 할 수 있고 PEAK 값은 변하기 때문에 Matlab에서이 두 피크를 잡아낼 수있는 방법을 찾아야합니다.히스토그램에서 두 개의 최고 피크를 찾습니다.

내가 지금까지해온 것은 5 가지 값 창을 만드는 것입니다. 이 창은 히스토그램의 값으로 채워지고 스캔이 수행됩니다. 매번 5 단계를 다음 값으로 이동하고 이전 창 값과 현재 값을 비교합니다. 어느 것이 더 큽니다.

더 좋은 방법이 있나요? HIST (또는 histc) 함수에서 변수 (y = hist(x,bin);) 및 행

enter image description here

+0

이 질문에 프로그래밍에서 신호 처리를 할 수 없다고 생각합니다. 통계를 바탕으로 한 답변이 나오면 어떻게 될까요? 신호 처리 또는 프로그래밍? –

답변

5

반환 데이터가 로컬 최대 값을 찾을 PEAKFINDER FileExchange 제출을 사용한다.

나는 또한 Eli Billauer의 PEAKDET 함수를 사용했습니다. 훌륭하게 작동합니다. 코드 예와 함께 여기 answer을 확인할 수 있습니다.

+1

피크 파인더를 실행하기 전에 커널 밀도 추정을 수행 할 것을 제안합니다. fileexchange 페이지의 샘플 수치는 여러 가지 오 탐지를 나타냅니다. 또한 왜 다른 질문이 dsp로 마이그레이션 되었습니까? o_O – abcd

+0

@Bringbackspy : 예,'hist' 대신'ksdensity' 함수를 사용할 수 있습니다. dsp 로의 질문 이동에 관해서는, 나는 모른다. 제가 답변을 작성하는 동안 일부 사회자의 결정에 의해 움직였습니다. – yuk

+0

yuk, 멋지다! 고마워요. 나는 그 안에 PEEK가있을 것입니다. :) –

6

가장 간단한 방법은 가우스 커널을 사용하여 고주파 변동을 제거하는 것입니다.

그런 다음 localmax 함수를 사용하여 로컬 최대 값을 찾습니다.

+2

+1 히스토그램이 '본질적으로'바이 모달이라는 것을 알고 있다면, 최대 두 마디까지만 부드럽게 할 것입니다. – leonbloy

+0

@slayton, 히스토그램은 이미 스무딩 단계를 거쳤습니다. –

+1

@Wajih, ok. 그러나 피크를 분리하려는 경우 고주파 변동을 필터링하기 위해 더 부드럽게 할 수 있습니다. 이러한 변형은 로컬 최대 값이 많기 때문에 피크 탐지를 어렵게 만듭니다. 당신이 그 (것)들을 그 후에 밖으로 거르는 경우에 확실히 사소한. – slayton

관련 문제