fftw in c++ mit 2-dim messdaten



  • Ähm... mir sind ein paar elementare Dinge Deiner Frage nicht klar:

    Input:

    Was sind Deine Eingangsdaten? Du schreibst Sonde - sind das jetzt Daten x(t) eindimensional, oder (x,y)(t) zweidimensional?

    Output:

    Du schreibst "Darstellung als Bild", was willst Du denn in X-Richtung und in Y-Richtung für Dein Bild konkret darstellen?



  • hi marcus,

    Marc++us schrieb:

    Was sind Deine Eingangsdaten? Du schreibst Sonde - sind das jetzt Daten x(t) eindimensional, oder (x,y)(t) zweidimensional?

    die daten sind zweidimensional.

    Marc++us schrieb:

    Du schreibst "Darstellung als Bild", was willst Du denn in X-Richtung und in Y-Richtung für Dein Bild konkret darstellen?

    meine darstellung ist ein punkt auf einem zweidimensionalen koordinatensystem. der punkt ergibt durch seine bewegung eine linie, die ich mit einem tiefpass glätten möchte.

    um mir die frequenzen vor und nach der glättung ansehen zu können, benutze ich bisher nur den x kanal mit der eindimensionalen fftw funktion fftw_plan_dft_r2c_1d, was aber vermutlich nur näherungsweise hinkommt. die erläuterungen in der doku zu fftw beziehen sich für die zweidimensionale version fftw_plan_dft_r2c_2d auf bilder, sind also nicht ganz auf meinen fall übertragbar.

    wie kann ich mein spektrum korrekt aus x UND y werten berechnen?



  • ich vermute auch, dass die 2d variante der fftw nur für bilder zu gebrauchen ist, weil man ja zur ermittlung von frequenzen in einem bild werte aus allen richtungen von einem pixel aus berücksichtigen muss. das wäre aber bei meinen x/y-messdaten vermutlich nicht sinnvoll.



  • Wenn es sich um (x,y)(t) kannst du die Daten in x(t) bzw. y(t) aufspalten. Deine Daten haengen nur von t ab, d.h. sind "eindimensional".



  • das würde also heißen, dass ich kein aus x und y kombiniertes spektrum erzeugen kann? macht man das nicht bei audiosignalen, oder ist der fall nicht vergleichbar?



  • Eine zweidimensionale FFT ist eine FFT auf jede der Dimensionen, mehr nicht. Einmal spaltenweise und einmal zeilenweise über die Matrix, fertig.

    Ich hänge aber immer noch irgendwie... Deine Daten sind also Wegkoordinaten. Und Du möchtest das Spektrum der Wegkoordinaten darstellen, vor und nach der Glättung?

    Ein Audiospektrum gehört zu einem eindimensionalen Signal. Wenn Du das Spektrum eines X-Y-Signals darstellst, hast Du ein Bild, wo die üblicherweise die dritte Dimension - dargestellt durch den Grauwert - die Amplitude darstellt, an der jeweiligen Ortsfrequenz zu X-Y.

    Ich glaube nicht, daß Du das eigentlich willst.

    Können wir nicht aus Deinen Bewegungsbahnen zunächst eindimensionale Daten machen? Macht es denn für Dich einen Unterschied, ob eine Bewegung in X-Richtung oder in Y-Richtung stattfindet, oder geht es um die Bewegung an sich?



  • Marc++us schrieb:

    Ich hänge aber immer noch irgendwie... Deine Daten sind also Wegkoordinaten. Und Du möchtest das Spektrum der Wegkoordinaten darstellen, vor und nach der Glättung?

    jau!

    Marc++us schrieb:

    Ein Audiospektrum gehört zu einem eindimensionalen Signal. Wenn Du das Spektrum eines X-Y-Signals darstellst, hast Du ein Bild, wo die üblicherweise die dritte Dimension - dargestellt durch den Grauwert - die Amplitude darstellt, an der jeweiligen Ortsfrequenz zu X-Y.

    da kann ich dir leider nicht folgen...

    Marc++us schrieb:

    Können wir nicht aus Deinen Bewegungsbahnen zunächst eindimensionale Daten machen? Macht es denn für Dich einen Unterschied, ob eine Bewegung in X-Richtung oder in Y-Richtung stattfindet, oder geht es um die Bewegung an sich?

    es ist natürlich problemlos möglich, ein spektrum für x und eines für y zu erstellen, nur sind ja beide nicht identisch, woraus ich schließe, dass keines von beiden das "wahre" spektrum für den sich bewegenden punkt ist.



  • fouriertransformation ist linear, die Kombination von x(t)*e1 + y(t)*e2 auch (wobei e1 e2 deine Basisvektoren sind). http://de.wikipedia.org/wiki/Fourier-Transformation#Linearit.C3.A4t



  • danke, mit fehlt aber leider das mathematische verständnis, um daraus hinsichtlich meines problems etwas ableiten/verstehen zu können. was bedeutet das für mein problem?



  • Das bei der fft(x(t)) + fft(y(t) prinzipiell das gleiche herauskommt wie fft((x,y)(t)).



  • danke.
    nun bekomme ich aber bei einer zweidimensionalen fft ein einziges spektrum zurück, bei zwei eindimensionalen zwei spektren. mein problem ist ja, dass ich gerne ein korrektes gesamtspektrum hätte statt jeweils einem aus x und y. oder kann ich einfach den mittelwert aus dem x und dem y spektrum nehmen? klingt nicht gut...



  • fft(x(t)) + fft(y(t)), Addition, dabei geht aber die Unterscheidung von x/y verloren! Aber ich habe selbst eher geringe Erfahrung mit FT auf Bewegungsdaten in 2D. Ich weiss nichtmal, ob das Sinn macht.



  • @knivil: daran dachte ich zunächst auch, aber soweit ich das sehe, wäre das nicht invariant gegenüber Rotation, und das braucht er ja - denn sein Spektrum muß gleich sein, egal ob sich der Punkt um (1,0), (0,1) oder (wurzel(2), wurzel(2)) bewegt... würde man die Spektren von fft(x(t)) und fft(y(t)) addieren, wäre das gegeben? Die Addition kann zu Auslöschung führen, das wäre nicht gewollt. Dann würde ich ja eher zu wurzel(fft(x)^2 + fft(y)^2) raten...

    Bei diesem Gedanken kam ich dann auch auf meinen Lösungsvorschlag:

    Die FFT bezieht sich grundsätzlich auf KOMPLEXE Zahlen. Im Regelfall lässt man gerne den Imaginärteil 0 und arbeitet nur mit dem Realteil, aber hier liefert die eingebaute Mathematik der FFT den Ansatz:

    Die Bahnkurve (x,y)(t) des Teilchens betrachtest Du als eine Folge von komplexen Zahlen c(t) mit

    Re c(t) = x(t)
    Im c(t) = y(t)

    Nun führst Du einfach eine FFT(c(t)) durch, und erhälst das (sowieso) komplexe Spektrum von c(t).

    Jetzt die Amplitude von FFT(c(t)) berechnen (als Betrag aus Realteil und Imaginärteil der komplexen Koeffizienten Deines Spektrums).

    Das sollte das sein, was Du willst.



  • jau, das klingt super! jetzt wo du es schreibst klingelt da auch bei mir was, dass ich sowas schon irgendwo gelesen hatte.
    werde ich gleich montag ausprobieren und rückmeldung geben.
    danke!


Anmelden zum Antworten