Better orange sync curve. Clear message averaging after a successful decode.

This commit is contained in:
Joe Taylor 2021-01-05 11:30:22 -05:00
parent f82356e199
commit 4fb90e336e
3 changed files with 50 additions and 40 deletions

View File

@ -183,8 +183,8 @@ contains
1000 format(12b6.6,b5.5)
call unpack77(c77,0,decoded,unpk77_success) !Unpack to get msgsent
nsnr=nint(snr2)
call this%callback(nutc,sync,nsnr,xdt1,f1,decoded, &
idec,ntrperiod)
call this%callback(nutc,sync,nsnr,xdt1,f1,decoded,idec,ntrperiod)
call q65_clravg
else
! Report sync, even if no decode.
nsnr=db(snr1) - 35.0

View File

@ -70,7 +70,6 @@ subroutine q65_avg(nutc,ntrperiod,LL,nfqso,ntol,lclearave,xdt,f0,snr1,s3)
entry q65_avg2(ntrperiod,ntol,baud,nsubmode,nQSOprogress,lapcqonly, &
ibwa,ibwb,codewords,ncw,xdt,f0,snr1,snr2,dat4,idec)
if(nsave.lt.2) go to 900
mode_q65=2**nsubmode
f0diff=baud*mode_q65
ibwa=1.8*log(baud*mode_q65) + 2
@ -117,7 +116,7 @@ subroutine q65_avg(nutc,ntrperiod,LL,nfqso,ntol,lclearave,xdt,f0,snr1,s3)
xdtsave(i),f0save(i)
1001 format(a1,i5.4,f6.1,f6.2,f7.1)
enddo
if(navg.lt.2) go to 900
if(navg.lt.2) go to 100
s3avg=s3avg/navg
nFadingModel=1
@ -131,7 +130,7 @@ subroutine q65_avg(nutc,ntrperiod,LL,nfqso,ntol,lclearave,xdt,f0,snr1,s3)
snr2=esnodb - 0.5*db(2500.0/baud) + 3.0 !Empirical adjustment
snr2=snr2 - db(float(navg)) !Is this right?
idec=100+navg
go to 900
go to 100
endif
enddo
@ -176,11 +175,24 @@ subroutine q65_avg(nutc,ntrperiod,LL,nfqso,ntol,lclearave,xdt,f0,snr1,s3)
snr2=esnodb - db(2500.0/baud) + 3.0 !Empirical adjustment
snr2=snr2 - 0.5*db(float(navg)) !Is this right?
idec=100*(iaptype+2) + navg
! print*,'D dec2 ',ibw,dec,snr2,avemsg
go to 900
go to 100
endif
enddo ! ibw
enddo ! ipass
900 return
100 return
entry q65_clravg
iutc=-1
iseq=-1
snr1save=0.
xdtsave=0.
f0save=0.0
nsave=0
if(allocated(s3save)) s3save=0.
if(allocated(s3avg)) s3avg=0.
return
end subroutine q65_avg

View File

@ -158,10 +158,6 @@ subroutine q65_sync(nutc,iwave,ntrperiod,mode_q65,codewords,ncw,nsps, &
endif
enddo ! imsg
do i=-ia2,ia2
ccf2(i)=maxval(ccf(i,:))
enddo
i1=i0+ipk-64
i2=i1+LL-1
j=j0+jpk-7
@ -207,15 +203,15 @@ subroutine q65_sync(nutc,iwave,ntrperiod,mode_q65,codewords,ncw,nsps, &
ccf2=ccf2-base
smax=maxval(ccf2)
if(smax.gt.10.0) ccf2=10.0*ccf2/smax
go to 200
go to 100
endif
enddo
!######################################################################
! Establish xdt, f0, and snr1 using sync symbols (and perhaps some AP symbols)
100 ccf=0.
irc=-2
dat4=0
!######################################################################
! Compute the 2D CCF using sync symbols only
100 ccf=0.
do lag=lag1,lag2
do k=1,85
n=NSTEP*(k-1) + 1
@ -228,11 +224,10 @@ subroutine q65_sync(nutc,iwave,ntrperiod,mode_q65,codewords,ncw,nsps, &
endif
enddo
enddo
ijpk=maxloc(ccf(-ia:ia,:))
ipk=ijpk(1)-ia-1
jpk=ijpk(2)-53-1
f0=nfqso + ipk*df
xdt=jpk*dtstep
do i=-ia2,ia2
ccf2(i)=maxval(ccf(i,:))
@ -252,46 +247,49 @@ subroutine q65_sync(nutc,iwave,ntrperiod,mode_q65,codewords,ncw,nsps, &
rms=sqrt(sq/nsq)
smax=ccf(ipk,jpk)
snr1=smax/rms
ccf1=ccf(:,jpk)/rms
if(snr1.gt.10.0) ccf1=(10.0/snr1)*ccf1
ccf2=ccf2/rms
if(snr1.gt.10.0) ccf2=(10.0/snr1)*ccf2
if(iand(ndepth,16).eq.16) then
if(irc.le.0) then
f0=nfqso + ipk*df
xdt=jpk*dtstep
ccf1=ccf(:,jpk)/rms
if(snr1.gt.10.0) ccf1=(10.0/snr1)*ccf1
if(iand(ndepth,16).eq.16) then
! Fill s3() from s1() here, then call q65_avg().
i1=i0+ipk-64
i2=i1+LL-1
if(snr1.ge.2.8 .and. i1.ge.1 .and. i2.le.iz) then
j=j0+jpk-7
n=0
do k=1,85
j=j+8
if(sync(k).gt.0.0) then
cycle
endif
n=n+1
if(j.ge.1 .and. j.le.jz) s3(-64:LL-65,n)=s1(i1:i2,j)
enddo
! write(*,3002) 'B',xdt,f0,sum(s3)
!3002 format(a1,f7.2,2f8.1)
call q65_avg(nutc,ntrperiod,LL,nfqso,ntol,lclearave,xdt,f0,snr1,s3)
i1=i0+ipk-64
i2=i1+LL-1
if(snr1.ge.2.8 .and. i1.ge.1 .and. i2.le.iz) then
j=j0+jpk-7
n=0
do k=1,85
j=j+8
if(sync(k).gt.0.0) then
cycle
endif
n=n+1
if(j.ge.1 .and. j.le.jz) s3(-64:LL-65,n)=s1(i1:i2,j)
enddo
call q65_avg(nutc,ntrperiod,LL,nfqso,ntol,lclearave,xdt,f0,snr1,s3)
endif
endif
endif
200 smax=maxval(ccf1)
smax=maxval(ccf1)
i1=-9999
i2=-9999
do i=-ia,ia
if(i1.eq.-9999 .and. ccf1(i).ge.0.5*smax) i1=i
if(i2.eq.-9999 .and. ccf1(-i).ge.0.5*smax) i2=-i
enddo
width=df*(i2-i1)
do i=-ia2,ia2
freq=nfqso + i*df
write(17,1100) freq,ccf1(i),xdt,ccf2(i)
1100 format(4f10.3)
enddo
close(17)
width=df*(i2-i1)
900 return
end subroutine q65_sync