Die Fourier Transformation ist eine Methode, die angibt welche Frequenz mit welchem Leistungsanteil in einem Signal vertreten ist.
http://de.wikipedia.org/wiki/Fourier-Transformation
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...
Die Fourier Transformation ist eine Methode, die angibt welche Frequenz mit welchem Leistungsanteil in einem Signal vertreten ist.
http://de.wikipedia.org/wiki/Fourier-Transformation
Hab mir das vor ner Weile schonmal auf http://mathworld.wolfram.com angeschaut gehabt und ich weiss aber nicht, wie ich sowas in Programmcode verwandeln sollte... Irgendwer hat mir auch schonmal sowas geraten...
Ok, ich bin nicht mehr (oder war noch nie?) sehr gut in Mathe,
ist das hier
code stolen from http://www-lehre.informatik.uni-osna...formation.htmlCode:for (u=0; u < M; u++) for (v=0; v < N; v++) { real = 0.0; imag = 0.0; for (x=0; x < M; x++) for (y=0; y < N; y++) { real += f[x][y] * cos(-2.0 * PI * (u*x/(double)M + v*y/(double)N)); imag += f[x][y] * sin(-2.0 * PI * (u*x/(double)M + v*y/(double)N)); }; amplitude [u][v] = sqrt(real*real + imag*imag); }
was ich suche?
Bzw was hilft das mir bei meiner Analyse?
Ich will nicht spezielle Frequenzen finden, sondern nur alles, was Sinusförmig ist. Hilft mir die Fourieranalyse dabei weiter? Die Periodendauer des Sinus' ist dabei (fast) unwichtig. Wichtig ist, dass die Kurve einen ungefähren Sinusverlauf hat und dass ober und unterhalb der x-Achse ungefähr die gleiche Fläche is, wie oberhalb.
Wenn ich die Fourieranalyse durchführe, bekomme ich als Ergebnis dann "Frequenz X hatte den maximalen Anteil an der Leistung des Signals". Kann ich daraus dann schliessen, dass der Verlauf Sinusförmig war?
EDIT: Oh wow, ich muss ja nicht mal URL-Tags benutzen, um die URL clickable zu bekommen
Naja, wenn man einen Sinus in den Frequenzbereich transformiert, erhält man zwei Peaks symmetrisch zum Ursprung bei -f und +f
(die negativen Frequenzen kann man natürlich getrost ignorieren, es interessiert also nur der Peak bei +f)
Je verrauschter das Signal ist, desto breiter werden diese Peaks.
Ich denke damit sollte sich dein Sinus relativ leicht identifizieren lassen.
Mist, hab vergessen mich einzuloggen...
also dat war grad von mir
So viele Treppen und so wenig Zeit!
Ok, ich weiss nicht, wie das im Frequenzbereich genau aussehen wird...
Mal angenommen
Bild hier
würde zu
Bild hier
was würde dann aus etwas werden, das keine Ähnlichkeit mit einem Sinus hat wie z.B.:
Bild hier
-->
Bild hier
Vielleicht ne blöde Frage, aber wenn ich dann sehen würde, dass ich nen Peak in + und - Richtung habe, dann ist das für mich ein Sinus?
Wenn ich einen breiten Peak sehe, dann könnte es auch eine Kurve sein, die gar kein wirklicher Sinus mehr ist? Weil eine Kurve, die wirklich hammersextrem++²³ verrauscht ist und wo manche Werte total daneben gehen, könnte die ja schon wieder so krass sein, dass sie nichts mehr mit einem Sinus gemein hat, oder?
Es sieht ein bischen anders aus...
ich hab mal ein bischen gegoogelt und auf der Homepage der Uni-Heidelberg dieses Bild gefunden:
Bild hier
(die k-Achse ist in dem Fall die für die Frequenz)
da sieht man sehr schön wie unterschiedliche Kurvenformen im Frequenzbereich ausschauen
edit: wenn ich wieder zuhause bin kann ich ja mal ein paar Kurven durch Matlab jagen, damit etwas deutlicher wird welchen Einfluss das Rauschen hat
So viele Treppen und so wenig Zeit!
Oh, ich kann mich dunkel an die Bilder erinnern. Die hab ich auch noch in irgendeinem Skript zu Hause...
Wenn ich jetzt also Daten in mein Array speichere, dann nach ... kA... bissle Zeit eben... meine Fourieranalyse drauf loslass, Würde das Ding dann auch sowas finden wie z.B.
Bild hier
(oh mann, wie ich es hasse mit gimp so ein teil hinzuschludern...)
oder müsste ich zur korrekten Erkennung die Transformation dann nur von Anfang bis zum Ende des Sinus' durchführen?
Weil dann wäre mein nächstes Problem, wie merke ich, dass ein Sinus angefangen oder geendet hat?
Sollte ich einfach immer 3 Nullstellen abwarten und dann mal von der 1. bis zur 3. prüfen?
EDIT: was ich vielleicht noch hätte sagen sollen: das Ding ist nicht periodisch! Der sinus, den ich erkennen will, kann zwischen tausenden von hässlichen sonstigen Werten stecken. Ich will aber erkennen, das da ein Sinus vorbeikam.
Ich schreibe immer Werte in irgendwas rein (Ringpuffer?) und will wissen, wann ich einen Sinus (bzw. etwas sinusähnliches) gespeichert habe. Die Dauer des Sinus ist nicht von Bedeutung. Lediglich, dass es ein kompletter Sinus (oder sinusähnlich) war. Also eine komplette Periode.
Das könnte schon kritisch werden...
denn ein Sinus sieht im Frequenzbereich anders aus wenn es nur ein "burst" ist (und darum handelt es sich ja wenn ich das richtig interpretiere).
Wenn es wirklich möglich sein soll eine einzige Periode zu erkennen, die dazu noch extremst verrauscht sein kann...
Also da würde ich mir keine allzu großen Hoffnungen machen.
ich werde es aber später mal simulieren, vielleicht kann man ja doch mit viel Phantasie was erkennen
hatte ich schon befürchtet...Zitat von Anonymous
Ja, es ist nur Null -> HP -> Null -> TP -> Null
Naja, also soooo verrauscht wird es nicht werden. Es kann nur sein, dass die Werte rundrum sehr komisch sind. Der eigentliche Sinus wird wahrscheinlich bis auf einen Zitterer ziemlich normal sein. Nur wenn ich dazwischen schon voll den Müll habe, dann wird es schwer sein, den Bereich zu finden, in dem ich prüfen will, ob ein Sinus vorhanden ist.Zitat von Anonymous
Lesezeichen