mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-02-03 09:44:24 -05:00
Working toward wideband decoding for Q65.
This commit is contained in:
parent
cd978bae4e
commit
af6d406aeb
@ -1,6 +1,5 @@
|
|||||||
set (libm65_FSRCS
|
set (libm65_FSRCS
|
||||||
# Modules come first:
|
# Modules come first:
|
||||||
wideband_sync.f90
|
|
||||||
wideband2_sync.f90
|
wideband2_sync.f90
|
||||||
|
|
||||||
# Non-module Fortran routines:
|
# Non-module Fortran routines:
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
subroutine decode0(dd,ss,savg,nstandalone)
|
subroutine decode0(dd,ss,savg,nstandalone)
|
||||||
|
|
||||||
use wideband_sync
|
|
||||||
use timer_module, only: timer
|
use timer_module, only: timer
|
||||||
parameter (NSMAX=60*96000)
|
parameter (NSMAX=60*96000)
|
||||||
|
|
||||||
@ -23,12 +22,6 @@ subroutine decode0(dd,ss,savg,nstandalone)
|
|||||||
! npol=1 + 3*nxpol
|
! npol=1 + 3*nxpol
|
||||||
! write(50) nutc,npol,ss(1:npol,:,:),savg(1:npol,:)
|
! write(50) nutc,npol,ss(1:npol,:,:),savg(1:npol,:)
|
||||||
!###
|
!###
|
||||||
|
|
||||||
nkhz_center=nint(1000.0*(fcenter-int(fcenter)))
|
|
||||||
ntone_spacing=2**(nmode/10)
|
|
||||||
call timer('wb_sync ',0)
|
|
||||||
call wb_sync(ss,savg,ntone_spacing)
|
|
||||||
call timer('wb_sync ',1)
|
|
||||||
|
|
||||||
if(newdat.ne.0) then
|
if(newdat.ne.0) then
|
||||||
nz=52*96000
|
nz=52*96000
|
||||||
|
@ -25,10 +25,10 @@ program m65
|
|||||||
! 27
|
! 27
|
||||||
! 28 fftw_wisdom.dat
|
! 28 fftw_wisdom.dat
|
||||||
|
|
||||||
use wideband_sync
|
|
||||||
use timer_module, only: timer
|
use timer_module, only: timer
|
||||||
use timer_impl, only: init_timer, fini_timer
|
use timer_impl, only: init_timer, fini_timer
|
||||||
|
|
||||||
|
parameter (NFFT=32768)
|
||||||
parameter (NSMAX=60*96000)
|
parameter (NSMAX=60*96000)
|
||||||
parameter (NREAD=2048)
|
parameter (NREAD=2048)
|
||||||
integer*2 i2(NREAD)
|
integer*2 i2(NREAD)
|
||||||
|
@ -5,7 +5,7 @@ subroutine map65a(dd,ss,savg,newdat,nutc,fcenter,ntol,idphi,nfa,nfb, &
|
|||||||
|
|
||||||
! Processes timf2 data from Linrad to find and decode JT65 signals.
|
! Processes timf2 data from Linrad to find and decode JT65 signals.
|
||||||
|
|
||||||
use wideband_sync
|
use wideband2_sync
|
||||||
use timer_module, only: timer
|
use timer_module, only: timer
|
||||||
|
|
||||||
parameter (MAXMSG=1000) !Size of decoded message list
|
parameter (MAXMSG=1000) !Size of decoded message list
|
||||||
@ -26,6 +26,8 @@ subroutine map65a(dd,ss,savg,newdat,nutc,fcenter,ntol,idphi,nfa,nfb, &
|
|||||||
character decoded*22,blank*22,cmode*2
|
character decoded*22,blank*22,cmode*2
|
||||||
real short(3,NFFT) !SNR dt ipol for potential shorthands
|
real short(3,NFFT) !SNR dt ipol for potential shorthands
|
||||||
real qphi(12)
|
real qphi(12)
|
||||||
|
type(candidate) :: cand(MAX_CANDIDATES)
|
||||||
|
|
||||||
common/c3com/ mcall3a
|
common/c3com/ mcall3a
|
||||||
common/testcom/ifreq
|
common/testcom/ifreq
|
||||||
|
|
||||||
@ -34,6 +36,21 @@ subroutine map65a(dd,ss,savg,newdat,nutc,fcenter,ntol,idphi,nfa,nfb, &
|
|||||||
data nfile/0/,nutc0/-999/,nid/0/,ip000/1/,ip001/1/,mousefqso0/-999/
|
data nfile/0/,nutc0/-999/,nid/0/,ip000/1/,ip001/1/,mousefqso0/-999/
|
||||||
save
|
save
|
||||||
|
|
||||||
|
nkhz_center=nint(1000.0*(fcenter-int(fcenter)))
|
||||||
|
ntone_spacing=2**(nmode/10)
|
||||||
|
call timer('wb_sync ',0)
|
||||||
|
! call wb_sync(ss,savg,ntone_spacing)
|
||||||
|
call timer('wb_sync ',1)
|
||||||
|
|
||||||
|
!###
|
||||||
|
mfa=nfa-nkhz_center+48
|
||||||
|
mfb=nfb-nkhz_center+48
|
||||||
|
nts_jt65=2
|
||||||
|
nts_q65=1
|
||||||
|
call get_candidates(ss,savg,mfa,mfb,nts_jt65,nts_q65,cand,ncand)
|
||||||
|
! print*,'AAA',nfa,nfb,ncand
|
||||||
|
!###
|
||||||
|
|
||||||
mode65=mod(nmode,10)
|
mode65=mod(nmode,10)
|
||||||
if(mode65.eq.3) mode65=4
|
if(mode65.eq.3) mode65=4
|
||||||
mode_q65=nmode/10
|
mode_q65=nmode/10
|
||||||
|
@ -10,7 +10,7 @@ subroutine q65b(nutc,fcenter,nfcal,nfsample,ikhz,mousedf,ntol,xpol, &
|
|||||||
|
|
||||||
! use wavhdr
|
! use wavhdr
|
||||||
use q65_decode
|
use q65_decode
|
||||||
use wideband_sync
|
use wideband2_sync
|
||||||
use timer_module, only: timer
|
use timer_module, only: timer
|
||||||
|
|
||||||
parameter (MAXFFT1=5376000) !56*96000
|
parameter (MAXFFT1=5376000) !56*96000
|
||||||
@ -46,13 +46,16 @@ subroutine q65b(nutc,fcenter,nfcal,nfsample,ikhz,mousedf,ntol,xpol, &
|
|||||||
ifreq=nint(1000.0*(ff-nkhz_center+48)/df3) !Freq index into ss(4,322,32768)
|
ifreq=nint(1000.0*(ff-nkhz_center+48)/df3) !Freq index into ss(4,322,32768)
|
||||||
ia=nint(ifreq-ntol/df3)
|
ia=nint(ifreq-ntol/df3)
|
||||||
ib=nint(ifreq+ntol/df3)
|
ib=nint(ifreq+ntol/df3)
|
||||||
ipk1=maxloc(sync_dat(ia:ib,2))
|
|
||||||
ipk=ia+ipk1(1)-1
|
|
||||||
ipol=1
|
|
||||||
if(xpol) ipol=nint(sync_dat(ipk,4))
|
|
||||||
nhz=nint((ipk-ifreq)*df3)
|
|
||||||
snr1=sync_dat(ipk,2)
|
|
||||||
|
|
||||||
|
!###
|
||||||
|
ipk1=maxloc(sync(ia:ib)%ccfmax)
|
||||||
|
ipk=ia+ipk1(1)-1
|
||||||
|
snr1=sync(ipk)%ccfmax
|
||||||
|
ipol=1
|
||||||
|
if(xpol) ipol=sync(ipk)%ipol
|
||||||
|
! print*,'BBB',ipk00,ipk,snr1,ipol
|
||||||
|
!###
|
||||||
|
|
||||||
nfft1=MAXFFT1
|
nfft1=MAXFFT1
|
||||||
nfft2=MAXFFT2
|
nfft2=MAXFFT2
|
||||||
df=96000.0/NFFT1
|
df=96000.0/NFFT1
|
||||||
|
@ -2,13 +2,12 @@ program synctest
|
|||||||
|
|
||||||
! Program to test an algorithm for detecting sync signals for both
|
! Program to test an algorithm for detecting sync signals for both
|
||||||
! JT65 and Q65-60x signals and rejecting birdies in MAP65 data.
|
! JT65 and Q65-60x signals and rejecting birdies in MAP65 data.
|
||||||
! The important work is done in module wideband_sync.
|
! The important work is done in module wideband2_sync.
|
||||||
|
|
||||||
use timer_module, only: timer
|
use timer_module, only: timer
|
||||||
use timer_impl, only: init_timer, fini_timer
|
use timer_impl, only: init_timer, fini_timer
|
||||||
use wideband2_sync
|
use wideband2_sync
|
||||||
parameter (NFFT=32768)
|
|
||||||
parameter (MAX_CANDIDATES=20)
|
|
||||||
real ss(4,322,NFFT),savg(4,NFFT)
|
real ss(4,322,NFFT),savg(4,NFFT)
|
||||||
! real candidate(MAX_CANDIDATES,5) !snr1,f0,xdt0,ipol,flip
|
! real candidate(MAX_CANDIDATES,5) !snr1,f0,xdt0,ipol,flip
|
||||||
character*8 arg
|
character*8 arg
|
||||||
|
@ -14,7 +14,12 @@ module wideband2_sync
|
|||||||
integer :: iflip
|
integer :: iflip
|
||||||
logical :: birdie
|
logical :: birdie
|
||||||
end type sync_dat
|
end type sync_dat
|
||||||
|
|
||||||
|
parameter (NFFT=32768)
|
||||||
|
parameter (MAX_CANDIDATES=20)
|
||||||
|
type(sync_dat) :: sync(NFFT)
|
||||||
|
integer nkhz_center
|
||||||
|
|
||||||
contains
|
contains
|
||||||
|
|
||||||
subroutine get_candidates(ss,savg,nfa,nfb,nts_jt65,nts_q65,cand,ncand)
|
subroutine get_candidates(ss,savg,nfa,nfb,nts_jt65,nts_q65,cand,ncand)
|
||||||
@ -24,21 +29,19 @@ subroutine get_candidates(ss,savg,nfa,nfb,nts_jt65,nts_q65,cand,ncand)
|
|||||||
! spacings: 1 2 4 8 16 for A B C D E. Birdies are detected and
|
! spacings: 1 2 4 8 16 for A B C D E. Birdies are detected and
|
||||||
! excised. Candidates are returned in the structure array cand().
|
! excised. Candidates are returned in the structure array cand().
|
||||||
|
|
||||||
parameter (NFFT=32768)
|
parameter (MAX_PEAKS=300)
|
||||||
parameter (MAX_PEAKS=300,MAX_CANDIDATES=20)
|
|
||||||
real ss(4,322,NFFT),savg(4,NFFT)
|
real ss(4,322,NFFT),savg(4,NFFT)
|
||||||
real pavg(-20:20)
|
real pavg(-20:20)
|
||||||
integer indx(NFFT)
|
integer indx(NFFT)
|
||||||
logical skip
|
logical skip
|
||||||
type(candidate) :: cand(MAX_CANDIDATES)
|
type(candidate) :: cand(MAX_CANDIDATES)
|
||||||
type(sync_dat) :: sync(NFFT)
|
|
||||||
|
|
||||||
do j=322,1,-1 !Find end of data in ss()
|
do j=322,1,-1 !Find end of data in ss()
|
||||||
if(sum(ss(1,j,1:NFFT)).gt.0.0) exit
|
if(sum(ss(1,j,1:NFFT)).gt.0.0) exit
|
||||||
enddo
|
enddo
|
||||||
jz=j
|
jz=j
|
||||||
|
|
||||||
call wb2_sync(ss,savg,jz,nfa,nfb,sync)
|
call wb2_sync(ss,savg,jz,nfa,nfb)
|
||||||
|
|
||||||
tstep=2048.0/11025.0 !0.185760 s: 0.5*tsym_jt65, 0.3096*tsym_q65
|
tstep=2048.0/11025.0 !0.185760 s: 0.5*tsym_jt65, 0.3096*tsym_q65
|
||||||
df3=96000.0/NFFT
|
df3=96000.0/NFFT
|
||||||
@ -101,7 +104,7 @@ call wb2_sync(ss,savg,jz,nfa,nfb,sync)
|
|||||||
return
|
return
|
||||||
end subroutine get_candidates
|
end subroutine get_candidates
|
||||||
|
|
||||||
subroutine wb2_sync(ss,savg,jz,nfa,nfb,sync)
|
subroutine wb2_sync(ss,savg,jz,nfa,nfb)
|
||||||
|
|
||||||
! Compute "orange sync curve" using the Q65 sync pattern
|
! Compute "orange sync curve" using the Q65 sync pattern
|
||||||
|
|
||||||
@ -113,7 +116,6 @@ subroutine wb2_sync(ss,savg,jz,nfa,nfb,sync)
|
|||||||
logical first
|
logical first
|
||||||
integer isync(22)
|
integer isync(22)
|
||||||
integer jsync0(63),jsync1(63)
|
integer jsync0(63),jsync1(63)
|
||||||
type(sync_dat) :: sync(NFFT)
|
|
||||||
|
|
||||||
! Q65 sync symbols
|
! Q65 sync symbols
|
||||||
data isync/1,9,12,13,15,22,23,26,27,33,35,38,46,50,55,60,62,66,69,74,76,85/
|
data isync/1,9,12,13,15,22,23,26,27,33,35,38,46,50,55,60,62,66,69,74,76,85/
|
||||||
|
Loading…
Reference in New Issue
Block a user