Abordagem de detecção de pico

24

Quais são os algoritmos de detecção de pico existentes? Tenho dados ruidosos e gostaria de implementar a detecção de pico para esses dados. Os dados estão ao contrário, na verdade estou tentando determinar o fundo.

Aqui está um instantâneo dos dados no Excel. Eu gosto de detectar os dois fundos. Pensei em passar os dados através de um filtro passa-baixo e, posteriormente, fiz uma média móvel onde determino os picos e, dentro da média móvel, fiz outra pesquisa. Eu tenho zero plano de fundo DSP; essa é apenas uma abordagem de senso comum. Gostaria de ouvir o que os especialistas recomendam.

Digite a descrição da imagem aqui

Ktuncer
fonte
2
Quais são os dois fundos que você deseja detectar? Só vejo uma óbvia. Você sabe que tipo de ruído você tem ou de onde vem?
Jason R
Gostaria de saber se você deseja implementá-lo em qualquer hardware específico (restrições de recursos), pois isso afetará minha estratégia de detecção de pico.
Anasimtiaz
@JasonR o roxo é óbvio. No entanto, a borda afiada existe um desvio. Idealmente, quero que isso seja raspado e calculado o ponto mais baixo. (daí o filtro LP na minha abordagem) O não óbvio em azul claro é o ponto mínimo do lado direito do pico roxo. O roxo não é realmente uma preocupação, mas o azul claro é. A plotagem do Excel não faz justiça, mas isso é de um ADC de 12 bits, onde 4096 é 2V.
Ktuncer
@anasimtiaz acredite ou não, isso funcionará em um iPhone / Android, então acho que podemos dizer que é como um PC. Sem restrições de hardware.
Ktuncer 02/02/12
@Ktuncer Adicionei algumas imagens para você ver por si mesmo.
Spacey

Respostas:

12

Ktuncer, existem vários métodos que você pode usar aqui. Um método que eu recomendaria é usar uma Discrete Wavelet Transform (DWT) e, em particular, olhar para a Daubechies Wavelet . Eu escolheria, digamos, Daub-14 / Daub-Tetra.

Basicamente, o que você realmente precisa fazer é 'direcionar' seu sinal e, a partir daí, faça uma escolha mínima ou máxima. Isso vai se livrar dos seus valores extremos. Uma transformação daub-14 / daub-tetra wavelet pode ajudá-lo a fazer isso, e isso ajuda especialmente porque você não conhece a natureza do seu sinal. (Usando o daub-14, você pode representar com precisão sinais polinomiais de grau 14/2 = 7, e parece que você não precisará mais do que isso).

O cálculo dessa wavelet transforma essencialmente 'comprime' sua energia em algumas indicações. Essas indicações representam pesos nos vetores básicos. O restante dos pesos será (idealmente) próximo de zero. Quando você tem ruído no seu sinal (como você), os pesos que normalmente eram zero agora têm alguns pesos, mas você pode simplesmente zerá-los e 'negar' seu sinal. Quando isso estiver concluído, você poderá fazer uma simples detecção de max / min.

Há mais detalhes envolvidos, você pode me enviar um e-mail se quiser discutir como implementá-lo. Eu fiz um trabalho semelhante sobre isso antes.

EDIT: Aqui estão algumas imagens que ilustram o Daub-Tetra Denoiser:

insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui

Spacey
fonte
1
Eu gosto disso .. Existe uma biblioteca de referência para isso no matlab?
Ktuncer
@Ktuncer Dispare-me um email.
Spacey
4

Estou longe de ser um especialista, mas aqui está o que eu faria:

Você parece ter um sinal de variação lenta, sobreposto a flutuações. Os picos que você procura são algumas flutuações mais fortes, então eu os detectaria usando isso.

  1. X(T)Y(t)

  2. XYσXY

  3. |(XY)(t)|>α×σα

Uma superação ou subvenção pode ser detectada especificamente removendo o valor absoluto e usando o teste adequado. É isso que você está procurando?

Jean-Yves
fonte
1
Abordagem interessante. O que é σ? (Desv. Padrão?). Além disso, matemática à parte, qual é a lógica por trás disso?
Ktuncer
σ
4σ
@ user4749 Isso ajudará você a obter os picos outlier, embora eu não estou certo de que irá receber os picos globais que você está procurando, (eu estou supondo que você está procurando picos do 'grandes'?)
Spacey
1
@ Olá Jean-Yves! :-) Você está assumindo que o ruído é guassiano aqui? (É por isso que podemos std threshold). Estou curioso, e se o barulho for colorido?
Spacey
4

A detecção de pico tem algumas aplicações, para sinais 1D ou multidimensionais. Aqui estão alguns exemplos que mostram quão variados esses sinais e suas interpretações de um pico podem ser:

  • Os dados 1D do pôster original;

  • Hough transform de uma imagem, cada pico corresponde a uma linha na imagem original; insira a descrição da imagem aqui

  • autocorrelação de uma imagem, cada pico corresponde a uma frequência que revela um "padrão periódico"; insira a descrição da imagem aqui

  • correlação cruzada "generalizada" de uma imagem e de um modelo, cada pico corresponde a uma ocorrência do modelo na imagem (podemos estar interessados ​​em detectar apenas o melhor pico ou vários picos);

insira a descrição da imagem aqui

  • Como resultado da filtragem de uma imagem nos cantos de Harris, cada pico corresponde a um canto na imagem original.

insira a descrição da imagem aqui

Essas são definições e técnicas de detecção de picos que encontrei - certamente há outras que eu esqueci ou não conheço, e espero que outras respostas as cubram.

As técnicas de pré-processamento incluem suavização e denoising. A resposta de @ Mohammad é sobre wavelets, e você pode ver vários usos deles na documentação do WaveletThreshold do Mathematica (de onde também tirei meus exemplos, a propósito).

Então você procura por máximos. Dependendo da sua aplicação, você precisa apenas dos máximos globais (por exemplo, registro de imagens), alguns máximos locais (por exemplo, detecção de linha) ou muitos máximos locais (detecção de pontos-chave): Isso pode ser feito iterativamente, buscando o maior valor nos dados depois apague uma região ao redor do pico selecionado, etc. até que o valor restante mais alto esteja abaixo de um limite. Como alternativa, você pode procurar os máximos locais dentro de um determinado tamanho de bairro e manter apenas os máximos locais cujos valores estão acima de um limite - alguns recomendam manter os máximos locais com base na sua distância do restante dos máximos locais (quanto mais longe o melhor). O arsenal também possui operações morfológicas: máximos estendidos e transformação de cartola podem ser adequados.

Veja os resultados de três dessas técnicas em uma imagem filtrada para os cantos de Harris:

insira a descrição da imagem aqui

Além disso, alguns aplicativos tentam encontrar picos na resolução sub-pixel. A interpolação, que pode ser específica do aplicativo, é útil.

Tanto quanto eu sei, não existe uma bala de prata, e os dados dirão quais técnicas funcionam melhor.

Vai ser muito bom ter mais respostas, esp. provenientes de outras disciplinas.

Matthias Odisio
fonte
Como você extraiu os dados do corpo da pergunta para seu uso? Não consigo encontrá-lo de forma limpa.
Léo Léopold Hertz
1
Eu fiz? Eu usei outros exemplos. Olhando para a pergunta novamente hoje, não vejo como extrair dados limpos da pergunta.
Matthias Odisio 23/09/16
-1

Eu acho que um algoritmo de detecção de pico típico é assim onde refestá peak(bottom).

for i=1,N   {
       if i=1   {  ref=data(i) }
       else { if data(i)<=ref {ref =data(i) }}
}
fumio ueda
fonte
3
Não neguei sua resposta, mas acho que foi considerada fora de tópico por quem o fez. Este esboço detecta o mínimo absoluto de uma sequência. O OP está procurando picos, onde é preciso lidar com a localidade e o ruído.
Matthias Odisio 02/02/12
Infelizmente, não houve resposta alguma à recompensa da "resposta canônica". Nesse sentido, todas as respostas são igualmente "irrelevantes"; Eu concedi a recompensa a esta resposta porque é a mais antiga.
Matthias Odisio