피크 검출 방식


24

존재하는 피크 검출 알고리즘은 무엇입니까? 시끄러운 데이터가 있으며이 데이터에 대한 피크 감지를 구현하고 싶습니다. 데이터는 반대로, 실제로 바닥을 결정하려고합니다.

다음은 Excel에서 데이터의 스냅 샷입니다. 나는 양쪽 바닥을 감지하고 싶습니다. 저역 통과 필터를 통해 데이터를 전달한 다음 피크를 결정하는 이동 평균을 수행하고 이동 평균 내에서 다른 검색을 수행합니다. DSP 배경이 없습니다. 이것은 상식적인 접근 방식 일뿐입니다. 전문가들이 추천하는 것을 듣고 싶습니다.

여기에 이미지 설명을 입력하십시오


2
탐지하려는 두 가지 바닥은 무엇입니까? 나는 단지 하나의 명백한 것을 본다. 어떤 종류의 소음이 있는지 또는 어디서 나오는지 알고 있습니까?
Jason R

피크 탐지 전략에 영향을 미치는 특정 하드웨어 (자원 제약 조건)에서 구현 하려는지 알고 싶습니다.
anasimtiaz

@JasonR 자주색은 분명합니다. 그러나 날카로운 모서리에는 이상 치가 있습니다. 이상적으로, 나는 그것을 면도하고 바닥 지점을 계산하는 것보다 원합니다. (따라서 내 접근 방식의 LP 필터) 밝은 파란색의 눈에 띄지 않는 것은 자주색 피크의 최소 지점입니다. 자주색은 실제로 관심사가 아니지만 연한 파란색입니다. 엑셀 플롯은 정의를하지 않지만 이것은 4096이 2V 인 12 비트 ADC에서 나온 것입니다.
Ktuncer February

@anasimtiaz는 iPhone / Android에서 실행될 것이라고 믿거 나 말거나 PC와 같다고 말할 수 있습니다. 하드웨어 제약이 없습니다.
Ktuncer February

@Ktuncer 나는 당신을 위해 몇 가지 이미지를 추가했습니다.
Spacey

답변:


12

Ktuncer에는 여러 가지 방법이 있습니다. 내가 권장하는 한 가지 방법은 DWT (Discrete Wavelet Transform)를 사용하는 것인데, 특히 Daubechies Wavelet을 살펴보십시오 . 예를 들어 Daub-14 / Daub-Tetra를 선택하겠습니다.

기본적으로 실제로 필요한 것은 신호를 '추세'한 다음 최소 또는 최대 선택을 수행하는 것입니다. 그것은 당신의 특이 치를 제거 할 것입니다. daub-14 / daub-tetra wavelet 변환을 사용하면이 작업을 수행 할 수 있으며 신호의 특성을 알지 못하므로 특히 도움이됩니다. daub-14를 사용하면 14/2 = 7 정도의 다항식 신호를 정확하게 표현할 수 있으며 그 이상이 필요하지 않은 것처럼 보입니다.

이 웨이블릿 변환의 계산은 본질적으로 에너지를 몇 가지 지표로 '압축'합니다. 이러한 지수는 기본 벡터에 대한 가중치를 나타냅니다. 나머지 가중치는 (이상적으로) 0에 가깝습니다. 신호에 노이즈가있을 때 (일반적으로 0) 가중치는 이제 약간 가중치를 갖지만 단순히 가중치를 제로화하고 신호를 '거부'할 수 있습니다. 완료되면 간단한 최대 / 최소 감지를 수행 할 수 있습니다.

더 자세한 내용이 있습니다. 구현 방법에 대해 논의하고 싶은 경우 저에게 이메일을 보내 주시기 바랍니다. 나는 이것에 대해 전에 비슷한 작업을 수행했습니다.

편집 : 다음은 Daub-Tetra Denoiser를 보여주는 이미지입니다.

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오


1
나는 이것을 좋아한다. matlab에 이것에 대한 참조 라이브러리가 있는가?
Ktuncer 2012

@Ktuncer 이메일을 보내주세요.
Spacey February

4

나는 전문가가되는 것은 아니지만 여기에 내가 할 일이있다 :

변동이 심하게 서서히 변화하는 신호가있는 것 같습니다. 검색하는 피크는 약간 더 강한 변동이므로이를 사용하여 감지합니다.

  1. 하자 가 될 원시 신호를. 적당한 수의 샘플에 대해 이동 평균을 취하여 부드러운 캐리어 를 만듭니다 .X(T)Y(t)

  2. 성공하면 평균이 0이어야합니다. 의 표준 편차 를 계산하십시오 .XYσXY

  3. 당신은 당신의 피크를 검출 할 수있는 경우 , 는 일반적으로 2, 3, 4입니다.|(XY)(t)|>α×σα

절대 값을 제거하고 적절한 테스트를 사용하여 오버 슈트 또는 언더 슈트를 구체적으로 감지 할 수 있습니다. 당신이 찾고있는 것입니까?


1
재미있는 접근법. σ는 무엇입니까? (표준 개발자?) 또한 수학은 제쳐두고 그 뒤에 논리는 무엇입니까?
Ktuncer 2012

@ user4749 : 재미있는 이름 :) 좋아요. 예, 는 표준 편차입니다. 변동 진폭의 측정으로 사용합니다. 데이터에서 시간이 지남에 따라 일정하게 보이므로 올바른 접근 방식임을 나타냅니다. 논리는 피크가 이러한 변동보다 클 때 피크가 감지되므로 감지가 강력하다는 것입니다. MATLAB을하십니까? 우리는 당신의 신호를 가질 것입니다. 최소한 피크를 아주 쉽게 플래그 지정할 수 있습니다. σ
Jean-Yves 2019

@ user4749 기본적으로 여기서 일어나는 일은 Y (t)가 '트렌드 전용'신호가 될 것입니다. 또한 평균을 의미합니다. 이제 신호에서 신호의 평균을 뺍니다. 이것이 X (t)-Y (t) 부분입니다. 이제 남은 것은 당신의 소음입니다. 이제 (소음이 가우시안이라고 가정) std, & \ sigma &를 사용합니다. 이제 abs (X (t) -Y (t))> 모든 값을보십시오 . 왜? 이것은 기본적으로 영어로 "소음 일 가능성이있는 모든 값의 99.99 %를 버리고 소음이 아닌 값만 남겨 둡니다"를 의미합니다. 4σ
Spacey

나는 확실히 당신이 찾고있는 전체 피크를 얻을 것이다 아니라고하더라도 @ user4749이 (난 당신이 '광범위한'피크를 찾고 있습니다 같은데?), 당신은 아웃 라이어 피크를 얻을 도움이 될 것입니다
스페이시

1
@ Jean-Yves 안녕하세요! :-) 당신은 소음이 여기 btw이라고 가정한다? (우리가 임계 값을 지정할 수있는 이유입니다). 궁금합니다. 소음이 채색되면 어떻게 되나요?
Spacey

4

피크 검출에는 1D 또는 다차원 신호에 대한 응용 분야가 상당히 많습니다. 다음은 이러한 신호의 변화와 피크 해석에 대한 몇 가지 예입니다.

  • 원본 포스터의 1D 데이터;

  • 이미지를 충분히 변환하면 각 피크는 원본 이미지의 선에 해당합니다. 여기에 이미지 설명을 입력하십시오

  • 이미지의 자기 상관, 각 피크는 "주기적인 패턴"을 나타내는 주파수에 대응하고; 여기에 이미지 설명을 입력하십시오

  • 이미지와 템플릿의 "일반화 된"상호 상관, 각 피크는 이미지에서 템플릿의 발생에 해당합니다 (최상의 피크 또는 여러 피크 만 감지하는 데 관심이있을 수 있음).

여기에 이미지 설명을 입력하십시오

  • Harris 코너에 대한 이미지 필터링 결과, 각 피크는 원본 이미지의 코너에 해당합니다.

여기에 이미지 설명을 입력하십시오

이것들은 내가 만난 피크의 정의 및 탐지 기술입니다. 확실히 내가 잊었거나 모르는 다른 것들이 있으며, 다른 답변이 그것들을 다룰 것입니다.

전처리 기술에는 스무딩 및 노이즈 제거가 포함됩니다. @Mohammad 의 대답은 웨이블릿에 관한 것이며 Mathematica의 WaveletThreshold (내가 예제를 가져간 곳) 의 문서 에서 다양한 사용법을 볼 수 있습니다 .

그런 다음 maxima를 검색하십시오. 응용 프로그램에 따라 전역 최대 값 (예 : 이미지 등록), 몇 개의 로컬 최대 값 (예 : 라인 감지) 또는 많은 로컬 최대 값 (키포인트 감지) 만 필요합니다. 데이터에서 가장 높은 값을 찾아서 반복적으로 수행 할 수 있습니다. 그런 다음 가장 높은 잔여 값이 임계 값 미만이 될 때까지 선택된 피크 등의 주변 영역을 지 웁니다. 또는 특정 이웃 크기 내에서 로컬 최대 값을 찾고 값이 임계 값보다 높은 로컬 최대 값 만 유지할 수 있습니다. 일부 로컬 최대 값까지의 거리를 기준으로 로컬 최대 값을 유지하는 것이 좋습니다. 더 나은). 무기고는 또한 형태 학적 연산을 특징으로한다 : 확장 된 최대 값 및 탑햇 변환 모두 적합 할 수있다.

Harris 코너로 필터링 된 이미지에서 다음 세 가지 기술의 결과를 확인하십시오.

여기에 이미지 설명을 입력하십시오

또한 일부 응용 프로그램은 서브 픽셀 해상도에서 피크를 찾으려고합니다. 응용 프로그램에 따라 달라질 수있는 보간이 편리합니다.

내가 아는 한,은 총알이 없으며 데이터는 어떤 기술이 가장 잘 작동하는지 알려줍니다.

더 많은 답변을 얻는 것이 정말 좋을 것입니다. 다른 분야에서 왔습니다.


질문 본문의 데이터를 어떻게 추출 했습니까? 깨끗한 형태로는 찾을 수 없습니다.
Léo Léopold Hertz 준영

1
내가 했어? 다른 예제를 사용했습니다. 오늘 질문을 다시 살펴보면 질문에서 깨끗하게 데이터를 추출하는 방법을 알 수 없습니다.
Matthias Odisio

-1

나는 하나의 전형적인 피크 검출 알고리즘이 곳처럼 생각 ref이다 peak(bottom).

for i=1,N   {
       if i=1   {  ref=data(i) }
       else { if data(i)<=ref {ref =data(i) }}
}

3
나는 당신의 대답을 무시하지는 않았지만, 나는 그것을했던 사람들에 의해 주제가 아닌 것으로 간주되었다고 생각합니다. 이 스케치는 시퀀스의 절대 최소값을 감지합니다. OP는 지역과 소음을 처리해야하는 피크를 찾고 있습니다.
Matthias Odisio

아아 "정식 답변"현상금에 전혀 응답이 없었습니다. 그런 점에서 모든 대답은 똑같이 "부적절하다"; 나는 이것이 가장 오래 되었기 때문에이 답변에 현상금을 수여했습니다.
Matthias Odisio
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.