42 lines
1.1 KiB
Fortran
42 lines
1.1 KiB
Fortran
real*4 function interp(ix, iy, xfrac, yfrac, rvs, iac, ioff)
|
|
|
|
c integer*4 CMAX
|
|
c parameter (CMAX = 7000)
|
|
integer*4 ix, iy, n, first, iac, ioff
|
|
real*8 xfrac, yfrac
|
|
real*4 rvs(0:2*iac-1,*)
|
|
complex temp(8)
|
|
real*4 xintp(0:65544)
|
|
data first/1/
|
|
save xintp, first
|
|
|
|
c* we want to do a 8192 x (8-pt sinc) interpolation of the original data, choosing
|
|
c* the resulting nearest neighbor.
|
|
|
|
if(first .eq. 1) then
|
|
call intp_coef_norm(8192,xintp)
|
|
first = 0
|
|
end if
|
|
n = 0
|
|
|
|
ifrac = 8 * nint(xfrac * 8192.)
|
|
c write (*,*) '1 ',frac,ifrac
|
|
do i = iy - 3 , iy + 4
|
|
n = n + 1
|
|
temp(n) = cmplx(0.0,0.0)
|
|
do k = -3 , 4
|
|
temp(n) = temp(n) + rvs(ix+k+ioff,i) * xintp(ifrac+k+3)
|
|
end do
|
|
enddo
|
|
|
|
ifrac = 8 * nint(yfrac * 8192.)
|
|
c write (*,*) '2 ', frac,ifrac
|
|
cinterp = cmplx(0.,0.)
|
|
do k = -3 , 4
|
|
cinterp = cinterp + temp(k+4) * xintp(ifrac+k+3)
|
|
end do
|
|
interp = real(cinterp)
|
|
return
|
|
end
|
|
|