complexo fortran para questão real FFTW
Atualmente, estou trabalhando em um projeto no qual preciso implementar uma transformação de fourier e uma inversa. Eu estava testando um programa que modifiquei de um exemplo online; os comandos de impressão ou gravação são normalmente para fins de depuração:
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
A transformação real em complexa funciona perfeitamente. A transformação inversa fornece valores errados e, de alguma forma, modifica as variáveis in e out. Não sei qual é o problema e não consegui encontrar respostas online. A ajuda é apreciada.
Desde já, obrigado!
Chad W. Freer
Edit :: Eu também queria saber se existe uma função semelhante ao fftshift () e ifftshift () do matlab no pacote fftw.