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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage