sin oder -sin in einer verrauschten Kurve finden
Wie kann ich es anstellen, einen Sinus aus Messwerten zu erkennen?
Natürlich kann ich die Kurve zuvor glätten, sodass das Rauschen reduziert wird.
Der Sinus kann leider aber unterschiedliche Periodendauern haben und auch verschiedene Amplituden.
Meine Idee ist nun, alle Werte erstmal wegzuschreiben (linked list / array, egal erstmal), dann zu schauen, ob ich einen Nulldurchgang (oder nahe 0) habe, danach einen Hoch- oder Tiefpunkt erreiche, gefolgt von einem Nulldurchgang und danach wieder einen Tief- oder Hochpunkt gefolgt von einem Nulldurchgang.
(Ich will nur eine Periode erkennen) Dann meinen Sinus so strecken, dass er reinpasst und die Amplitude so hoch machen, wie die Maximal/Minimalwerte waren und dann die Fläche dazwischen berechnen...
Hört sich aber ungemein komplex an und die Fläche dazwischen wird wahrscheinlich nie wirklich 0 werden. Gibt es eine gute Methode, um einen speziellen Kurvenverlauf halbwegs zuverlässig zu finden? Weil es könnte ja auch sein, dass die Kurve so aussieht
Bild hier
Dann müsste ich vielleicht noch auf Wendepunkte untersuchen?!
Ohje... :(
Bitte sagt mir, dass es eine bessere total unkomplizierte Methode gibt, auf die ich bisher nur noch nicht gestoßen bin :)
Und gibt es eine Seite, auf der anhand von Pseudocode (oder C) erklärt wird, wie man Kurvensachen wie Nullstellen, Wendepunkte, Hoch- und Tiefpunkte usw findet?
EDIT:
Wobei, wenn ich Glück hätte, würde das hier ja garnicht zählen, weil es mehrere Hoch- bzw. Tiefpunkte hat? (Oh mann, Mathe 1 is schon zu lange her... )
EDIT2:
Also wenn man das hier mal als Beispiel nehmen würde:
Bild hier
Dann würde, wenn man wirklich die Hoch- und Tiefpunktnummer durchziehen könnte, ein möglicher Kandidat eines Sinus' rauskommen, den man dann mit einem Eigenbausinus vergleichen würde, wobei dann eine geringe Abweichung rauskommen würde.
Leider will ich auch so Sachen erkennen wie:
Bild hier
was ja schon erheblichere Abweichungen zum normalen Sinus hat... Vielleicht müsste man dann nur noch mit der Toleranz spielen..... hmmmm... *Kopfrauch*
EDIT3:
Also ein Hochpunkt wäre es wohl, wenn ich in den Daten auf eine Nullsteigung treffe und die Steigung zuvor positiv war, ein Tiefpunkt, wenn ich davor eine negative Steigung hatte (bzw es könnte auch einfach ein Wechsel zw. pos/neg sein ohne 0 dazwischen (sonst vielleicht auch Sattelpunkt))
Ok, eine Nullstelle sollte nicht wirklich schwer zu finden sein... Davor war der Wert > 0, danach <0 oder andersrum....
Bei näherem Nachdenken hört es sich gar nicht mehr soooo schwer an...
Nur könnten bei dem vielen Rauschen auch leider irgendwo zwischendrin Steigungswechsel auftreten, die ich garnicht haben will... :|
Liste der Anhänge anzeigen (Anzahl: 2)
Ich hab noch was zu dem interessanten Thema.
Ich denke inzwischen, Fourier-Trafo oder ähnliches sind komplett ungeeignet um an die Informationen zu kommen, die du brauchst.
Die Information ist zwar im Spektrum drinne (FT "vergisst" nix), aber sie ist dort wohl noch schwerer zu finden als im Ausgangssignal.
Wesentlich für Richtungswechsel und Spuränderung ist das Integral über die Funktion. Indem man die Funktion f in der Umgebung von x über ein variables Zeitfenster y integriert, enthält man eine Funktion
Bild hier
In dieser I-Trafo ist einerseits das komplette f enthalten (die Trafo "vergisst" also nix), andererseits ist die Information direkt ersichtlich. F ist recht immun gegen Rauschen und überlagerte Schwingungen.
Das Bild der Trafo ist in x-Richtung die Zeit und in y-Richtung das Fenster. Unten sind die Werte für kleine Zeitfenster, oben für große.
Den Beispielfunktionen (rot) habe ich Rauschen und einen Sinus draufgegeben (schwarz). Trotzdem bleibt F fast unverändert.
Bild1: Ein Spurwechsel. Die Ausschläge nach oben/unten sind gleich groß. Über den roten/grünen Schenkeln passiert keine Änderung
Bild2: Zuerst eine kurze, starke Änderung, die aber insgesamt keine Richtungsänderung ist. Danach zwei entgegengesetzte Hubbel, von dem der zweite aber größer ist. Netto bleibt also ein Richtungswechse, erkennbar an dem rötlichen Keil über dem grünen/roten Schenkel. Ausserdem liegen die Hubbel etwas weiter auseinander, erkennbar an dem kleinen bleu/schwarzen Dreieck in der Mitte unten.
Bleu: keine Änderung
Grün: nach Minus
Rot: nach Plus
Mit einem Blick auf die Trafo sieht man sofort, was Sache ist. Die weiterer Analyse sollte dann kein Problem mehr sein.
Eine Kurvenfahrt gibt übrigens einen einfarbigen Keil ohne Ränder.
Das Applet geht unter Netscape und FireFox und braucht JRE 1.4. IExplodierer zickt mal wieder...