Ich habe diskrete Abtastwerte eines seismischen Signals :
Ich möchte lokale Maxima im Signal finden.
Ein naiver Test, ob ein Maximum ist, wäre:
Die Maxima befinden sich jedoch wahrscheinlich zwischen den Proben, z. B. kann es ein Maximum bei .
Um Maxima zwischen den Stichproben zu finden, glaube ich, dass ich interpolieren muss .
- Wie finde ich Maxima mithilfe der Interpolation?
- Welche Form der Interpolation soll ich verwenden?
Wie Sie sehen können, ist mein Signal nicht sehr verrauscht. Es wäre jedoch gut, wenn die Methode auch ein wenig filtern würde, damit die Maxima einen Schwellenwert überschreiten und eine bestimmte Breite haben (keine Spitzen).
Mein größtes Problem ist jedoch, nur Peaks zwischen den Proben zu finden. Irgendwelche Vorschläge für einen guten Weg, dies zu tun?
Vielen Dank im Voraus für alle Antworten!
Antworten:
Erhalten einer Sub-Sample-Auflösung
Eine sehr billige (in Bezug auf die Codegröße) Lösung besteht darin, Ihr Signal zu übertasten. In matlab ist dies möglich
interp(y ,ratio)
. Eine etwas kompliziertere Lösung besteht darin, Peaks naiv zu erfassen; und für jeden Peak eine Parabel durch y [Peak - 1], y [Peak], y [Peak + 1] passen; Verwenden Sie dann den Punkt, an dem diese Parabel maximal ist, als wahre Spitzenposition.In Bezug auf die Peakerkennung
Eine Reihe von Techniken, die helfen:
All dies kann in Matlab mit wenigen Durchgängen von nlfilter sehr effizient implementiert werden.
quelle
Versuchen Sie es mit einem verlustbehafteten Spitzendetektor:
Dabei ist "a" eine Zahl kleiner als 1, die steuert, wie schnell der Detektor abfällt. Es bestimmt, wie nahe benachbarte Gipfel sein können, ohne sich in einen einzigen zu verwandeln. Führen Sie dann eine Schwellenwerterkennung durch.
quelle