J'ai échantillons discrets d'un signal sismique : y [ n ]
Je veux trouver des maxima locaux dans le signal.
Un test naïf pour savoir si est un maximum serait: y [ n ] : m a x i m a si y [ n ] > y [ n - 1 ] et y [ n ] > y [ n + 1 ]
Cependant, les maxima sont probablement situés entre les échantillons, par exemple il peut y avoir un maximum à .
Afin de trouver des maxima entre les échantillons, je pense que je dois interpoler .
- Comment trouver des maxima en utilisant l'interpolation?
- Quelle forme d'interpolation dois-je utiliser?
Comme vous pouvez le voir, mon signal n'est pas très bruyant, mais ce serait bien si la méthode faisait aussi un peu de filtrage pour que les maxima dépassent un seuil et aient une certaine largeur (pas de pointes).
Cependant, mon plus gros problème est juste de trouver des pics entre les échantillons. Des suggestions pour une bonne façon de procéder?
Merci d'avance pour n'importe quelle réponse!
Réponses:
Obtention d'une résolution de sous-échantillon
Une solution très bon marché (en termes de taille de code) consiste simplement à suréchantillonner votre signal. Dans matlab, cela peut être fait avec
interp(y ,ratio)
. Une solution un peu plus compliquée consiste à détecter naïvement des pics; et pour chaque pic, ajuster une parabole à travers y [pic - 1], y [pic], y [pic + 1]; puis en utilisant le point auquel cette parabole est maximale comme position de pic réelle.Concernant la détection des pics
Un tas de techniques qui aident:
Tout cela peut être implémenté très efficacement dans Matlab avec quelques passes de nlfilter.
la source
Essayez un détecteur de crête avec perte:
où "a" est un nombre inférieur à 1 qui contrôle la vitesse de décroissance du détecteur. Il détermine à quel point les pics voisins peuvent être proches sans se fondre en un seul. Effectuez ensuite une détection de seuil.
la source