52 lines
1.3 KiB
FortranFixed
52 lines
1.3 KiB
FortranFixed
|
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
|
||
|
|