ISCE_INSAR/components/mroipac/dopiq/src/dopiq-new.f

52 lines
1.3 KiB
FortranFixed
Raw Normal View History

2019-01-16 19:40:08 +00:00
subroutine dopiq(rawAccessor)
use dopiqState
implicit none
integer*8 rawAccessor
integer*1, dimension(:), allocatable :: in
integer cnt,i,k
complex*8, dimension(:), allocatable :: a, b, prod
real*8, parameter :: pi = 4.d0*atan(1.d0)
allocate( in( last ))
allocate( a( ((last-hdr)/2)+1 ))
allocate( b( ((last-hdr)/2)+1 ))
allocate(prod( ((last-hdr)/2)+1 ))
do k=1, ((last-hdr)/2)+1
prod(k)=cmplx(0.,0.)
end do
cnt = 0
do i=i0,i0+n-1
cnt = i
call getLine(rawAccessor,in,cnt)
if (cnt.eq.-1) goto 99
do k=hdr+1,last, 2
a((k-hdr)/2+1)=cmplx(iand(int(in(k)),255)-xmn,iand(int(in(k+1)),255)-xmn)
end do
c get second line
cnt = i+1
call getLine(rawAccessor,in,cnt)
if(cnt.eq.-1) goto 99
do k=hdr+1,last,2
b((k-hdr)/2+1)=cmplx(iand(int(in(k)),255)-xmn,iand(int(in(k+1)),255)-xmn)
end do
do k=1, (len-hdr)/2
prod(k)=prod(k)+conjg(a(k))*b(k)
end do
end do
c convert to frequencies in cycles
99 do k=1, (last-hdr)/2
acc(k)=atan2(aimag(prod(k)),real(prod(k)))
acc(k)=acc(k)/2/pi
end do
deallocate(in)
deallocate(a)
deallocate(b)
deallocate(prod)
end