From 51eb142f4c81c96341f62c88e4bb9a99a31e151b Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 1 Dec 2022 12:17:03 -0500 Subject: [PATCH] Improve wideband Q65 decoding in MAP65. --- lib/map65_mmdec.f90 | 2 +- map65/libm65/map65a.f90 | 6 +++--- map65/libm65/wideband_sync.f90 | 33 ++++++++++++++++++++++++--------- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/lib/map65_mmdec.f90 b/lib/map65_mmdec.f90 index ca9f959ed..18334ecf9 100644 --- a/lib/map65_mmdec.f90 +++ b/lib/map65_mmdec.f90 @@ -40,7 +40,7 @@ subroutine map65_mmdec(nutc,id2,nqd,nsubmode,nfa,nfb,nfqso,ntol,newdat, & lagain=(nagain.ne.0) bVHF=.true. emedelay=2.5 - ndepth=1 + ndepth=3 !Does this make it too slow? ntrperiod=60 open(17,file=trim(temp_dir)//'/red.dat',status='unknown') diff --git a/map65/libm65/map65a.f90 b/map65/libm65/map65a.f90 index 87afa48cd..b0f43be7c 100644 --- a/map65/libm65/map65a.f90 +++ b/map65/libm65/map65a.f90 @@ -68,11 +68,11 @@ subroutine map65a(dd,ss,savg,newdat,nutc,fcenter,ntol,idphi,nfa,nfb, & endif !### ! do k=1,ncand -! freq=cand(k)%f+nkhz_center-48.0-1.27046 +! freq=cand(k)%f+nkhz_center-48.0 ! ipk=cand(k)%indx -! write(*,3010) nutc,k,db(cand(k)%snr),freq,cand(k)%xdt, & +! write(71,3071) k,db(cand(k)%snr),freq,cand(k)%xdt, & ! cand(k)%ipol,cand(k)%iflip,ipk,ldecoded(ipk) -!3010 format('=a',i5.4,i5,f8.2,f10.3,f8.2,2i3,i6,L4) +!3071 format(i3,f8.2,f10.3,f8.2,2i3,i6,L4) ! enddo !### diff --git a/map65/libm65/wideband_sync.f90 b/map65/libm65/wideband_sync.f90 index 90689ed1f..31a96d2cb 100644 --- a/map65/libm65/wideband_sync.f90 +++ b/map65/libm65/wideband_sync.f90 @@ -41,7 +41,7 @@ subroutine get_candidates(ss,savg,xpol,jz,nfa,nfb,nts_jt65,nts_q65,cand,ncand) type(candidate) :: cand(MAX_CANDIDATES) common/early/nhsym1,nhsym2,ldecoded(32768) - call wb_sync(ss,savg,xpol,jz,nfa,nfb) + call wb_sync(ss,savg,xpol,jz,nfa,nfb) !Output to sync() array tstep=2048.0/11025.0 !0.185760 s: 0.5*tsym_jt65, 0.3096*tsym_q65 df3=96000.0/NFFT @@ -89,8 +89,6 @@ subroutine get_candidates(ss,savg,xpol,jz,nfa,nfb,nts_jt65,nts_q65,cand,ncand) if(diffhz.gt.-0.03*bw .and. diffhz.lt.1.03*bw) skip=.true. enddo if(skip) cycle -! write(*,3301) i,k,m,f0,diffhz,bw,db(snr1) -!3301 format('=A',3i5,f8.3,2f8.0,f8.2) k=k+1 cand(k)%snr=snr1 cand(k)%f=f0 @@ -99,6 +97,8 @@ subroutine get_candidates(ss,savg,xpol,jz,nfa,nfb,nts_jt65,nts_q65,cand,ncand) cand(k)%ipol=sync(n)%ipol cand(k)%iflip=nint(flip) cand(k)%indx=n +! write(50,3050) i,k,m,f0+32.0,diffhz,bw,snr1,db(snr1) +!3050 format(3i5,f8.3,2f8.0,2f8.2) if(k.ge.MAX_CANDIDATES) exit enddo ncand=k @@ -251,15 +251,30 @@ subroutine wb_sync(ss,savg,xpol,jz,nfa,nfb) enddo ! i (frequency bin) -! do i=ia,ib -! write(15,3015) 0.001*(i-1)*df3,sync(i)%ccfmax,sync(i)%xdt,sync(i)%ipol, & -! sync(i)%iflip,sync(i)%birdie -!3015 format(3f10.3,2i6,L5) -! enddo - call pctile(sync(ia:ib)%ccfmax,ib-ia+1,50,base) sync(ia:ib)%ccfmax=sync(ia:ib)%ccfmax/base + bw=65*4*1.66666667 !Q65-60C bandwidth + nbw=bw/df3 + 1 !Number of bins to blank + syncmin=2.0 + nguard=10 + do i=ia,ib + if(sync(i)%ccfmax.lt.syncmin) cycle + spk=maxval(sync(i:i+nbw)%ccfmax) + ip =maxloc(sync(i:i+nbw)%ccfmax) + i0=ip(1)+i-1 + ja=min(i,i0-nguard) + jb=i0+nbw+nguard + sync(ja:jb)%ccfmax=0. + sync(i0)%ccfmax=spk + enddo + +! do i=ia,ib +! write(15,3015) 0.001*(i-1)*df3+32.0,sync(i)%ccfmax,sync(i)%xdt, & +! sync(i)%ipol,sync(i)%iflip,sync(i)%birdie +!3015 format(3f10.3,2i6,L5) +! enddo + return end subroutine wb_sync