mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-09-27 07:36:38 -04:00
Speed improvements for Q65 multi-decode.
This commit is contained in:
parent
7d069c5617
commit
5850317de0
@ -60,7 +60,8 @@ contains
|
|||||||
character*77 c77
|
character*77 c77
|
||||||
character*78 c78
|
character*78 c78
|
||||||
character*6 cutc
|
character*6 cutc
|
||||||
character c6*6,c4*4
|
character c6*6,c4*4,cmode*4
|
||||||
|
character*80 fmt
|
||||||
integer*2 iwave(NMAX) !Raw data
|
integer*2 iwave(NMAX) !Raw data
|
||||||
real, allocatable :: dd(:) !Raw data
|
real, allocatable :: dd(:) !Raw data
|
||||||
integer dat4(13) !Decoded message as 12 6-bit integers
|
integer dat4(13) !Decoded message as 12 6-bit integers
|
||||||
@ -113,9 +114,12 @@ contains
|
|||||||
baud=12000.0/nsps
|
baud=12000.0/nsps
|
||||||
this%callback => callback
|
this%callback => callback
|
||||||
nFadingModel=1
|
nFadingModel=1
|
||||||
|
ibwa=max(1,int(1.8*log(baud*mode_q65)) + 1)
|
||||||
|
ibwb=min(10,ibwa+3)
|
||||||
|
if(iand(ndepth,3).ge.2) then
|
||||||
ibwa=max(1,int(1.8*log(baud*mode_q65)) + 2)
|
ibwa=max(1,int(1.8*log(baud*mode_q65)) + 2)
|
||||||
ibwb=min(10,ibwa+5)
|
ibwb=min(10,ibwa+5)
|
||||||
if(iand(ndepth,3).eq.3) then
|
else if(iand(ndepth,3).eq.3) then
|
||||||
ibwa=max(1,ibwa-1)
|
ibwa=max(1,ibwa-1)
|
||||||
ibwb=min(10,ibwb+1)
|
ibwb=min(10,ibwb+1)
|
||||||
endif
|
endif
|
||||||
@ -233,21 +237,18 @@ contains
|
|||||||
position='append',iostat=ios)
|
position='append',iostat=ios)
|
||||||
if(ios.eq.0) then
|
if(ios.eq.0) then
|
||||||
! Save decoding parameters to q65_decoded.dat, for later analysis.
|
! Save decoding parameters to q65_decoded.dat, for later analysis.
|
||||||
|
write(cmode,'(i3)') ntrperiod
|
||||||
|
cmode(4:4)=char(ichar('A')+nsubmode)
|
||||||
c6=hiscall(1:6)
|
c6=hiscall(1:6)
|
||||||
if(c6.eq.' ') c6='<b> '
|
if(c6.eq.' ') c6='<b> '
|
||||||
c4=hisgrid(1:4)
|
c4=hisgrid(1:4)
|
||||||
if(c4.eq.' ') c4='<b> '
|
if(c4.eq.' ') c4='<b> '
|
||||||
if(ntrperiod.ge.60) then
|
fmt='(i6.4,1x,a4,5i2,3i3,f6.2,f7.1,f7.2,f6.1,f6.2,'// &
|
||||||
write(22,1022) nutc,ntrperiod,nsubmode,nQSOprogress,idec, &
|
'1x,a6,1x,a6,1x,a4,1x,a)'
|
||||||
nused,iaptype,irc,idf,idt,ibw,xdt,f0,snr1,snr2, &
|
if(ntrperiod.le.30) fmt(5:5)='6'
|
||||||
tdecode,mycall(1:6),c6,c4,trim(decoded)
|
write(22,fmt) nutc,cmode,nQSOprogress,idec,idf,idt,ibw,nused, &
|
||||||
1022 format(i6.4,10i3,f6.2,f7.1,f7.2,f6.1,f6.2,1x,a6,1x,a6,1x,a4,1x,a)
|
icand,ncand,xdt,f0,snr1,snr2,tdecode,mycall(1:6),c6,c4, &
|
||||||
else
|
trim(decoded)
|
||||||
write(22,1023) nutc,ntrperiod,nsubmode,nQSOprogress,idec, &
|
|
||||||
nused,iaptype,irc,idf,idt,ibw,xdt,f0,snr1,snr2, &
|
|
||||||
tdecode,mycall(1:6),c6,c4,trim(decoded)
|
|
||||||
1023 format(i6.6,10i3,f6.2,f7.1,f7.2,f6.1,f6.2,1x,a6,1x,a6,1x,a4,1x,a)
|
|
||||||
endif
|
|
||||||
close(22)
|
close(22)
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
@ -315,19 +316,18 @@ contains
|
|||||||
position='append',iostat=ios)
|
position='append',iostat=ios)
|
||||||
if(ios.eq.0) then
|
if(ios.eq.0) then
|
||||||
! Save decoding parameters to q65_decoded.dat, for later analysis.
|
! Save decoding parameters to q65_decoded.dat, for later analysis.
|
||||||
|
write(cmode,'(i3)') ntrperiod
|
||||||
|
cmode(4:4)=char(ichar('A')+nsubmode)
|
||||||
c6=hiscall(1:6)
|
c6=hiscall(1:6)
|
||||||
if(c6.eq.' ') c6='<b> '
|
if(c6.eq.' ') c6='<b> '
|
||||||
c4=hisgrid(1:4)
|
c4=hisgrid(1:4)
|
||||||
if(c4.eq.' ') c4='<b> '
|
if(c4.eq.' ') c4='<b> '
|
||||||
if(ntrperiod.ge.60) then
|
fmt='(i6.4,1x,a4,5i2,3i3,f6.2,f7.1,f7.2,f6.1,f6.2,'// &
|
||||||
write(22,1022) nutc,ntrperiod,nsubmode,nQSOprogress,idec, &
|
'1x,a6,1x,a6,1x,a4,1x,a)'
|
||||||
nused,iaptype,irc,idf,idt,ibw,xdt,f0,snr1,snr2, &
|
if(ntrperiod.le.30) fmt(5:5)='6'
|
||||||
tdecode,mycall(1:6),c6,c4,trim(decoded)
|
write(22,fmt) nutc,cmode,nQSOprogress,idec,idf,idt,ibw,nused, &
|
||||||
else
|
icand,ncand,xdt,f0,snr1,snr2,tdecode,mycall(1:6),c6,c4, &
|
||||||
write(22,1023) nutc,ntrperiod,nsubmode,nQSOprogress,idec, &
|
trim(decoded)
|
||||||
nused,iaptype,irc,idf,idt,ibw,xdt,f0,snr1,snr2, &
|
|
||||||
tdecode,mycall(1:6),c6,c4,trim(decoded)
|
|
||||||
endif
|
|
||||||
close(22)
|
close(22)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
@ -443,17 +443,21 @@ subroutine q65_ccf_22(s1,iz,jz,nfqso,ipk,jpk,f0,xdt,ccf2)
|
|||||||
ccf2=ccf2/base
|
ccf2=ccf2/base
|
||||||
call indexx(ccf2(i1:i2),jzz,indx)
|
call indexx(ccf2(i1:i2),jzz,indx)
|
||||||
ncand=0
|
ncand=0
|
||||||
|
maxcand=20
|
||||||
do j=1,20
|
do j=1,20
|
||||||
i=indx(jzz-j+1)+i1-1
|
i=indx(jzz-j+1)+i1-1
|
||||||
if(ccf2(i).lt.3.0) exit
|
if(ccf2(i).lt.3.4) exit !Candidate limit
|
||||||
f=i*df
|
f=i*df
|
||||||
if(f.ge.(nfqso-ftol) .and. f.le.(nfqso+ftol)) cycle
|
if(f.ge.(nfqso-ftol) .and. f.le.(nfqso+ftol)) cycle
|
||||||
biggest=maxval(ccf2(i-3:i+3))
|
i3=i-67*mode_q65
|
||||||
|
i4=i+3*mode_q65
|
||||||
|
biggest=maxval(ccf2(i3:i4))
|
||||||
if(ccf2(i).ne.biggest) cycle
|
if(ccf2(i).ne.biggest) cycle
|
||||||
ncand=ncand+1
|
ncand=ncand+1
|
||||||
candidates(ncand,1)=ccf2(i)
|
candidates(ncand,1)=ccf2(i)
|
||||||
candidates(ncand,2)=xdt2(i)
|
candidates(ncand,2)=xdt2(i)
|
||||||
candidates(ncand,3)=f
|
candidates(ncand,3)=f
|
||||||
|
if(ncand.ge.maxcand) exit
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
return
|
return
|
||||||
|
Loading…
Reference in New Issue
Block a user