119 lines
3.0 KiB
Fortran
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|