mirror of https://github.com/saitohirga/WSJT-X.git
First fully working version of 'a7' (q3-style) decoding for FT8.
This commit is contained in:
parent
5a0cb0f0a0
commit
2b25c51169
|
@ -336,6 +336,7 @@ set (wsjt_FSRCS
|
||||||
lib/timer_module.f90
|
lib/timer_module.f90
|
||||||
lib/wavhdr.f90
|
lib/wavhdr.f90
|
||||||
lib/qra/q65/q65_encoding_modules.f90
|
lib/qra/q65/q65_encoding_modules.f90
|
||||||
|
lib/ft8_a7.f90
|
||||||
|
|
||||||
# remaining non-module sources
|
# remaining non-module sources
|
||||||
lib/addit.f90
|
lib/addit.f90
|
||||||
|
|
|
@ -104,13 +104,6 @@ subroutine ft8b(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,nzhsym,lapon, &
|
||||||
call timer('ft8_down',0)
|
call timer('ft8_down',0)
|
||||||
call ft8_downsample(dd0,newdat,f1,cd0) !Mix f1 to baseband and downsample
|
call ft8_downsample(dd0,newdat,f1,cd0) !Mix f1 to baseband and downsample
|
||||||
call timer('ft8_down',1)
|
call timer('ft8_down',1)
|
||||||
if(abs(nint(f1)-527).le.1) then
|
|
||||||
rewind(40)
|
|
||||||
do i=0,3199
|
|
||||||
write(40,3040) i,i/200.0,cd0(i)
|
|
||||||
3040 format(i5,f10.6,2x,2f10.3)
|
|
||||||
enddo
|
|
||||||
endif
|
|
||||||
|
|
||||||
i0=nint((xdt+0.5)*fs2) !Initial guess for start of signal
|
i0=nint((xdt+0.5)*fs2) !Initial guess for start of signal
|
||||||
smax=0.0
|
smax=0.0
|
||||||
|
|
|
@ -69,6 +69,14 @@ subroutine ft8q3(cd,xdt,f0,call_1,call_2,grid4,msgbest,snr)
|
||||||
! Generate complex cwave
|
! Generate complex cwave
|
||||||
call gen_ft8wave(itone,NN,NSPS,bt,fs,f0,cwave,xjunk,1,NWAVE)
|
call gen_ft8wave(itone,NN,NSPS,bt,fs,f0,cwave,xjunk,1,NWAVE)
|
||||||
|
|
||||||
|
if(imsg.eq.79) then
|
||||||
|
print*,NN,NSPS,bt,fs,f0,NWAVE,itone(1:7)
|
||||||
|
do i=0,NWAVE-1
|
||||||
|
write(45,3045) i,cd(i),100*cwave(i)
|
||||||
|
3045 format(i5,4e12.3)
|
||||||
|
enddo
|
||||||
|
endif
|
||||||
|
|
||||||
lagmax=-1
|
lagmax=-1
|
||||||
ccfmax=0.
|
ccfmax=0.
|
||||||
nsum=32*2
|
nsum=32*2
|
||||||
|
|
|
@ -38,6 +38,7 @@ contains
|
||||||
use iso_c_binding, only: c_bool, c_int
|
use iso_c_binding, only: c_bool, c_int
|
||||||
use timer_module, only: timer
|
use timer_module, only: timer
|
||||||
use shmem, only: shmem_lock, shmem_unlock
|
use shmem, only: shmem_lock, shmem_unlock
|
||||||
|
use ft8_a7
|
||||||
|
|
||||||
include 'ft8/ft8_params.f90'
|
include 'ft8/ft8_params.f90'
|
||||||
|
|
||||||
|
@ -64,13 +65,31 @@ contains
|
||||||
integer itone_save(NN,MAX_EARLY)
|
integer itone_save(NN,MAX_EARLY)
|
||||||
real f1_save(MAX_EARLY)
|
real f1_save(MAX_EARLY)
|
||||||
real xdt_save(MAX_EARLY)
|
real xdt_save(MAX_EARLY)
|
||||||
|
complex cd0(0:3199)
|
||||||
|
data nutc0/-1/
|
||||||
|
|
||||||
save s,dd,dd1,ndec_early,itone_save,f1_save,xdt_save,lsubtracted,allmessages
|
save s,dd,dd1,nutc0,ndec_early,itone_save,f1_save,xdt_save,lsubtracted,&
|
||||||
|
allmessages
|
||||||
|
|
||||||
this%callback => callback
|
this%callback => callback
|
||||||
write(datetime,1001) nutc !### TEMPORARY ###
|
write(datetime,1001) nutc !### TEMPORARY ###
|
||||||
1001 format("000000_",i6.6)
|
1001 format("000000_",i6.6)
|
||||||
|
|
||||||
|
if(nutc0.eq.-1) then
|
||||||
|
msg0=' '
|
||||||
|
endif
|
||||||
|
if(nutc.ne.nutc0) then
|
||||||
|
! New UTC. Move previously saved 'a7' data from k=1 to k=0
|
||||||
|
iz=ndec(jseq,1)
|
||||||
|
dt0(1:iz,jseq,0) = dt0(1:iz,jseq,1)
|
||||||
|
f0(1:iz,jseq,0) = f0(1:iz,jseq,1)
|
||||||
|
msg0(1:iz,jseq,0) = msg0(1:iz,jseq,1)
|
||||||
|
ndec(jseq,0)=iz
|
||||||
|
ndec(jseq,1)=0
|
||||||
|
nutc0=nutc
|
||||||
|
! print*,'BBB',jseq,ndec(0,0),ndec(0,1)
|
||||||
|
endif
|
||||||
|
|
||||||
if(ndepth.eq.1 .and. nzhsym.lt.50) then
|
if(ndepth.eq.1 .and. nzhsym.lt.50) then
|
||||||
ndec_early=0
|
ndec_early=0
|
||||||
return
|
return
|
||||||
|
@ -178,7 +197,7 @@ contains
|
||||||
hiscall12,f1,xdt,xbase,apsym2,aph10,nharderrors,dmin, &
|
hiscall12,f1,xdt,xbase,apsym2,aph10,nharderrors,dmin, &
|
||||||
nbadcrc,iappass,msg37,xsnr,itone)
|
nbadcrc,iappass,msg37,xsnr,itone)
|
||||||
call timer('ft8b ',1)
|
call timer('ft8b ',1)
|
||||||
nsnr=nint(xsnr)
|
nsnr=nint(xsnr)
|
||||||
xdt=xdt-0.5
|
xdt=xdt-0.5
|
||||||
hd=nharderrors+dmin
|
hd=nharderrors+dmin
|
||||||
if(nbadcrc.eq.0) then
|
if(nbadcrc.eq.0) then
|
||||||
|
@ -198,6 +217,7 @@ contains
|
||||||
qual=1.0-(nharderrors+dmin)/60.0 ! scale qual to [0.0,1.0]
|
qual=1.0-(nharderrors+dmin)/60.0 ! scale qual to [0.0,1.0]
|
||||||
if(emedelay.ne.0) xdt=xdt+2.0
|
if(emedelay.ne.0) xdt=xdt+2.0
|
||||||
call this%callback(sync,nsnr,xdt,f1,msg37,iaptype,qual)
|
call this%callback(sync,nsnr,xdt,f1,msg37,iaptype,qual)
|
||||||
|
call ft8_a7_save(nutc,xdt,f1,msg37)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
call timestamp(tsec,tseq,ctime)
|
call timestamp(tsec,tseq,ctime)
|
||||||
|
@ -209,7 +229,37 @@ contains
|
||||||
800 ndec_early=0
|
800 ndec_early=0
|
||||||
if(nzhsym.lt.50) ndec_early=ndecodes
|
if(nzhsym.lt.50) ndec_early=ndecodes
|
||||||
|
|
||||||
900 return
|
900 continue
|
||||||
|
! if(nzhsym.eq.50) print*,'AA0',jseq,ndec(0,0),ndec(0,1)
|
||||||
|
if(nzhsym.eq.50 .and. ndec(jseq,0).ge.1) then
|
||||||
|
call timer('ft8_dec7',0)
|
||||||
|
newdat=.true.
|
||||||
|
do i=1,ndec(jseq,0)
|
||||||
|
if(f0(i,jseq,0).eq.-99.0) exit
|
||||||
|
if(f0(i,jseq,0).eq.-98.0) cycle
|
||||||
|
! f0(i,jseq,0)=527
|
||||||
|
! msg0(i,jseq,0)='LX1KL OE6MDF'
|
||||||
|
! print*,'aa',i,jseq,newdat,f0(i,jseq,0),trim(msg0(i,jseq,0))
|
||||||
|
call ft8_downsample(dd,newdat,f0(i,jseq,0),cd0)
|
||||||
|
call ft8_dec7(cd0,dt0(i,jseq,0),f0(i,jseq,0),msg0(i,jseq,0),msg37,snr7)
|
||||||
|
if(snr7.gt.4.0) then
|
||||||
|
! print*,i,msg0(i,jseq,0)(1:22),msg37(1:22),snr7
|
||||||
|
if(associated(this%callback)) then
|
||||||
|
nsnr=nint(db(snr7)-24.0)
|
||||||
|
xdt=0.
|
||||||
|
f1=f0(i,jseq,0)
|
||||||
|
iaptype=7
|
||||||
|
qual=1.0
|
||||||
|
call this%callback(sync,nsnr,xdt,f1,msg37,iaptype,qual)
|
||||||
|
endif
|
||||||
|
|
||||||
|
endif
|
||||||
|
newdat=.false.
|
||||||
|
enddo
|
||||||
|
call timer('ft8_dec7',1)
|
||||||
|
endif
|
||||||
|
|
||||||
|
return
|
||||||
end subroutine decode
|
end subroutine decode
|
||||||
|
|
||||||
subroutine timestamp(tsec,tseq,ctime)
|
subroutine timestamp(tsec,tseq,ctime)
|
||||||
|
|
Loading…
Reference in New Issue