Approche de détection des pics

24

Quels sont les algorithmes de détection des pics existants? J'ai des données bruyantes et j'aimerais implémenter la détection de pointe pour ces données. Les données sont inversées, en fait j'essaie de déterminer le fond.

Voici un instantané des données dans Excel. J'aime détecter les deux fonds. J'ai pensé à passer les données à travers un filtre passe-bas et ensuite faire une moyenne mobile où je détermine les pics et dans la moyenne mobile je fais une autre recherche. J'ai zéro fond DSP; ce n'est qu'une approche de bon sens. J'aimerais entendre ce que les experts recommandent.

Entrez la description de l'image ici

Ktuncer
la source
2
Quels sont les deux fonds que vous souhaitez détecter? Je n'en vois qu'une évidente. Savez-vous quel genre de bruit vous avez ou d'où il vient?
Jason R
Je voudrais savoir si vous souhaitez l'implémenter sur un matériel particulier (contraintes de ressources) car cela affectera ma stratégie de détection des pics.
anasimtiaz
@JasonR le violet est évident. Cependant, l'arête vive est une valeur aberrante. Idéalement, je veux que cela soit rasé et que je calcule le point bas. (d'où le filtre LP dans mon approche) Le non évident sur le bleu clair est le point min côté droit du pic violet. Le violet n'est pas vraiment un problème mais le bleu clair l'est. L'intrigue Excel ne rend pas justice, mais cela provient d'un ADC 12 bits où 4096 est 2V.
Ktuncer
@anasimtiaz croyez-le ou non, cela fonctionnera sur un iPhone / Android, donc je suppose que nous pouvons dire que c'est comme un PC. Aucune contrainte matérielle.
Ktuncer
@Ktuncer J'ai ajouté quelques images à voir par vous-même.
Spacey

Réponses:

12

Ktuncer, il existe un certain nombre de méthodes que vous pouvez utiliser ici. Une méthode que je recommanderais est d'utiliser une transformée en ondelettes discrète (DWT), et en particulier, d'examiner l' ondelette de Daubechies . Je choisirais, disons, Daub-14 / Daub-Tetra.

Fondamentalement, ce que vous devez vraiment faire, c'est «orienter» votre signal, puis à partir de là, faire un choix min ou max. Cela éliminera vos valeurs aberrantes. Une transformée en ondelettes daub-14 / daub-tetra peut vous y aider, et cela est d'autant plus utile que vous ne connaissez pas la nature de votre signal. (En utilisant daub-14, vous pouvez représenter avec précision des signaux polynomiaux de degré 14/2 = 7, et il semble que vous n'en aurez pas besoin de plus).

Le calcul de cette transformée en ondelettes «comprime» essentiellement votre énergie en quelques indices. Ces indices représentent des poids sur des vecteurs de base. Le reste des poids sera (idéalement) proche de zéro. Lorsque vous avez du bruit dans votre signal (comme vous le faites), ces poids qui étaient normalement nuls ont maintenant des poids, mais vous pouvez simplement les mettre à zéro et «débruiter» votre signal. Une fois cela terminé, vous pouvez alors faire une simple détection max / min.

Il y a plus de détails impliqués, vous pouvez m'envoyer un e-mail si vous souhaitez discuter de la façon de le mettre en œuvre. J'ai déjà fait un travail similaire à ce sujet.

EDIT: Voici quelques images illustrant Daub-Tetra Denoiser:

entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici

Spacey
la source
1
J'aime ça .. Existe-t-il une bibliothèque de référence pour cela dans matlab?
Ktuncer
@Ktuncer Envoyez-moi un e-mail.
Spacey
4

Je suis loin d'être un expert, mais voici ce que je ferais:

Vous semblez avoir un signal variant lentement superposé aux fluctuations. Les pics que vous recherchez sont des fluctuations plus fortes, donc je les détecterais en utilisant cela.

  1. Soit votre signal brut. Prendre une moyenne mobile sur un nombre approprié d'échantillons pour créer un porteur lisse.Y ( t )X(T)Y(t)

  2. Si vous réussissez, doit avoir une moyenne nulle. Calculez l'écart type de .σ X - YXYσXY

  3. Vous pouvez détecter vos pics lorsque , étant généralement 2, 3, 4.α|(XY)(t)|>α×σα

Un dépassement ou un sous-dépassement peut être spécifiquement détecté en supprimant la valeur absolue et en utilisant un test approprié. C'est bien ce que vous cherchez?

Jean-Yves
la source
1
Approche intéressante. Qu'est-ce que σ? (Dev standard?). En outre, les mathématiques mises à part, quelle est la logique derrière cela?
Ktuncer
@ user4749: Nom intéressant :) Ok. Alors oui, est l'écart-type. Nous l'utilisons comme mesure de l'amplitude de fluctuation. Sur vos données, elles semblent assez constantes dans le temps, cela indique donc que c'est la bonne approche. La logique est de dire qu'un pic est détecté lorsqu'il est supérieur à ces fluctuations, de sorte que nous sommes robustes dans la détection. Faites-vous MATLAB? Si nous aurions votre signal, nous pourrions au moins signaler les pics très facilement. σ
Jean-Yves
@ user4749 Fondamentalement, ce qui se passe ici, votre Y (t) va être le signal «tendance uniquement». Signifie également moyen. Alors maintenant, vous soustrayez la moyenne de votre signal, du signal. C'est la partie X (t) - Y (t). Alors maintenant, ce qui reste est votre bruit. Maintenant, (en supposant que votre bruit est gaussien), vous prenez votre std, & \ sigma &. Regardez maintenant toutes les valeurs de abs (X (t) -Y (t))> . Pourquoi? Cela signifie essentiellement en anglais, "Jeter 99,99% de toutes les valeurs susceptibles d'être du bruit et ne laisser que des valeurs non dues au bruit". 4σ
Spacey
@ user4749 Cela vous aidera à obtenir les pics aberrants, même si je ne suis pas sûr qu'il obtiendra les pics globaux que vous recherchez, (je suppose que vous recherchez les pics «larges»?)
Spacey
1
@ Jean-Yves Bonjour! :-) Supposez-vous que le bruit soit guassien ici btw? (C'est pourquoi nous pouvons std seuil). Je suis curieux, que faire si le bruit est coloré?
Spacey
4

La détection des pics a de nombreuses applications, pour les signaux 1D ou multidimensionnels. Voici quelques exemples montrant à quel point ces signaux et leurs interprétations d'un pic peuvent être variés:

  • Les données 1D de l'affiche originale;

  • Transformation brute d'une image, chaque pic correspond à une ligne dans l'image d'origine; entrez la description de l'image ici

  • autocorrélation d'une image, chaque pic correspond à une fréquence révélant un "motif périodique"; entrez la description de l'image ici

  • corrélation croisée "généralisée" d'une image et d'un modèle, chaque pic correspond à une occurrence du modèle dans l'image (nous pouvons être intéressés à détecter uniquement le meilleur pic ou plusieurs pics);

entrez la description de l'image ici

  • résultat du filtrage d'une image pour les coins de Harris, chaque pic correspond à un coin de l'image d'origine.

entrez la description de l'image ici

Ce sont des définitions et des techniques de détection des pics que j'ai rencontrés - il y en a certainement d'autres que j'ai oubliés ou que je ne connais pas, et j'espère que d'autres réponses les couvriront.

Les techniques de prétraitement incluent le lissage et le débruitage. @ La réponse de Mohammad concerne les ondelettes, et vous pouvez en voir les différentes utilisations dans la documentation de WaveletThreshold de Mathematica (d'où j'ai également pris mes exemples d'ailleurs).

Ensuite, vous recherchez des maxima. Selon votre application, vous n'avez besoin que des maxima globaux (par exemple, enregistrement d'image), de quelques maxima locaux (par exemple, détection de ligne) ou de nombreux maxima locaux (détection de points clés): cela peut être fait de manière itérative, en recherchant la valeur la plus élevée dans les données. puis effacer une région autour du pic sélectionné, etc. jusqu'à ce que la valeur restante la plus élevée soit inférieure à un seuil. Alternativement, vous pouvez rechercher les maxima locaux dans une certaine taille de quartier et ne conserver que les maxima locaux dont les valeurs sont supérieures à un seuil - certains recommandent de conserver les maxima locaux en fonction de leur distance par rapport au reste des maxima locaux (le plus loin le meilleur). L'arsenal comporte également des opérations morphologiques: les maxima étendus et la transformation haut de gamme peuvent tous deux convenir.

Voir les résultats de trois de ces techniques sur une image filtrée pour les coins Harris:

entrez la description de l'image ici

De plus, certaines applications tentent de trouver des pics à une résolution inférieure au pixel. L'interpolation, qui peut être spécifique à l'application, est pratique.

Pour autant que je sache, il n'y a pas de solution miracle, et les données indiqueront quelles techniques fonctionnent le mieux.

Ce sera vraiment agréable d'avoir plus de réponses, esp. venant d'autres disciplines.

Matthias Odisio
la source
Comment avez-vous extrait les données du corps de la question pour votre usage? Je ne le trouve pas sous une forme propre.
Léo Léopold Hertz
1
Ai-je? J'ai utilisé d'autres exemples. En examinant à nouveau la question aujourd'hui, je ne vois pas comment extraire proprement les données de la question.
Matthias Odisio
-1

Je pense qu'un algorithme de détection de pic typique est comme celui ref-ci peak(bottom).

for i=1,N   {
       if i=1   {  ref=data(i) }
       else { if data(i)<=ref {ref =data(i) }}
}
fumio ueda
la source
3
Je n'ai pas déçu votre réponse, mais je pense qu'elle a été jugée hors sujet par ceux qui l'ont fait. Cette esquisse détecte le minimum absolu d'une séquence. L'OP recherche des pics, où l'on doit faire face à la localité et au bruit.
Matthias Odisio
Hélas, il n'y a eu aucune réponse à la prime à la "réponse canonique". À cet égard, toutes les réponses sont également "non pertinentes"; J'ai attribué la prime à cette réponse car c'est la plus ancienne.
Matthias Odisio