mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-25 05:38:46 -05:00
Merge branch 'feat-Q65-aircraft-scatter-AFC' into release-2.5.1
This commit is contained in:
commit
b9836fce9c
@ -76,6 +76,10 @@ contains
|
|||||||
complex, allocatable :: c00(:) !Analytic signal, 6000 Sa/s
|
complex, allocatable :: c00(:) !Analytic signal, 6000 Sa/s
|
||||||
complex, allocatable :: c0(:) !Analytic signal, 6000 Sa/s
|
complex, allocatable :: c0(:) !Analytic signal, 6000 Sa/s
|
||||||
|
|
||||||
|
!w3sz added
|
||||||
|
integer stageno
|
||||||
|
stageno=0
|
||||||
|
|
||||||
! Start by setting some parameters and allocating storage for large arrays
|
! Start by setting some parameters and allocating storage for large arrays
|
||||||
call sec0(0,tdecode)
|
call sec0(0,tdecode)
|
||||||
nfa=nfa0
|
nfa=nfa0
|
||||||
@ -155,7 +159,7 @@ contains
|
|||||||
! Call top-level routine in q65 module: establish sync and try for a
|
! Call top-level routine in q65 module: establish sync and try for a
|
||||||
! q3 or q0 decode.
|
! q3 or q0 decode.
|
||||||
call q65_dec0(iavg,nutc,iwave,ntrperiod,nfqso,ntol,ndepth,lclearave, &
|
call q65_dec0(iavg,nutc,iwave,ntrperiod,nfqso,ntol,ndepth,lclearave, &
|
||||||
emedelay,xdt,f0,snr1,width,dat4,snr2,idec)
|
emedelay,xdt,f0,snr1,width,dat4,snr2,idec,stageno)
|
||||||
call timer('q65_dec0',1)
|
call timer('q65_dec0',1)
|
||||||
! write(*,3001) '=a',sum(abs(float(iwave))),nfqso,ntol,ndepth,xdt,f0,idec
|
! write(*,3001) '=a',sum(abs(float(iwave))),nfqso,ntol,ndepth,xdt,f0,idec
|
||||||
!3001 format(a2,f15.0,3i5,f7.2,f7.1,i5)
|
!3001 format(a2,f15.0,3i5,f7.2,f7.1,i5)
|
||||||
@ -212,7 +216,7 @@ contains
|
|||||||
! decode, this time using the cumulative 's1a' symbol spectra.
|
! decode, this time using the cumulative 's1a' symbol spectra.
|
||||||
iavg=1
|
iavg=1
|
||||||
call q65_dec0(iavg,nutc,iwave,ntrperiod,nfqso,ntol,ndepth,lclearave, &
|
call q65_dec0(iavg,nutc,iwave,ntrperiod,nfqso,ntol,ndepth,lclearave, &
|
||||||
emedelay,xdt,f0,snr1,width,dat4,snr2,idec)
|
emedelay,xdt,f0,snr1,width,dat4,snr2,idec,stageno)
|
||||||
call timer('list_avg',1)
|
call timer('list_avg',1)
|
||||||
|
|
||||||
if(idec.ge.0) then
|
if(idec.ge.0) then
|
||||||
@ -229,7 +233,7 @@ contains
|
|||||||
call timer('q65_avg ',0)
|
call timer('q65_avg ',0)
|
||||||
iavg=2
|
iavg=2
|
||||||
call q65_dec0(iavg,nutc,iwave,ntrperiod,nfqso,ntol,ndepth,lclearave, &
|
call q65_dec0(iavg,nutc,iwave,ntrperiod,nfqso,ntol,ndepth,lclearave, &
|
||||||
emedelay,xdt,f0,snr1,width,dat4,snr2,idec)
|
emedelay,xdt,f0,snr1,width,dat4,snr2,idec,stageno)
|
||||||
call timer('q65_avg ',1)
|
call timer('q65_avg ',1)
|
||||||
if(idec.ge.0) then
|
if(idec.ge.0) then
|
||||||
dtdec=xdt !We have a q[012]n result
|
dtdec=xdt !We have a q[012]n result
|
||||||
@ -237,7 +241,22 @@ contains
|
|||||||
nused=navg(iseq)
|
nused=navg(iseq)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
100 decoded=' '
|
100 stageno = 5
|
||||||
|
|
||||||
|
if(idec.lt.0) then
|
||||||
|
call timer('q65_dec0',0)
|
||||||
|
! Call top-level routine in q65 module: establish sync and try for a
|
||||||
|
! q3 or q0 decode.
|
||||||
|
call q65_dec0(iavg,nutc,iwave,ntrperiod,nfqso,ntol,ndepth,lclearave, &
|
||||||
|
emedelay,xdt,f0,snr1,width,dat4,snr2,idec,stageno)
|
||||||
|
call timer('q65_dec0',1)
|
||||||
|
if(idec.ge.0) then
|
||||||
|
dtdec=xdt !We have a q[012]n result
|
||||||
|
f0dec=f0
|
||||||
|
endif
|
||||||
|
endif ! if(idec.lt.0)
|
||||||
|
|
||||||
|
decoded=' '
|
||||||
if(idec.ge.0) then
|
if(idec.ge.0) then
|
||||||
! idec Meaning
|
! idec Meaning
|
||||||
! ------------------------------------------------------
|
! ------------------------------------------------------
|
||||||
|
@ -19,6 +19,7 @@ module q65
|
|||||||
real candidates(20,3) !snr, xdt, and f0 of top candidates
|
real candidates(20,3) !snr, xdt, and f0 of top candidates
|
||||||
real, allocatable :: s1raw(:,:) !Symbol spectra, 1/8-symbol steps
|
real, allocatable :: s1raw(:,:) !Symbol spectra, 1/8-symbol steps
|
||||||
real, allocatable :: s1(:,:) !Symbol spectra w/suppressed peaks
|
real, allocatable :: s1(:,:) !Symbol spectra w/suppressed peaks
|
||||||
|
real, allocatable :: s1w(:,:) !Symbol spectra w/suppressed peaks !w3sz added
|
||||||
real, allocatable,save :: s1a(:,:,:) !Cumulative symbol spectra
|
real, allocatable,save :: s1a(:,:,:) !Cumulative symbol spectra
|
||||||
real, allocatable,save :: ccf2(:) !Max CCF(freq) at any lag, single seq
|
real, allocatable,save :: ccf2(:) !Max CCF(freq) at any lag, single seq
|
||||||
real, allocatable,save :: ccf2_avg(:) !Like ccf2, but for accumulated average
|
real, allocatable,save :: ccf2_avg(:) !Like ccf2, but for accumulated average
|
||||||
@ -28,7 +29,7 @@ module q65
|
|||||||
contains
|
contains
|
||||||
|
|
||||||
subroutine q65_dec0(iavg,nutc,iwave,ntrperiod,nfqso,ntol,ndepth,lclearave, &
|
subroutine q65_dec0(iavg,nutc,iwave,ntrperiod,nfqso,ntol,ndepth,lclearave, &
|
||||||
emedelay,xdt,f0,snr1,width,dat4,snr2,idec)
|
emedelay,xdt,f0,snr1,width,dat4,snr2,idec,stageno)
|
||||||
|
|
||||||
! Top-level routine in q65 module
|
! Top-level routine in q65 module
|
||||||
! - Compute symbol spectra
|
! - Compute symbol spectra
|
||||||
@ -69,6 +70,11 @@ subroutine q65_dec0(iavg,nutc,iwave,ntrperiod,nfqso,ntol,ndepth,lclearave, &
|
|||||||
data first/.true./
|
data first/.true./
|
||||||
save first
|
save first
|
||||||
|
|
||||||
|
integer w3t
|
||||||
|
integer w3f
|
||||||
|
integer mm
|
||||||
|
integer stageno
|
||||||
|
|
||||||
NN=63
|
NN=63
|
||||||
if(nutc+ndepth.eq.-999) stop !Silence compiler warnings
|
if(nutc+ndepth.eq.-999) stop !Silence compiler warnings
|
||||||
|
|
||||||
@ -222,7 +228,49 @@ subroutine q65_dec0(iavg,nutc,iwave,ntrperiod,nfqso,ntol,ndepth,lclearave, &
|
|||||||
call q65_dec_q012(s3,LL,snr2,dat4,idec,decoded)
|
call q65_dec_q012(s3,LL,snr2,dat4,idec,decoded)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
900 return
|
if(idec.lt.0 .and. max_drift.eq.50 .and. stageno.eq.5) then
|
||||||
|
|
||||||
|
if(allocated(s1w)) deallocate(s1w) ! w3sz
|
||||||
|
allocate(s1w(iz,jz)) ! w3sz
|
||||||
|
|
||||||
|
s1w=s1
|
||||||
|
do w3t=1,jz
|
||||||
|
do w3f=1,iz
|
||||||
|
mm=w3f + nint(drift*w3t/(jz*df))
|
||||||
|
if(mm.ge.1 .and. mm.le.iz) then
|
||||||
|
s1w(w3f,w3t)=s1(mm,w3t)
|
||||||
|
endif
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
|
if(ncw.gt.0 .and. iavg.le.1) then
|
||||||
|
! Try list decoding via "Deep Likelihood".
|
||||||
|
call timer('ccf_85 ',0)
|
||||||
|
! Try to synchronize using all 85 symbols
|
||||||
|
call q65_ccf_85(s1w,iz,jz,nfqso,ia,ia2,ipk,jpk,f0,xdt,imsg_best, &
|
||||||
|
better,ccf1)
|
||||||
|
call timer('ccf_85 ',1)
|
||||||
|
! nsubmode is Tone-spacing indicator, 0-4 for A-E: a 0; b 1; c 2; d 3; e 4.
|
||||||
|
! and mode_q65=2**nsubmode
|
||||||
|
if(better.ge.1.10) then
|
||||||
|
! if(better.ge.1.04 .or. mode_q65.ge.8) then
|
||||||
|
! if(better.ge.1.10 .or. mode_q65.ge.8) then ORIGINAL
|
||||||
|
call timer('list_dec',0)
|
||||||
|
call q65_dec_q3(s1w,iz,jz,s3,LL,ipk,jpk,snr2,dat4,idec,decoded)
|
||||||
|
call timer('list_dec',1)
|
||||||
|
! if(idec.ge.0) write(70,3070) idec,mode_q65,better,trim(decoded)
|
||||||
|
!3070 format(i3,i5,f8.2,2x,a)
|
||||||
|
endif ! if(better.ge.1.10)
|
||||||
|
endif ! if(ncw.gt.0 .and. iavg.le.1)
|
||||||
|
! If idec=3 we have a q3 decode. Continue to compute sync curve for plotting.
|
||||||
|
|
||||||
|
if(idec.eq.3) then
|
||||||
|
idec=5
|
||||||
|
endif
|
||||||
|
|
||||||
|
endif ! if(idec.lt.0 .and. maxdrift.eq.50 .and. stageno.eq.5)
|
||||||
|
|
||||||
|
return
|
||||||
end subroutine q65_dec0
|
end subroutine q65_dec0
|
||||||
|
|
||||||
subroutine q65_clravg
|
subroutine q65_clravg
|
||||||
|
Loading…
Reference in New Issue
Block a user