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.
filters
peak-detection
Ktuncer
la source
la source
Réponses:
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:
la source
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.
Soit votre signal brut. Prendre une moyenne mobile sur un nombre approprié d'échantillons pour créer un porteur lisse.Y ( t )X( T) Oui( t )
Si vous réussissez, doit avoir une moyenne nulle. Calculez l'écart type de .σ X - YX- Oui σ X- Oui
Vous pouvez détecter vos pics lorsque , étant généralement 2, 3, 4.α| (X- Oui) ( 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?
la source
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;
autocorrélation d'une image, chaque pic correspond à une fréquence révélant un "motif périodique";
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);
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:
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.
la source
Je pense qu'un algorithme de détection de pic typique est comme celui
ref
-cipeak(bottom)
.la source