fftw library



  • hi zusammen
    ich teste gerade die fftw library und leider funktioniert das nicht wie ich das gerne haette. Ich habe ein folgendes Beispiel setup

    Ich convertiere meinen 3D Wuerfel (meine daten liegen in einem 3D grid) in ein 1D array via

    F[i1*line*line + i2*line + i3][0] = cube_data[i1][i2][i3][0];

    F is vom typ fftw_complex. Als Beispiel habe ich jetzt einfach alle geraden Faelder auf eins gesetzt und alle ungeraden auf 0.

    p = fftw_plan_dft_3d(line, line, line, F, G, FFTW_FORWARD, FFTW_ESTIMATE);
    fftw_execute(p);

    G ist genau wie F definiert. Der output fuer ein gerades Feld ist

    vorher:
    G[616][0] = 0
    G[616][1] = 0
    F[616][0] = 1
    F[616][1] = 0
    nachher
    G[616][0] = 0
    G[616][1] = 0
    F[616][0] = 0
    F[616][1] = 0

    und das kann ja wohl nicht stimmen oder?
    bin dankbar fuer jede Hilfe
    gruess
    florian



  • Und wenn du noch hinzuschreiben würdest, was FFTW ist...

    Also ich würde jetzt mal raten und sagen: "Fast Fourier Transformation" ...
    Andere raten da sicherlich andere Dinge 😉



  • oh sorry
    ja fftw steht fuer "fastes fourier transformation in the west" oder sowas... es geht also um fourier transformation...

    mir ist aufgefallen dass wenn ich das Ergebnis wieder zurueck transformiere bekomme ich folgendes

    vorher:
    G[616][0] = 0
    G[616][1] = 0
    F[616][0] = 1
    F[616][1] = 0
    nachher
    G[616][0] = 0
    G[616][1] = 0
    F[616][0] = 1
    F[616][1] = 0
    und zurueck mit

    p = fftw_plan_dft_3d(line, line, line, G, T,FFTW_BACKWARD, FFTW_MEASURE);
    fftw_execute(p);

    T[616][0] = 65536
    T[616][1] = 0
    G[616][0] = 0
    G[616][1] = 0
    F[616][0] = 1
    F[616][1] = 0

    also F bleibt bei (das war bloedsinn oberen Beispiel), aber ich verstehe ich wie T zustande kommt, wenn in G doch 0 steht???
    Ausserdem weiss ich nich trecht wie 65536 zustande kommt, ich dachte das ist die Normalisierung und die sollte doch bei mir die Seitenlaenge des Wuerfels hoch 3 sein, also 16*16*16 = 4096???
    gruesse
    florian



  • Was genau willst du denn mit der FFT machen?

    Also ich habe mit der FFT immer Frequenzanteile ermittelt... wie die FFT jedoch mit einem Würfel in Zusammenhang steht ist mir nicht klar.

    Also du solltest mal genau beschreiben wozu du die FFT brauchst und dann den Quellcode in die C++-Tags packen.


Anmelden zum Antworten