ISCE_INSAR/components/mroipac/doppler/src/doppler.f

119 lines
3.0 KiB
Fortran

subroutine doppler(rawAccessor)
use dopplerState
implicit none
integer i_rs,i_as
parameter(i_rs=50000,i_as=512)
integer*8 rawAccessor
C character*80 string,a_file
C integer iargc,i,j,i_arg,i_samples,i_strtline,i_nlines,ir,i_pcnt,i_lpw
integer ir,i_pcnt,i_lpw,i,i_mod,i_mod1,j
complex c_image(i_rs,0:1),dbuf(i_rs),c_dbuf(i_rs),line(i_rs)
C real r_fd(i_rs),
real r_fest,r_fdraw(i_rs),r_festraw,wgth
real*8, parameter :: pi = 4.d0*atan(1.d0)
C write(6,*) ' '
C write(6,*) ' << Doppler Estimate from Complex Data >>'
C write(6,*) ' '
C i_arg = iargc()
C if(i_arg .lt. 4)then
C write(6,*) 'Usage: doppler file samples start_line numlines [lpfw]'
C stop
C endif
i_lpw = 1
C call getarg(1,a_file)
C call getarg(2,string)
C read(string,*) i_samples
C call getarg(3,string)
C read(string,*) i_strtline
C call getarg(4,string)
C read(string,*) i_nlines
C if(iargc() .gt. 4)then
C call getarg(5,string)
C read(string,*) i_lpw
C endif
C open(12,file=a_file,access='direct',form='unformatted',recl=8*i_samples)
write(6,*) 'Reading Data...'
write(6,*) ' '
write(6,*) ' Doppler estimation as a function of range :'
wgth = 1.0
do i = 1,i_samples
dbuf(i) = (0.0,0.0)
enddo
do i=i_strtline,i_strtline+i_nlines-1
i_mod = mod(i,2)
C read(12,rec=i) (c_image(j,i_mod),j=1,i_samples)
call getLine(rawAccessor,line,i)
do j=1,i_samples
c_image(j,i_mod) = line(j)
enddo
if(i .gt. i_strtline)then
i_mod1 = mod(i-1,2)
do ir = 1,i_samples
dbuf(ir) = dbuf(ir) + wgth*c_image(ir,i_mod)*conjg(c_image(ir,i_mod1))
enddo ! ir-loop
endif
enddo
c take range looks
do ir=1,i_samples
c_dbuf(ir) = cmplx(0.,0.)
do i=1,i_lpw
c_dbuf(ir) = c_dbuf(ir) + dbuf(min(ir+i-1,i_samples))
enddo
enddo
c Doppler ambiguity resolution
i_pcnt = 0
do ir=1,i_samples
if(cabs(c_dbuf(ir)) .ne. 0)then
r_festraw = atan2(aimag(c_dbuf(ir)),real(c_dbuf(ir)))/(2.0*pi)
r_fest = atan2(aimag(c_dbuf(ir)),real(c_dbuf(ir)))/(2.0*pi) + 1.0*i_pcnt
else
r_fest = 0.0
endif
if(ir .ne. 1)then
if(abs(r_fest-r_fd(ir-1)) .gt. .501)then
i_pcnt = i_pcnt + nint(sign(1.0D0,r_fd(ir-1)-r_fest))
r_fest = r_fest + sign(1.0D0,r_fd(ir-1)-r_fest)
endif
endif
r_fd(ir)= r_fest
r_fdraw(ir) = r_festraw
end do
C write(6,*) ' '
C write(6,*) 'Writing file dop.out'
C open(13,file='dop.out',status='unknown')
C do i=1,i_samples
C write(13,'(x,i10,x,f15.10,x,f15.10)') i,r_fd(i),r_fdraw(i)
C write(13,'(x,i10,x,f15.10,x,f15.10)') i,r_fd(i)
C enddo
end