WSJT-X/lib/blanker.f90

53 lines
1.2 KiB
Fortran

subroutine blanker(iwave,nz,dwell_time,fblank,npct)
integer*2 iwave(nz)
integer hist(0:32768)
real dwell_time !Blanking dwell time (s)
real fblank !Fraction of points to be blanked
data ncall/0/,thresh/0.0/,fblanked/0.0/
save ncall,thresh,fblanked
ncall=ncall+1
ndropmax=nint(1.0 + dwell_time*12000.0)
hist=0
do i=1,nz
n=abs(iwave(i))
hist(n)=hist(n)+1
enddo
n=0
do i=32768,0,-1
n=n+hist(i)
if(n.ge.nint(nz*fblank/ndropmax)) exit
enddo
thresh=thresh + 0.01*(i-thresh)
if(ncall.eq.1) thresh=i
nthresh=nint(thresh)
ndrop=0
ndropped=0
do i=1,nz
i0=iwave(i)
if(ndrop.gt.0) then
iwave(i)=0
ndropped=ndropped+1
ndrop=ndrop-1
cycle
endif
! Start to apply blanking
if(abs(iwave(i)).gt.nthresh) then
iwave(i)=0
ndropped=ndropped+1
ndrop=ndropmax
endif
enddo
fblanked=fblanked + 0.1*(float(ndropped)/nz - fblanked)
if(ncall.eq.1) fblanked=float(ndropped)/nz
npct=nint(100.0*fblanked)
! if(mod(ncall,4).eq.0) write(*,3001) thresh,dwell_time,fblank,fblanked,npct
!3001 format(f8.1,f8.4,f6.2,f7.3,i6)
return
end subroutine blanker