Ich habe ein seismisches Signal y (i):
Hier habe ich ein Maximum gefunden: i = 152,54, y = 222,29 manuell und rot dargestellt.
Ich möchte alle Maxima automatisch finden.
Ich habe gelesen, dass der Savitzky Golay Filter (SGF) verwendet werden kann, um geglättete Schätzungen sowohl eines Signals als auch seiner Ableitungen zu finden, und dass einer der Vorteile des SGF darin besteht, dass er Minima und Maxima viel besser bewahrt als andere Filter. Das klingt gut für meinen Gebrauch.
Ich habe ein Matlab-Skript gefunden, das SGF-Koeffizienten generiert. Und dies verwendet, um herauszufinden, dass die SGF-Koeffizienten 4. Ordnung für die Ableitung. Ich habe das mit einem kleinen Matlab-Skript codiert
- findet die Ableitung des Signals durch Falten des Signals mit den SGF-Koeffizienten 4. Ordnung für die Ableitung
- findet ein Stichprobenpaar (i, i + 1), bei dem die Ableitung das Vorzeichen ändert
- findet den Nulldurchgang der Ableitung durch lineare Interpolation zwischen i und i + 1
Skript:
function [maxX,maxY] = findLocalMax(y)
% Kernel for 4th order Savitzky-Golay filter for finding derivative:
d4 = [0.0724 -0.1195 -0.1625 -0.1061 0 0.1061 0.1625 0.1195 -0.0724];
dy = conv(y,d4,'same'); % derivative
[m n] = size(dy);
maxX = [];
maxY = [];
for i = 1 : n - 1
if dy(i) < 0 && dy(i+1) > 0 % max somewhere between i and i+1
a = dy(i)/(dy(i) - dy(i+1)); % linear interpolation
mx = i + a;
maxX = [maxX mx];
my = y(i)*(1-a) + y(i+1)*a; % linear interpolation
maxY = [maxY my];
end
end
In meinem Skript musste ich testen, ob sich die Ableitung von negativ zu positiv ändert, um die Funktion zum gewünschten Ergebnis zu erhalten, was mich jedoch verwirrt. Sollte die Ableitung für ein Maximum nicht von positiv nach negativ gehen? Gibt es eine bessere Möglichkeit, zwischen Maxima und Minima zu unterscheiden?
Unten sehen Sie das Ergebnis der Verwendung dieser Funktion, um die Maxima in meinem Signal zu finden:
Die Ergebnisse sehen gut aus, aber ich stelle fest, dass einige Maxima nicht gefunden werden: i = 143,13, 190,88, 256,97.
Liegt das daran, dass sie anderen Maxima zu nahe kommen sollen?
Wie kann ich die nächsten zwei Maxima steuern?
Vielen Dank im Voraus für alle Antworten!