Hallo, in einer Messreihe von Druckwerten, die typischerweise so aussieht möchte ich die Extremwerte erfassen und zwar nur die großen, gut sichtbaren. Die Werte liegen als Integer vor, (die der Tendenz nach auf oder absteigend sind in einem Zeitintervall) komplizierte Rechnungen wie Steigungsanalysen oder Spline Kurve (ist recht heftig, passt in den uC nicht mehr rein) möchte ich nicht machen. Mathematisch wäre das nichts weiter als die Nullstellen der ersten Ableitung aber die Kurve liegt ja nicht als Funktion vor. Wie würde ein passender Algorithmus aussehen? Gruss, Christian
Ich denke, du müsstest erstmal genauer festlegen, was du mit
>und zwar nur die großen
genau meinst
Mir ist z.B. nicht ersichtlich, warum du die "kleinen" Extrema zwischen
dem 25ten und 26ten 4ten berücksichtigen willst, aber den nach dem 7ten
4ten und den kurz vor dem 23ten 4ten nicht.
PS.:
wie viel hast du dir bei dem Ausdruck
>die typischerweise so aussieht
gedacht? Deine Formulierung unterstellt, dass du in dem Kurvenverlauf
ein Characteristikum siehst - eben etwas das typisch ist. Auf sowas
ließen sich ALgorithem ansetzten und auslegen.
Das sehe ich so auf den ersten Blick nicht. Hätte mir z.B. vorstellen
können, dass die Drücke im 24 Stundenzyklus mit der Temperatur schwanken
- ist aber nicht der Fall.
Außer, dass es prinzipiell hoch und runter geht, sehe ich kein
Characteristikum - wie gesagt, auf den ersten Blick, vll. ist das doch
eines...
Christian J. schrieb: > in einer Messreihe von Druckwerten, die typischerweise so aussieht > möchte ich die Extremwerte erfassen und zwar nur die großen, gut > sichtbaren. Zeitfenster (z. B. ein Tag) definieren und in diesem Zeitfenster jeweils das Maximum und Minimum erfassen. Ist zwar nicht ganz, was Du willst, aber als Auswertung sinnvoller.
Ich würde Filtern und dann n Messwerte durch den Speicher schieben und bei Änderung von m < n/2 Messwerten in die andere Richtung, das Maximum von n ausgeben. Dann hast du allerdings alle Scheitelpunkte erfasst.
Alle Messwerte in eine Liste speichern und diese dann nach Größe sortieren.
Ich glaube, ich habe gelogen... Mir scheint, da ist eine Periodizität von rund 8,5 Tagen drin ist...
Nimm den ersten Wert als Startwert X0 Setze 2 Werte, z.B. D=100 und F=0.5 Wenn X > X0+D, dann wird ein lokales Maximum gesucht. (wenn < X0-D, dann ensprechend Minimum) * a) Xmax = X wenn X>Xmax. * b) wenn (X < (Xmax-X0)*F+X0), dann haben wir den ersten Extremwert Xmax1 und * suchen fortan das erste Minimum * mit X0 = Xmax1 und Xmin=X * Xmin = X wenn X<Xmin * und der End-Bedingung X>(Xmin-X0)*F+X0 (beachte, dass die Klammer negativ ist!) Deine Recherchen müssen nun nur noch ein geeignetes D und F finden.
>und zwar nur die großen
Einfach mal schauen, ob ein trivialer Ansatz gut genug ist.
Zuerst einen gleitenden Mittelwert berechnen. Nach Try&Error Gewichte
ausprobieren, bis nur mehr die "großen" übrig bleiben.
Dann in den geglätteten Daten die Differenz zwischen aufeinander
folgenden Punkten berechnen. Und diejenigen nehmen, bei denen das
Vorzeichen der Differenz wechselt.
Noch einer schrieb: > Zuerst einen gleitenden Mittelwert berechnen. Nach Try&Error Gewichte > ausprobieren, bis nur mehr die "großen" übrig bleiben. > Dann in den geglätteten Daten die Differenz zwischen aufeinander > folgenden Punkten berechnen. Und diejenigen nehmen, bei denen das > Vorzeichen der Differenz wechselt. Damit hast du aber NICHT DAS MAX/MIN der Originalwerte!!!
Danke erstmal für die Anregungen! Ich überlege in die Richtung einfach ein Intervall zu durchlaufen und zu zählen wieviele Nachfolger größer sind als der Vorgänger und wieviele kleiner. Sobald das Verhältnis kippt war dann ja ein Maximum da. Da diese Kurven aber quasi jeden beliebige Form annehmen können ist das auch viel Probierei. Man kann auch einen Wert von unten her "hochschieben" und bei jedem Schritt zählen wieviele Werte, die ja einen Bereich bilden, noch drüber liegen und deren Mittelpunkt bestimmen. Das werden logischerweise bei einem Maximum immer weniger, bis keiner mehr drüber liegt. Ich habe das teil jetzt über ein Jahr am Laufen und das Wetter hat schon damit zu tun wie der Luftdruck ist. Aktuell liegt er bei mir bei 995 mBAr, das ist ein echt tiefes Tief. Und die Wendepunkte läuten dann schon ein, wann man sich auf Regen etc einstellen muss.
Pete K. schrieb: > Alle Messwerte in eine Liste speichern und diese dann nach Größe > sortieren. Machbar, ich habe noch genug Speicher, jeder Wert hat eine Unixtime als Index. Nur was kommt dabei heraus? Eine steigende Gerade, jedenfalls so ungefähr, da die Wert harmonisch sind, Ecken und Kanten gibt es nicht. Du musst berücksichtigen, dass der Druck seinen Offset laufend verändert, in der Grafikanzeige muss ich das auch berücksichtigen, dass ich laufend den maßstab neu errechnen muss.
Christian J. schrieb: > Und die Wendepunkte läuten dann > schon ein, wann man sich auf Regen etc einstellen muss. Du meinst die (math.) Extrempunkte? Du moechtest die Minima und Maxima aber nicht in Echtzeit erkennen, oder? Das ginge naemlich auch mit einer Kurvenbeschreibung nicht, es braucht fuer signifikante Extrempunkte immer einen gewissen Horizont. Das wuerde sonst auch die Boersen crashen, wenn jeder berechnen koennte, dass jetzt gerade der Kurs am Hoechsten ist und fallen wird.
Pete K. schrieb: > Alle Messwerte in eine Liste speichern und diese dann nach Größe > sortieren. BULLSHIT!!! Damit erwischst du nur Werte die in der Nähe globaler Extrema liegen!
Christian J. schrieb: > Wie würde ein passender Algorithmus aussehen? Lade doch bitte mal Deine Zeitreihe hoch!
Feldstecher schrieb: > Du meinst die (math.) Extrempunkte? Du moechtest die Minima und Maxima > aber nicht in Echtzeit erkennen, oder? Das ginge naemlich auch mit einer > Kurvenbeschreibung nicht, es braucht fuer signifikante Extrempunkte > immer einen gewissen Horizont. Ich glaube fast dass Du recht hast, auch wenn ich mir grad meinen Öl Trade so anschaue. Das geht nur nachträglich aber auf keinen Fall in der Prognose, nicht mal eine einzige Minute... alelrdings habe ich zig Analysewerkzeuge wie gleitende Durchschnitte usw, die mir genau das bestimmen, nämlich nachträglich zu rechnen. Wäre ja vielleicht nicht verkehrt die Druckmessung als Candlesticks darzustellen, das müsste problemlos möglich sein. Candlesticks gelten für alle Arten periodischer Größen, alles was einen Chart hat kann man damit ausdrücken.
Christian J. schrieb: > Mathematisch wäre das nichts weiter als die Nullstellen der ersten > Ableitung aber die Kurve liegt ja nicht als Funktion vor. Macht nix, die Ableitung kann man aus den Messwerten approximieren. Ob das dein Problem löst ist eine andere Frage. Die drei einfachsten Approximationen (man kann die Genauigkeit noch erhöhen) sind: Vorwärtsdifferenz: y'[x] = y[x + 1] - y[x] Rückwärtsdifferenz: y'[x] = y[x] - y[x - 1] zentrale Differenz: y'[x] = (y[x + 1] - y[x - 1]) / 2
Hannes J. schrieb: > Vorwärtsdifferenz: y'[x] = y[x + 1] - y[x] > Rückwärtsdifferenz: y'[x] = y[x] - y[x - 1] > zentrale Differenz: y'[x] = (y[x + 1] - y[x - 1]) / 2 Sowas schreibe ich gerade, das dient auch bei mir dazu den Graphen farbig zu gestalten. Nur wenn der Nachfolger größer ist als der Vorgänger wird es grün und ein Farbwechsel kommt erst, wenn der Nachfolger kleiner ist als der Vorvorgänger.
Christian J. schrieb: > Hallo, > > in einer Messreihe von Druckwerten, die typischerweise so aussieht > möchte ich die Extremwerte erfassen und zwar nur die großen, gut > sichtbaren. Die Werte liegen als Integer vor, (die der Tendenz nach auf > oder absteigend sind in einem Zeitintervall) komplizierte Rechnungen wie > Steigungsanalysen oder Spline Kurve (ist recht heftig, passt in den uC > nicht mehr rein) möchte ich nicht machen. > > Mathematisch wäre das nichts weiter als die Nullstellen der ersten > Ableitung aber die Kurve liegt ja nicht als Funktion vor. > > Wie würde ein passender Algorithmus aussehen? > > Gruss, > Christian Für mich ergibt sich der Eindruck, dass du selber noch nicht genau weist, was du machen willst, oder hast es einfach noch nicht systematisch aufgeschrieben. Du musst dir erst einmal klar werden, was du genau möchtest, und uns dass mitteilen, bevor man dann sinnvolle zielführende Antworten geben kann. Was genau meinst du z.B. mit "Extremwerte erfassen und zwar nur die großen, gut sichtbaren" Und dann wie schon angesprochen, zu welchen Zeitpunkten willst du die Werte bestimmen? Wievel Speicher hast du? wie ist die Abtastfrequenz? und noch viele andere Dinge.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.