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 setupIch 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] = 0und 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 mitp = 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] = 0also 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.