Guten Tag!
Ich würde gerne die 2D-FFT über die
dll von FFTW einbinden. Bei der eindimensionalen FFT übergebe ich der Funktion einfach für den In- und Output jeweils einen Pointer auf einen dynamischen Array.
Delphi-Quellcode:
Ain, Aout : Array of Single;
plan : Pointer;
...
SetLength(Ain, 128);
SetLength(Aout, 128);
...
plan := fftwf_plan_dft_1d(128, @Ain[0], @Aout[0],FFTW_FORWARD,FFTW_ESTIMATE);
fftwf_execute(plan);
fftwf_destroy_plan(plan);
In der zweidimensionalen Version verlangt die Funktion auch zwei Pointer. Allerdings kommen ich hier mit den zweidimensionalen dynamischen Arrays (array of array) nicht weiter. Wenn ich der Funktion einen Pointer auf den ersten Eintrag des 2D-arrays gebe, wird dieser nicht vernünftig gefüllt. Das wird wahrscheinlich daran liegen, dass bei den 2D-arrays die Werte nicht alle direkt im Speicher hintereinander stehen.
Gibt es eine Möglichkeit dieses Problem einfach zu lösen? Kann ich beispielsweise mittels GetMen einen Speicher von N*M freischaufeln, der FFT übergeben und nachher wieder einen 2D-array machen, ohne selber mit einer Schleife den Array zu füllen? Gibt es vielleicht eine Variante, in der nicht zweimal ein Speicherabbild von dem Array auf dem Hauptspeicher existiert?
Hinzu kommt das Problem, dass ich einen 2D-array von komplexen Zahlen brauche.
Grüße