fortran Komplex zu echten fftw Problem
Ich arbeite derzeit an einem Projekt, in dem ich eine Fouriertransformation und eine inverse Transformation implementieren muss. Ich habe ein Programm getestet, das ich anhand eines Online-Beispiels geändert habe. Die Druck- oder Schreibbefehle dienen normalerweise zu Debugging-Zwecken:
program testit
INCLUDE 'fftw3.f'
double complex out!, in
real in
parameter (N=100)
dimension in(N), out(N)
integer*8 p,p2
integer i,j
real x
real fact
write(*,*)"stuff in data"
OPEN(UNIT=12, FILE="input.txt", ACTION="write", STATUS="replace")
OPEN(UNIT=20, FILE="dftoutput.txt", ACTION="write", STATUS="replace")
x=0
in = 0
do i=1,N/2
in(i)=1
enddo
do i=1,N
write(*,"(f10.2,1x,f10.2)")in(i)
WRITE(12,*)real(in(i))
enddo
write(*,*)"create plans"
call dfftw_plan_dft_r2c_1d(p ,N,in,out,FFTW_ESTIMATE)
call dfftw_plan_dft_c2r_1d(p2,N,in,out,FFTW_ESTIMATE)
write(*,*)"do it"
call dfftw_execute_dft_r2c(p,in,out)
do i=1,N
write(*,"(f12.4,1x,f12.4)")out(i)
WRITE(20,*)abs(out(i))
enddo
write(*,*)"undo it"
call dfftw_execute_dft_c2r(p2,in,out)
fact=1.0/N
do i=1,N
write(*,)in(i)
write(*,)out(i)
enddo
write(*,*)"clean up"
call dfftw_destroy_plan(p,in,out)
call dfftw_destroy_plan(p2,in,out)
end program
Die echte bis komplexe Transformation funktioniert einwandfrei. Die inverse Transformation liefert falsche Werte und modifiziert irgendwie sowohl die in- als auch die out-Variablen. Ich weiß nicht, woran es liegt und konnte online keine Antworten finden. Hilfe wird geschätzt.
Danke im Voraus
Chad W. Freer
Edit ,: Ich habe mich auch gefragt, ob es eine ähnliche Funktion wie fftshift () und ifftshift () von matlab im Paket fftw gibt.