mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-05-30 05:12:26 -04:00
Fix several more flaws in the way Q65 decodes are presented.
This commit is contained in:
parent
197fd6a5ba
commit
5d7b5f83e2
@ -153,9 +153,9 @@ contains
|
|||||||
|
|
||||||
call timer('q65loops',0)
|
call timer('q65loops',0)
|
||||||
call q65_loops(c00,npts/2,nsps/2,mode65,nsubmode,ndepth,jpk0, &
|
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)
|
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
|
enddo
|
||||||
|
|
||||||
! No single-transmission decode.
|
! No single-transmission decode.
|
||||||
|
@ -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
|
! Accumulate Q65 spectra s3(LL,63) and associated parameters for
|
||||||
! message averaging.
|
! message averaging.
|
||||||
@ -47,7 +47,7 @@ subroutine q65_avg(nutc,ntrperiod,LL,ntol,lclearave,xdt,f0,snr1,s3)
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
do i=1,MAXAVE !Don't save info more than once for same UTC and freq
|
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
|
enddo
|
||||||
|
|
||||||
! Save data for message averaging
|
! Save data for message averaging
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
subroutine q65_loops(c00,npts2,nsps,mode_q65,nsubmode,ndepth,jpk0, &
|
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 packjt77
|
||||||
use timer_module, only: timer
|
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, &
|
51,51,42,42,50,25,31,35,57,30, 1,54,54,10,10,22,44,58,57,40, &
|
||||||
21,21,19/
|
21,21,19/
|
||||||
|
|
||||||
id2=-1
|
idec=-1
|
||||||
ircbest=9999
|
ircbest=9999
|
||||||
allocate(c0(0:npts2-1))
|
allocate(c0(0:npts2-1))
|
||||||
irc=-99
|
irc=-99
|
||||||
s3lim=20.
|
s3lim=20.
|
||||||
|
baud=6000.0/nsps
|
||||||
|
|
||||||
idfmax=3
|
idfmax=3
|
||||||
idtmax=3
|
idtmax=3
|
||||||
ibwmin=1
|
ibwa=max(1,int(1.8*log(baud*mode_q65)) + 2)
|
||||||
ibwmax=3
|
ibwb=min(10,ibwa+4)
|
||||||
|
ibw0=(ibwa+ibwb)/2
|
||||||
maxdist=5
|
maxdist=5
|
||||||
if(iand(ndepth,3).ge.2) then
|
if(iand(ndepth,3).ge.2) then
|
||||||
idfmax=5
|
idfmax=5
|
||||||
@ -36,11 +38,14 @@ subroutine q65_loops(c00,npts2,nsps,mode_q65,nsubmode,ndepth,jpk0, &
|
|||||||
maxdist=15
|
maxdist=15
|
||||||
endif
|
endif
|
||||||
if(iand(ndepth,3).eq.3) then
|
if(iand(ndepth,3).eq.3) then
|
||||||
ibwmax=5
|
maxdist=25
|
||||||
|
ibwa=max(1,ibwa-1)
|
||||||
|
ibwb=min(10,ibwb+1)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
LL=64*(mode_q65+2)
|
LL=64*(mode_q65+2)
|
||||||
napmin=99
|
napmin=99
|
||||||
baud=6000.0/nsps
|
|
||||||
xdt1=xdt0
|
xdt1=xdt0
|
||||||
f1=f0
|
f1=f0
|
||||||
|
|
||||||
@ -63,13 +68,10 @@ subroutine q65_loops(c00,npts2,nsps,mode_q65,nsubmode,ndepth,jpk0, &
|
|||||||
s3=s3/base
|
s3=s3/base
|
||||||
where(s3(1:LL*NN)>s3lim) s3(1:LL*NN)=s3lim
|
where(s3(1:LL*NN)>s3lim) s3(1:LL*NN)=s3lim
|
||||||
endif
|
endif
|
||||||
do ibw=ibwmin,ibwmax
|
do ibw=ibwa,ibwb
|
||||||
nbw=ibw/2
|
ndist=ndf**2 + ndt**2 + (ibw-ibw0)**2
|
||||||
if(mod(ibw,2).eq.0) nbw=-nbw
|
|
||||||
ndist=ndf**2 + ndt**2 + nbw**2
|
|
||||||
if(ndist.gt.maxdist) cycle
|
if(ndist.gt.maxdist) cycle
|
||||||
xx=1.885*log(3.0*width)+nbw
|
b90=1.72**ibw
|
||||||
b90=1.7**xx
|
|
||||||
if(b90.gt.345.0) cycle
|
if(b90.gt.345.0) cycle
|
||||||
b90ts = b90/baud
|
b90ts = b90/baud
|
||||||
call q65_dec2(s3,nsubmode,b90ts,esnodb,irc,dat4,decoded)
|
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
|
! -1 = invalid params
|
||||||
! -2 = decode failed
|
! -2 = decode failed
|
||||||
! -3 = CRC mismatch
|
! -3 = CRC mismatch
|
||||||
! irc=-99 !### TEMPORARY ###
|
if(irc.ge.0) go to 100
|
||||||
if(irc.ge.0) then
|
|
||||||
id2=iaptype+2
|
|
||||||
! print*,'B dec2 ',ibw,irc,id2,decoded
|
|
||||||
go to 100
|
|
||||||
endif
|
|
||||||
enddo ! ibw (b90 loop)
|
enddo ! ibw (b90 loop)
|
||||||
enddo ! idt (DT loop)
|
enddo ! idt (DT loop)
|
||||||
enddo ! idf (f0 loop)
|
enddo ! idf (f0 loop)
|
||||||
|
|
||||||
100 if(irc.ge.0) then
|
100 if(irc.ge.0) then
|
||||||
|
idec=iaptype+2
|
||||||
snr2=esnodb - db(2500.0/baud)
|
snr2=esnodb - db(2500.0/baud)
|
||||||
xdt1=xdt0 + nsps*ndt/(16.0*6000.0)
|
xdt1=xdt0 + nsps*ndt/(16.0*6000.0)
|
||||||
f1=f0 + 0.5*baud*ndf
|
f1=f0 + 0.5*baud*ndf
|
||||||
|
@ -250,7 +250,7 @@ subroutine q65_sync(nutc,iwave,ntrperiod,mode_q65,codewords,ncw,nsps, &
|
|||||||
enddo
|
enddo
|
||||||
! write(*,3002) 'B',xdt,f0,sum(s3)
|
! write(*,3002) 'B',xdt,f0,sum(s3)
|
||||||
!3002 format(a1,f7.2,2f8.1)
|
!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
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -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 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(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 {
|
} else {
|
||||||
if((abs(audioFreq - m_wideGraph->rxFreq()) <= 10) and
|
if((abs(audioFreq - m_wideGraph->rxFreq()) <= 10) and
|
||||||
!m_config.enable_VHF_features()) bDisplayRight=true;
|
!m_config.enable_VHF_features()) bDisplayRight=true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user