Fix several more flaws in the way Q65 decodes are presented.

This commit is contained in:
Joe Taylor 2020-12-30 15:05:02 -05:00
parent 197fd6a5ba
commit 5d7b5f83e2
5 changed files with 23 additions and 23 deletions

View File

@ -153,9 +153,9 @@ contains
call timer('q65loops',0)
call q65_loops(c00,npts/2,nsps/2,mode65,nsubmode,ndepth,jpk0, &
xdt,f0,width,iaptype,xdt1,f1,snr2,dat4,idec)
xdt,f0,iaptype,xdt1,f1,snr2,dat4,idec)
call timer('q65loops',1)
if(id2.gt.0) exit !Exit main loop after a successful decode
if(idec.gt.0) go to 100 !Successful decode, we're done
enddo
! No single-transmission decode.

View File

@ -1,4 +1,4 @@
subroutine q65_avg(nutc,ntrperiod,LL,ntol,lclearave,xdt,f0,snr1,s3)
subroutine q65_avg(nutc,ntrperiod,LL,nfqso,ntol,lclearave,xdt,f0,snr1,s3)
! Accumulate Q65 spectra s3(LL,63) and associated parameters for
! message averaging.
@ -47,7 +47,7 @@ subroutine q65_avg(nutc,ntrperiod,LL,ntol,lclearave,xdt,f0,snr1,s3)
endif
do i=1,MAXAVE !Don't save info more than once for same UTC and freq
if(nutc.eq.iutc(i) .and. abs(nfreq-f0save(i)).le.ntol) go to 10
if(nutc.eq.iutc(i) .and. abs(nfqso-f0save(i)).le.ntol) go to 10
enddo
! Save data for message averaging

View File

@ -1,5 +1,5 @@
subroutine q65_loops(c00,npts2,nsps,mode_q65,nsubmode,ndepth,jpk0, &
xdt0,f0,width,iaptype,xdt1,f1,snr2,dat4,id2)
xdt0,f0,iaptype,xdt1,f1,snr2,dat4,idec)
use packjt77
use timer_module, only: timer
@ -19,16 +19,18 @@ subroutine q65_loops(c00,npts2,nsps,mode_q65,nsubmode,ndepth,jpk0, &
51,51,42,42,50,25,31,35,57,30, 1,54,54,10,10,22,44,58,57,40, &
21,21,19/
id2=-1
idec=-1
ircbest=9999
allocate(c0(0:npts2-1))
irc=-99
s3lim=20.
baud=6000.0/nsps
idfmax=3
idtmax=3
ibwmin=1
ibwmax=3
ibwa=max(1,int(1.8*log(baud*mode_q65)) + 2)
ibwb=min(10,ibwa+4)
ibw0=(ibwa+ibwb)/2
maxdist=5
if(iand(ndepth,3).ge.2) then
idfmax=5
@ -36,11 +38,14 @@ subroutine q65_loops(c00,npts2,nsps,mode_q65,nsubmode,ndepth,jpk0, &
maxdist=15
endif
if(iand(ndepth,3).eq.3) then
ibwmax=5
maxdist=25
ibwa=max(1,ibwa-1)
ibwb=min(10,ibwb+1)
endif
LL=64*(mode_q65+2)
napmin=99
baud=6000.0/nsps
xdt1=xdt0
f1=f0
@ -63,13 +68,10 @@ subroutine q65_loops(c00,npts2,nsps,mode_q65,nsubmode,ndepth,jpk0, &
s3=s3/base
where(s3(1:LL*NN)>s3lim) s3(1:LL*NN)=s3lim
endif
do ibw=ibwmin,ibwmax
nbw=ibw/2
if(mod(ibw,2).eq.0) nbw=-nbw
ndist=ndf**2 + ndt**2 + nbw**2
do ibw=ibwa,ibwb
ndist=ndf**2 + ndt**2 + (ibw-ibw0)**2
if(ndist.gt.maxdist) cycle
xx=1.885*log(3.0*width)+nbw
b90=1.7**xx
b90=1.72**ibw
if(b90.gt.345.0) cycle
b90ts = b90/baud
call q65_dec2(s3,nsubmode,b90ts,esnodb,irc,dat4,decoded)
@ -77,17 +79,13 @@ subroutine q65_loops(c00,npts2,nsps,mode_q65,nsubmode,ndepth,jpk0, &
! -1 = invalid params
! -2 = decode failed
! -3 = CRC mismatch
! irc=-99 !### TEMPORARY ###
if(irc.ge.0) then
id2=iaptype+2
! print*,'B dec2 ',ibw,irc,id2,decoded
go to 100
endif
if(irc.ge.0) go to 100
enddo ! ibw (b90 loop)
enddo ! idt (DT loop)
enddo ! idf (f0 loop)
100 if(irc.ge.0) then
idec=iaptype+2
snr2=esnodb - db(2500.0/baud)
xdt1=xdt0 + nsps*ndt/(16.0*6000.0)
f1=f0 + 0.5*baud*ndf

View File

@ -250,7 +250,7 @@ subroutine q65_sync(nutc,iwave,ntrperiod,mode_q65,codewords,ncw,nsps, &
enddo
! write(*,3002) 'B',xdt,f0,sum(s3)
!3002 format(a1,f7.2,2f8.1)
call q65_avg(nutc,ntrperiod,LL,ntol,lclearave,xdt,f0,snr1,s3)
call q65_avg(nutc,ntrperiod,LL,nfqso,ntol,lclearave,xdt,f0,snr1,s3)
endif
endif

View File

@ -3498,6 +3498,8 @@ void MainWindow::readFromStdout() //readFromStdout
if(SpecOp::FOX==m_config.special_op_id() and for_us and (audioFreq<1000)) bDisplayRight=true;
if(SpecOp::FOX!=m_config.special_op_id() and (for_us or (abs(audioFreq - m_wideGraph->rxFreq()) <= 10))) bDisplayRight=true;
}
if((abs(audioFreq - m_wideGraph->rxFreq()) <= ui->sbFtol->value()) and
m_mode=="Q65") bDisplayRight=true;
} else {
if((abs(audioFreq - m_wideGraph->rxFreq()) <= 10) and
!m_config.enable_VHF_features()) bDisplayRight=true;