-         

Seite 1 von 5 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 49

Thema: sin oder -sin in einer verrauschten Kurve finden

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.04.2006
    Ort
    Stuttgart
    Alter
    38
    Beiträge
    321

    sin oder -sin in einer verrauschten Kurve finden

    Anzeige

    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

    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:

    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:

    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...

  2. #2
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    64
    Beiträge
    12.372
    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

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.04.2006
    Ort
    Stuttgart
    Alter
    38
    Beiträge
    321
    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:
    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);
    }
    code stolen from http://www-lehre.informatik.uni-osna...formation.html

    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

  4. #4
    Gast
    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.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    34
    Beiträge
    1.780
    Mist, hab vergessen mich einzuloggen...

    also dat war grad von mir
    So viele Treppen und so wenig Zeit!

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.04.2006
    Ort
    Stuttgart
    Alter
    38
    Beiträge
    321
    Ok, ich weiss nicht, wie das im Frequenzbereich genau aussehen wird...
    Mal angenommen

    würde zu


    was würde dann aus etwas werden, das keine Ähnlichkeit mit einem Sinus hat wie z.B.:

    -->


    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?

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    34
    Beiträge
    1.780
    Es sieht ein bischen anders aus...

    ich hab mal ein bischen gegoogelt und auf der Homepage der Uni-Heidelberg dieses Bild gefunden:

    (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!

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.04.2006
    Ort
    Stuttgart
    Alter
    38
    Beiträge
    321
    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.

    (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.

  9. #9
    Gast
    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

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.04.2006
    Ort
    Stuttgart
    Alter
    38
    Beiträge
    321
    Zitat Zitat von Anonymous
    Das könnte schon kritisch werden...
    hatte ich schon befürchtet...
    Ja, es ist nur Null -> HP -> Null -> TP -> Null

    Zitat Zitat von Anonymous
    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.
    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.

Seite 1 von 5 123 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •