mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-25 13:48:42 -05:00
Correct several VHF/UHF/Microwave items on Rex's list. Specifically:
1. Allow display of JT65 single-line decodes when there is also an average decode. 5. Do not call JT4 deep search if Fano decode has succeeded. 7. Fix occasional Fortran error seen with the "#" (nflip=-1) sync. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6678 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
bd9d772c02
commit
f82ee7c4e3
@ -17,8 +17,8 @@ subroutine decode65b(s2,nflip,nadd,mode65,ntrials,naggressive,ndepth, &
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
call extract(s3,nadd,mode65,ntrials,naggressive,ndepth,mycall,hiscall, &
|
call extract(s3,nadd,mode65,ntrials,naggressive,ndepth,nflip,mycall, &
|
||||||
hisgrid,nexp_decode,ncount,nhist,decoded,ltext,nft,qual)
|
hiscall,hisgrid,nexp_decode,ncount,nhist,decoded,ltext,nft,qual)
|
||||||
|
|
||||||
! Suppress "birdie messages" and other garbage decodes:
|
! Suppress "birdie messages" and other garbage decodes:
|
||||||
if(decoded(1:7).eq.'000AAA ') ncount=-1
|
if(decoded(1:7).eq.'000AAA ') ncount=-1
|
||||||
|
@ -56,11 +56,11 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
|
|||||||
if(nfsample.eq.12000) call wav11(id2,jz,dd)
|
if(nfsample.eq.12000) call wav11(id2,jz,dd)
|
||||||
if(nfsample.eq.11025) dd(1:jz)=id2(1:jz)
|
if(nfsample.eq.11025) dd(1:jz)=id2(1:jz)
|
||||||
endif
|
endif
|
||||||
call my_jt4%decode(jt4_decoded,dd,jz,params%nutc,params%nfqso,params%ntol, &
|
call my_jt4%decode(jt4_decoded,dd,jz,params%nutc,params%nfqso, &
|
||||||
params%emedelay,params%dttol,logical(params%nagain),params%ndepth, &
|
params%ntol,params%emedelay,params%dttol,logical(params%nagain), &
|
||||||
logical (params%nclearave),params%minsync,params%minw,params%nsubmode, &
|
params%ndepth,logical(params%nclearave),params%minsync, &
|
||||||
params%mycall,params%hiscall,params%hisgrid,params%nlist,params%listutc, &
|
params%minw,params%nsubmode,params%mycall,params%hiscall, &
|
||||||
jt4_average)
|
params%hisgrid,params%nlist,params%listutc,jt4_average)
|
||||||
go to 800
|
go to 800
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -75,12 +75,12 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
|
|||||||
newdat65=params%newdat
|
newdat65=params%newdat
|
||||||
newdat9=params%newdat
|
newdat9=params%newdat
|
||||||
|
|
||||||
!$call omp_set_dynamic(.true.)
|
!$call omp_set_dynamic(.true.)
|
||||||
!$omp parallel sections num_threads(2) copyin(/timer_private/) shared(ndecoded) if(.true.) !iif() needed on Mac
|
!$omp parallel sections num_threads(2) copyin(/timer_private/) shared(ndecoded) if(.true.) !iif() needed on Mac
|
||||||
|
|
||||||
!$omp section
|
!$omp section
|
||||||
if(params%nmode.eq.65 .or. (params%nmode.eq.(65+9) .and. params%ntxmode.eq.65)) then
|
if(params%nmode.eq.65 .or. (params%nmode.eq.(65+9) .and. params%ntxmode.eq.65)) then
|
||||||
! We're in JT65 mode, or should do JT65 first
|
! We're in JT65 mode, or should do JT65 first
|
||||||
if(newdat65) dd(1:npts65)=id2(1:npts65)
|
if(newdat65) dd(1:npts65)=id2(1:npts65)
|
||||||
nf1=params%nfa
|
nf1=params%nfa
|
||||||
nf2=params%nfb
|
nf2=params%nfb
|
||||||
@ -94,7 +94,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
|
|||||||
call timer('jt65a ',1)
|
call timer('jt65a ',1)
|
||||||
|
|
||||||
else if(params%nmode.eq.9 .or. (params%nmode.eq.(65+9) .and. params%ntxmode.eq.9)) then
|
else if(params%nmode.eq.9 .or. (params%nmode.eq.(65+9) .and. params%ntxmode.eq.9)) then
|
||||||
! We're in JT9 mode, or should do JT9 first
|
! We're in JT9 mode, or should do JT9 first
|
||||||
call timer('decjt9 ',0)
|
call timer('decjt9 ',0)
|
||||||
call my_jt9%decode(jt9_decoded,ss,id2,params%nfqso, &
|
call my_jt9%decode(jt9_decoded,ss,id2,params%nfqso, &
|
||||||
newdat9,params%npts8,params%nfa,params%nfsplit,params%nfb, &
|
newdat9,params%npts8,params%nfa,params%nfsplit,params%nfb, &
|
||||||
@ -103,8 +103,8 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
|
|||||||
call timer('decjt9 ',1)
|
call timer('decjt9 ',1)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
!$omp section
|
!$omp section
|
||||||
if(params%nmode.eq.(65+9)) then !Do the other mode (we're in dual mode)
|
if(params%nmode.eq.(65+9)) then !Do the other mode (we're in dual mode)
|
||||||
if (params%ntxmode.eq.9) then
|
if (params%ntxmode.eq.9) then
|
||||||
if(newdat65) dd(1:npts65)=id2(1:npts65)
|
if(newdat65) dd(1:npts65)=id2(1:npts65)
|
||||||
nf1=params%nfa
|
nf1=params%nfa
|
||||||
@ -127,9 +127,9 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
|
|||||||
end if
|
end if
|
||||||
endif
|
endif
|
||||||
|
|
||||||
!$omp end parallel sections
|
!$omp end parallel sections
|
||||||
|
|
||||||
! JT65 is not yet producing info for nsynced, ndecoded.
|
! JT65 is not yet producing info for nsynced, ndecoded.
|
||||||
ndecoded = my_jt4%decoded + my_jt65%decoded + my_jt9%decoded
|
ndecoded = my_jt4%decoded + my_jt65%decoded + my_jt9%decoded
|
||||||
800 write(*,1010) nsynced,ndecoded
|
800 write(*,1010) nsynced,ndecoded
|
||||||
1010 format('<DecodeFinished>',2i4)
|
1010 format('<DecodeFinished>',2i4)
|
||||||
@ -159,18 +159,21 @@ contains
|
|||||||
|
|
||||||
character*2 :: cqual
|
character*2 :: cqual
|
||||||
|
|
||||||
|
write(*,3101) 'A',is_deep,is_average,qual,decoded
|
||||||
|
3101 format(a1,2L3,f6.1,1x,a22)
|
||||||
|
|
||||||
if (have_sync) then
|
if (have_sync) then
|
||||||
if (int(qual).gt.0) then
|
if (int(qual).gt.0) then
|
||||||
write(cqual, '(i2)') int(qual)
|
write(cqual, '(i2)') int(qual)
|
||||||
if (ave.gt.0) then
|
if (ave.gt.0) then
|
||||||
write(*,1000) params%nutc,snr,dt,freq,sync,decoded,cqual, &
|
write(*,1000) params%nutc,snr,dt,freq,sync,decoded,cqual, &
|
||||||
char(ichar('A')+ich-1), ave
|
char(ichar('A')+ich-1), ave
|
||||||
else
|
else
|
||||||
write(*,1000) params%nutc,snr,dt,freq,sync,decoded,cqual, &
|
write(*,1000) params%nutc,snr,dt,freq,sync,decoded,cqual, &
|
||||||
char(ichar('A')+ich-1)
|
char(ichar('A')+ich-1)
|
||||||
end if
|
end if
|
||||||
else
|
else
|
||||||
write(*,1000) params%nutc,snr,dt,freq,sync,decoded,' *', &
|
write(*,1000) params%nutc,snr,dt,freq,sync,decoded,' *', &
|
||||||
char(ichar('A')+ich-1)
|
char(ichar('A')+ich-1)
|
||||||
end if
|
end if
|
||||||
else
|
else
|
||||||
@ -229,12 +232,7 @@ contains
|
|||||||
data c/'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
|
data c/'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
|
||||||
|
|
||||||
!$omp critical(decode_results)
|
!$omp critical(decode_results)
|
||||||
! write(*,3301) ft,qual,nsmo,nsum,minsync,naggressive,sync !###
|
|
||||||
!3301 format('decoded.f90:',6i3,f5.1) !###
|
|
||||||
|
|
||||||
decoded=decoded0
|
decoded=decoded0
|
||||||
! fmt='(i4.4,i4,f5.1,i5,1x,a1,1x,a22,a5)'
|
|
||||||
! if(single_decode) fmt='(i4.4,i4,f5.1,i5,1x,a2,1x,a22,a5)'
|
|
||||||
if(ft.eq.0 .and. minsync.ge.0 .and. int(sync).lt.minsync) then
|
if(ft.eq.0 .and. minsync.ge.0 .and. int(sync).lt.minsync) then
|
||||||
write(*,1010) params%nutc,snr,dt,freq
|
write(*,1010) params%nutc,snr,dt,freq
|
||||||
else
|
else
|
||||||
@ -254,7 +252,9 @@ contains
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
csync='# '
|
csync='# '
|
||||||
if(single_decode .and. nflip.ne.0 .and. sync.ge.max(0.0,float(minsync))) then
|
i=0
|
||||||
|
if(single_decode .and. nflip.ne.0 .and. &
|
||||||
|
sync.ge.max(0.0,float(minsync))) then
|
||||||
csync='#*'
|
csync='#*'
|
||||||
if(nflip.eq.-1) then
|
if(nflip.eq.-1) then
|
||||||
csync='##'
|
csync='##'
|
||||||
@ -262,6 +262,8 @@ contains
|
|||||||
do i=22,1,-1
|
do i=22,1,-1
|
||||||
if(decoded(i:i).ne.' ') exit
|
if(decoded(i:i).ne.' ') exit
|
||||||
enddo
|
enddo
|
||||||
|
! write(*,*) 'C',i,decoded
|
||||||
|
if(i.gt.18) i=18
|
||||||
decoded(i+2:i+4)='OOO'
|
decoded(i+2:i+4)='OOO'
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
@ -270,7 +272,8 @@ contains
|
|||||||
1010 format(i4.4,i4,f5.1,i5,1x,a2,1x,a22,a5)
|
1010 format(i4.4,i4,f5.1,i5,1x,a2,1x,a22,a5)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
write(13,1012) params%nutc,nint(sync),snr,dt,float(freq),drift,decoded,ft,nsum,nsmo
|
write(13,1012) params%nutc,nint(sync),snr,dt,float(freq),drift, &
|
||||||
|
decoded,ft,nsum,nsmo
|
||||||
1012 format(i4.4,i4,i5,f6.2,f8.0,i4,3x,a22,' JT65',3i3)
|
1012 format(i4.4,i4,i5,f6.2,f8.0,i4,3x,a22,' JT65',3i3)
|
||||||
call flush(6)
|
call flush(6)
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
subroutine extract(s3,nadd,mode65,ntrials,naggressive,ndepth,mycall_12, &
|
subroutine extract(s3,nadd,mode65,ntrials,naggressive,ndepth,nflip, &
|
||||||
hiscall_12,hisgrid,nexp_decode,ncount,nhist,decoded,ltext,nft,qual)
|
mycall_12,hiscall_12,hisgrid,nexp_decode,ncount,nhist,decoded, &
|
||||||
|
ltext,nft,qual)
|
||||||
|
|
||||||
! Input:
|
! Input:
|
||||||
! s3 64-point spectra for each of 63 data symbols
|
! s3 64-point spectra for each of 63 data symbols
|
||||||
@ -91,10 +92,9 @@ subroutine extract(s3,nadd,mode65,ntrials,naggressive,ndepth,mycall_12, &
|
|||||||
if(ntotal.le.nd0 .and. rtt.le.r0) nft=1
|
if(ntotal.le.nd0 .and. rtt.le.r0) nft=1
|
||||||
|
|
||||||
if(nft.eq.0 .and. iand(ndepth,32).eq.32) then
|
if(nft.eq.0 .and. iand(ndepth,32).eq.32) then
|
||||||
flip=1.0
|
|
||||||
qmin=2.0 - 0.1*naggressive
|
qmin=2.0 - 0.1*naggressive
|
||||||
call timer('hint65 ',0)
|
call timer('hint65 ',0)
|
||||||
call hint65(s3,mrs,mrs2,mrsym,mr2sym,mrprob,nadd,flip, &
|
call hint65(s3,mrs,mrs2,mrsym,mr2sym,mrprob,nadd,nflip, &
|
||||||
mycall,hiscall,hisgrid,nexp_decode,qual,decoded)
|
mycall,hiscall,hisgrid,nexp_decode,qual,decoded)
|
||||||
if(qual.ge.qmin) then
|
if(qual.ge.qmin) then
|
||||||
nft=2
|
nft=2
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine hint65(s3,mrs,mrs2,mrsym,mr2sym,mrprob,nadd,flip, &
|
subroutine hint65(s3,mrs,mrs2,mrsym,mr2sym,mrprob,nadd,nflip, &
|
||||||
mycall,hiscall,hisgrid,nexp_decode,qual,decoded)
|
mycall,hiscall,hisgrid,nexp_decode,qual,decoded)
|
||||||
|
|
||||||
use packjt
|
use packjt
|
||||||
@ -65,7 +65,10 @@ subroutine hint65(s3,mrs,mrs2,mrsym,mr2sym,mrprob,nadd,flip, &
|
|||||||
grid2(j)=grid
|
grid2(j)=grid
|
||||||
enddo
|
enddo
|
||||||
10 ncalls=j
|
10 ncalls=j
|
||||||
if(ncalls.lt.10) stop 'CALL3.TXT very short or missing?'
|
if(ncalls.lt.10) then
|
||||||
|
write(*,1010) ncalls
|
||||||
|
1010 format('CALL3.TXT very short (N =',i2,') or missing?')
|
||||||
|
endif
|
||||||
close(23)
|
close(23)
|
||||||
|
|
||||||
! NB: generation of test messages is not yet complete!
|
! NB: generation of test messages is not yet complete!
|
||||||
@ -111,7 +114,6 @@ subroutine hint65(s3,mrs,mrs2,mrsym,mr2sym,mrprob,nadd,flip, &
|
|||||||
u1=0.
|
u1=0.
|
||||||
u1=-99.0
|
u1=-99.0
|
||||||
u2=u1
|
u2=u1
|
||||||
! dtotal=199.0
|
|
||||||
|
|
||||||
! Find u1 and u2 (best and second-best) codeword from a list, using
|
! Find u1 and u2 (best and second-best) codeword from a list, using
|
||||||
! a bank of matched filters on the symbol spectra s3(i,j).
|
! a bank of matched filters on the symbol spectra s3(i,j).
|
||||||
@ -119,9 +121,9 @@ subroutine hint65(s3,mrs,mrs2,mrsym,mr2sym,mrprob,nadd,flip, &
|
|||||||
ipk2=0
|
ipk2=0
|
||||||
msg00=' '
|
msg00=' '
|
||||||
do k=1,nused
|
do k=1,nused
|
||||||
if(k.ge.2 .and. k.le.64 .and. flip.lt.0.0) cycle
|
if(k.ge.2 .and. k.le.64 .and. nflip.lt.0) cycle
|
||||||
! Test all messages if flip=+1; skip the CQ messages if flip=-1.
|
! Test all messages if nflip=+1; skip the CQ messages if nflip=-1.
|
||||||
if(flip.gt.0.0 .or. msg0(k)(1:3).ne.'CQ ') then
|
if(nflip.gt.0 .or. msg0(k)(1:3).ne.'CQ ') then
|
||||||
psum=0.
|
psum=0.
|
||||||
ref=ref0
|
ref=ref0
|
||||||
do j=1,63
|
do j=1,63
|
||||||
@ -145,8 +147,6 @@ subroutine hint65(s3,mrs,mrs2,mrsym,mr2sym,mrprob,nadd,flip, &
|
|||||||
ipk2=k
|
ipk2=k
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
! write(91,3401) k,p,u1,u2,ipk,ipk2,msg0(k)
|
|
||||||
!3401 format(i6,3f9.3,2i6,2x,a22)
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
!### Just in case ???
|
!### Just in case ???
|
||||||
|
@ -240,6 +240,7 @@ contains
|
|||||||
! If this is a new minute or a new frequency, call avg4
|
! If this is a new minute or a new frequency, call avg4
|
||||||
if(.not. prtavg) then
|
if(.not. prtavg) then
|
||||||
if(nutc.ne.nutc0 .or. abs(nfreq-nfreq0).gt.ntol) then
|
if(nutc.ne.nutc0 .or. abs(nfreq-nfreq0).gt.ntol) then
|
||||||
|
! This is a new minute or a new frequency, so call avg4.
|
||||||
nutc0=nutc !Try decoding average
|
nutc0=nutc !Try decoding average
|
||||||
nfreq0=nfreq
|
nfreq0=nfreq
|
||||||
nsave=nsave+1
|
nsave=nsave+1
|
||||||
|
@ -8,9 +8,7 @@ module jt65_decode
|
|||||||
procedure :: decode
|
procedure :: decode
|
||||||
end type jt65_decoder
|
end type jt65_decoder
|
||||||
|
|
||||||
!
|
! Callback function to be called with each decode
|
||||||
! Callback function to be called with each decode
|
|
||||||
!
|
|
||||||
abstract interface
|
abstract interface
|
||||||
subroutine jt65_decode_callback(this,sync,snr,dt,freq,drift, &
|
subroutine jt65_decode_callback(this,sync,snr,dt,freq,drift, &
|
||||||
nflip,width,decoded,ft,qual,nsmo,nsum,minsync)
|
nflip,width,decoded,ft,qual,nsmo,nsum,minsync)
|
||||||
@ -41,7 +39,7 @@ contains
|
|||||||
ntol,nsubmode,minsync,nagain,n2pass,nrobust,ntrials,naggressive, &
|
ntol,nsubmode,minsync,nagain,n2pass,nrobust,ntrials,naggressive, &
|
||||||
ndepth,clearave,mycall,hiscall,hisgrid,nexp_decode)
|
ndepth,clearave,mycall,hiscall,hisgrid,nexp_decode)
|
||||||
|
|
||||||
! Process dd0() data to find and decode JT65 signals.
|
! Process dd0() data to find and decode JT65 signals.
|
||||||
|
|
||||||
use jt65_mod
|
use jt65_mod
|
||||||
use timer_module, only: timer
|
use timer_module, only: timer
|
||||||
@ -98,12 +96,12 @@ contains
|
|||||||
robust=nrobust
|
robust=nrobust
|
||||||
dd=dd0
|
dd=dd0
|
||||||
ndecoded=0
|
ndecoded=0
|
||||||
do ipass=1,n2pass ! 2-pass decoding loop
|
do ipass=1,n2pass !Two-pass decoding loop
|
||||||
first_time=.true.
|
first_time=.true.
|
||||||
if(ipass.eq.1) then !first-pass parameters
|
if(ipass.eq.1) then !First-pass parameters
|
||||||
thresh0=2.5
|
thresh0=2.5
|
||||||
nsubtract=1
|
nsubtract=1
|
||||||
elseif( ipass.eq.2 ) then !second-pass parameters
|
elseif( ipass.eq.2 ) then !Second-pass parameters
|
||||||
thresh0=2.5
|
thresh0=2.5
|
||||||
nsubtract=0
|
nsubtract=0
|
||||||
endif
|
endif
|
||||||
@ -133,12 +131,10 @@ contains
|
|||||||
amp=a(2)
|
amp=a(2)
|
||||||
f0=(a(3)+ia-1)*df
|
f0=(a(3)+ia-1)*df
|
||||||
width=a(4)*df
|
width=a(4)*df
|
||||||
! write(*,3001) baseline,amp,f0,width
|
|
||||||
!3001 format('A',4f10.3)
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
! robust = .false.: use float ccf. Only if ncand>50 fall back to robust (1-bit) ccf
|
! robust = .false.: use float ccf. Only if ncand>50 fall back to robust (1-bit) ccf
|
||||||
! robust = .true. : use only robust (1-bit) ccf
|
! robust = .true. : use only robust (1-bit) ccf
|
||||||
ncand=0
|
ncand=0
|
||||||
if(.not.robust) then
|
if(.not.robust) then
|
||||||
call timer('sync65 ',0)
|
call timer('sync65 ',0)
|
||||||
@ -164,7 +160,6 @@ contains
|
|||||||
endif
|
endif
|
||||||
nvec=ntrials
|
nvec=ntrials
|
||||||
if(ncand.gt.75) then
|
if(ncand.gt.75) then
|
||||||
! write(*,*) 'Pass ',ipass,' ncandidates too large ',ncand
|
|
||||||
nvec=100
|
nvec=100
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -205,24 +200,18 @@ contains
|
|||||||
decoded.eq.' ') nflip=0
|
decoded.eq.' ') nflip=0
|
||||||
if(nft.ne.0) nsum=1
|
if(nft.ne.0) nsum=1
|
||||||
|
|
||||||
! ncandidates=param(0)
|
|
||||||
nhard_min=param(1)
|
nhard_min=param(1)
|
||||||
! nsoft_min=param(2)
|
|
||||||
! nera_best=param(3)
|
|
||||||
nrtt1000=param(4)
|
nrtt1000=param(4)
|
||||||
ntotal_min=param(5)
|
ntotal_min=param(5)
|
||||||
! ntry=param(6)
|
|
||||||
! nq1000=param(7)
|
|
||||||
! npp1=param(8)
|
|
||||||
nsmo=param(9)
|
nsmo=param(9)
|
||||||
|
|
||||||
nfreq=nint(freq+a(1))
|
nfreq=nint(freq+a(1))
|
||||||
ndrift=nint(2.0*a(2))
|
ndrift=nint(2.0*a(2))
|
||||||
if(single_decode) then
|
if(single_decode) then
|
||||||
s2db=sync1 - 30.0 + db(width/3.3) !### VHF/UHF/microwave
|
s2db=sync1 - 30.0 + db(width/3.3) !### VHF/UHF/microwave
|
||||||
if(nspecial.gt.0) s2db=sync2
|
if(nspecial.gt.0) s2db=sync2
|
||||||
else
|
else
|
||||||
s2db=10.0*log10(sync2) - 35 !### empirical (HF)
|
s2db=10.0*log10(sync2) - 35 !### Empirical (HF)
|
||||||
endif
|
endif
|
||||||
nsnr=nint(s2db)
|
nsnr=nint(s2db)
|
||||||
if(nsnr.lt.-30) nsnr=-30
|
if(nsnr.lt.-30) nsnr=-30
|
||||||
@ -247,14 +236,13 @@ contains
|
|||||||
call this%callback(sync1,nsnr,dtx-1.0,nfreq,ndrift, &
|
call this%callback(sync1,nsnr,dtx-1.0,nfreq,ndrift, &
|
||||||
nflip,width,avemsg,nftt,nqave,nsmo,nsum,minsync)
|
nflip,width,avemsg,nftt,nqave,nsmo,nsum,minsync)
|
||||||
prtavg=.true.
|
prtavg=.true.
|
||||||
cycle
|
|
||||||
end if
|
end if
|
||||||
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if(nftt.eq.1) then
|
if(nftt.eq.1) then
|
||||||
nft=1
|
! nft=1
|
||||||
decoded=avemsg
|
decoded=avemsg
|
||||||
go to 5
|
go to 5
|
||||||
endif
|
endif
|
||||||
@ -267,11 +255,10 @@ contains
|
|||||||
if(rtt.gt.r0(n)) cycle
|
if(rtt.gt.r0(n)) cycle
|
||||||
endif
|
endif
|
||||||
|
|
||||||
5 continue
|
5 if(decoded.eq.decoded0 .and. abs(freq-freq0).lt. 3.0 .and. &
|
||||||
if(decoded.eq.decoded0 .and. abs(freq-freq0).lt. 3.0 .and. &
|
|
||||||
minsync.ge.0) cycle !Don't display dupes
|
minsync.ge.0) cycle !Don't display dupes
|
||||||
if(decoded.ne.' ' .or. minsync.lt.0) then
|
if(decoded.ne.' ' .or. minsync.lt.0) then
|
||||||
if( nsubtract .eq. 1 ) then
|
if(nsubtract.eq.1) then
|
||||||
call timer('subtr65 ',0)
|
call timer('subtr65 ',0)
|
||||||
call subtract65(dd,npts,freq,dtx)
|
call subtract65(dd,npts,freq,dtx)
|
||||||
call timer('subtr65 ',1)
|
call timer('subtr65 ',1)
|
||||||
@ -285,7 +272,7 @@ contains
|
|||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
if(ndupe.ne.1 .or. minsync.lt.0) then
|
if(ndupe.ne.1 .or. minsync.lt.0) then
|
||||||
if(ipass.eq.1) n65a=n65a + 1
|
if(ipass.eq.1) n65a=n65a + 1
|
||||||
if(ipass.eq.2) n65b=n65b + 1
|
if(ipass.eq.2) n65b=n65b + 1
|
||||||
ndecoded=ndecoded+1
|
ndecoded=ndecoded+1
|
||||||
@ -294,9 +281,10 @@ contains
|
|||||||
dec(ndecoded)%sync=sync2
|
dec(ndecoded)%sync=sync2
|
||||||
dec(ndecoded)%decoded=decoded
|
dec(ndecoded)%decoded=decoded
|
||||||
nqual=min(qual,9999.0)
|
nqual=min(qual,9999.0)
|
||||||
|
|
||||||
if (associated(this%callback)) then
|
if (associated(this%callback)) then
|
||||||
call this%callback(sync1,nsnr,dtx-1.0,nfreq,ndrift, &
|
call this%callback(sync1,nsnr,dtx-1.0,nfreq,ndrift, &
|
||||||
nflip,width,decoded,nft,nqual,nsmo,nsum,minsync)
|
nflip,width,decoded,nft,nqual,nsmo,1,minsync)
|
||||||
end if
|
end if
|
||||||
endif
|
endif
|
||||||
decoded0=decoded
|
decoded0=decoded
|
||||||
@ -447,7 +435,7 @@ contains
|
|||||||
enddo
|
enddo
|
||||||
|
|
||||||
nadd=nsum*ismo
|
nadd=nsum*ismo
|
||||||
call extract(s3c,nadd,mode65,ntrials,naggressive,ndepth,mycall, &
|
call extract(s3c,nadd,mode65,ntrials,naggressive,ndepth,nflip,mycall, &
|
||||||
hiscall,hisgrid,nexp_decode,ncount,nhist,avemsg,ltext,nftt,qual)
|
hiscall,hisgrid,nexp_decode,ncount,nhist,avemsg,ltext,nftt,qual)
|
||||||
if(nftt.eq.1) then
|
if(nftt.eq.1) then
|
||||||
nsmo=ismo
|
nsmo=ismo
|
||||||
|
@ -1,60 +0,0 @@
|
|||||||
subroutine s3avg(nsave,mode65,nutc,nhz,xdt,npol,ntol,s3,nsum,nkv,decoded)
|
|
||||||
|
|
||||||
! Save the current synchronized spectra, s3(64,63), for possible
|
|
||||||
! decoding of average.
|
|
||||||
|
|
||||||
real s3(64,63) !Synchronized spectra for 63 symbols
|
|
||||||
real s3a(64,63,64) !Saved spectra
|
|
||||||
real s3b(64,63) !Average spectra
|
|
||||||
integer iutc(64),ihz(64),ipol(64)
|
|
||||||
real dt(64)
|
|
||||||
character*22 decoded
|
|
||||||
logical ltext,first
|
|
||||||
data first/.true./
|
|
||||||
save
|
|
||||||
|
|
||||||
if(first) then
|
|
||||||
iutc=-1
|
|
||||||
ihz=0
|
|
||||||
ipol=0
|
|
||||||
first=.false.
|
|
||||||
ihzdiff=min(100,ntol)
|
|
||||||
dtdiff=0.2
|
|
||||||
endif
|
|
||||||
|
|
||||||
do i=1,64
|
|
||||||
if(nutc.eq.iutc(i) .and. abs(nhz-ihz(i)).lt.ihzdiff) then
|
|
||||||
nsave=mod(nsave-1+64,64)+1
|
|
||||||
go to 10
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
|
|
||||||
iutc(nsave)=nutc !Save UTC
|
|
||||||
ihz(nsave)=nhz !Save freq in Hz
|
|
||||||
ipol(nsave)=npol !Save pol
|
|
||||||
dt(nsave)=xdt !Save DT
|
|
||||||
s3a(1:64,1:63,nsave)=s3 !Save the spectra
|
|
||||||
|
|
||||||
10 s3b=0.
|
|
||||||
do i=1,64 !Accumulate avg spectra
|
|
||||||
if(iutc(i).lt.0) cycle
|
|
||||||
if(mod(iutc(i),2).ne.mod(nutc,2)) cycle !Use only same sequence
|
|
||||||
if(abs(nhz-ihz(i)).gt.ihzdiff) cycle !Freq must match
|
|
||||||
if(abs(xdt-dt(i)).gt.dtdiff) cycle !DT must match
|
|
||||||
s3b=s3b + s3a(1:64,1:63,i)
|
|
||||||
nsum=nsum+1
|
|
||||||
enddo
|
|
||||||
|
|
||||||
decoded=' '
|
|
||||||
if(nsum.ge.2) then !Try decoding the sverage
|
|
||||||
nadd=mode65*nsum
|
|
||||||
call extract(s3b,nadd,ncount,nhist,decoded,ltext) !Extract the message
|
|
||||||
nkv=nsum
|
|
||||||
if(ncount.lt.0) then
|
|
||||||
nkv=0
|
|
||||||
decoded=' '
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
return
|
|
||||||
end subroutine s3avg
|
|
Loading…
Reference in New Issue
Block a user