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.
filters
peak-detection
Ktuncer
fonte
fonte
Respostas:
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:
fonte
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.
Uma superação ou subvenção pode ser detectada especificamente removendo o valor absoluto e usando o teste adequado. É isso que você está procurando?
fonte
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;
autocorrelação de uma imagem, cada pico corresponde a uma frequência que revela um "padrão periódico";
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);
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:
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.
fonte
Eu acho que um algoritmo de detecção de pico típico é assim onde
ref
estápeak(bottom)
.fonte