Je travaille actuellement sur un projet où j'ai besoin de mettre en œuvre une transformée de Fourier et une transformation inverse. Je testais un programme que j'ai modifié à partir d'un exemple en ligne; l'impression ou d'écriture sont normalement à des fins de débogage:fortran complex to real fftw issue
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
Le vrai à la transformation complexe fonctionne très bien. La transformation inverse donne de fausses valeurs et modifie les variables d'entrée et de sortie. Je ne sais pas quel est le problème et je n'ai pas pu trouver de réponses en ligne. L'aide est appréciée.
Merci d'avance!
Tchad W. Freer
Edit: Je me demandais aussi s'il y a une fonction similaire à fftshift() et ifftshift() de Matlab dans le paquet de FFTW.
Vous devez décrire comment vous obtenez les mauvaises valeurs, à quoi elles ressemblent et quelles valeurs vous attendez. –
Selon la documentation de FFTW concernant [drapeaux de planificateur] (http://www.fftw.org/doc/Planner-Flags.html#Planner-Flags),> 'FFTW_PRESERVE_INPUT' spécifie qu'une transformation" out-of-place "doit ne change pas son tableau d'entrée. C'est généralement la valeur par défaut, sauf pour les transformées c2r et hc2r (c'est-à-dire complexes à réelles) pour lesquelles 'FFTW_DESTROY_INPUT' est la valeur par défaut ... – francis