mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-16 09:01:59 -05:00
New scheme for finding candidates. Speed up sync. Improved SNR calibration.
This commit is contained in:
parent
40fd3f6551
commit
91e3dbdf20
@ -78,7 +78,7 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, &
|
|||||||
ndecodes=0
|
ndecodes=0
|
||||||
do icand=1,ncand
|
do icand=1,ncand
|
||||||
f0=candidate(1,icand)
|
f0=candidate(1,icand)
|
||||||
xsnr=10*log10(candidate(3,icand))-18.0
|
snr=candidate(3,icand)-1.0
|
||||||
if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle
|
if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle
|
||||||
call clockit('ft4_down',0)
|
call clockit('ft4_down',0)
|
||||||
call ft4_downsample(iwave,f0,cd2) !Downsample from 512 to 32 Sa/Symbol
|
call ft4_downsample(iwave,f0,cd2) !Downsample from 512 to 32 Sa/Symbol
|
||||||
@ -89,15 +89,15 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, &
|
|||||||
! Sample rate is now 12000/16 = 750 samples/second
|
! Sample rate is now 12000/16 = 750 samples/second
|
||||||
do isync=1,2
|
do isync=1,2
|
||||||
if(isync.eq.1) then
|
if(isync.eq.1) then
|
||||||
idfmin=-50
|
idfmin=-12
|
||||||
idfmax=50
|
idfmax=12
|
||||||
idfstp=3
|
idfstp=3
|
||||||
ibmin=0
|
ibmin=0
|
||||||
ibmax=374
|
ibmax=374
|
||||||
ibstp=4
|
ibstp=4
|
||||||
else
|
else
|
||||||
idfmin=idfbest-5
|
idfmin=idfbest-4
|
||||||
idfmax=idfbest+5
|
idfmax=idfbest+4
|
||||||
idfstp=1
|
idfstp=1
|
||||||
ibmin=max(0,ibest-5)
|
ibmin=max(0,ibest-5)
|
||||||
ibmax=min(ibest+5,NMAX/NDOWN-1)
|
ibmax=min(ibest+5,NMAX/NDOWN-1)
|
||||||
@ -265,6 +265,11 @@ subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, &
|
|||||||
if(idupe.eq.1) exit
|
if(idupe.eq.1) exit
|
||||||
ndecodes=ndecodes+1
|
ndecodes=ndecodes+1
|
||||||
decodes(ndecodes)=message
|
decodes(ndecodes)=message
|
||||||
|
if(snr.gt.0.0) then
|
||||||
|
xsnr=10*log10(snr)-14.0
|
||||||
|
else
|
||||||
|
xsnr=-18.0
|
||||||
|
endif
|
||||||
nsnr=nint(xsnr)
|
nsnr=nint(xsnr)
|
||||||
freq=f0
|
freq=f0
|
||||||
tsig=mod(tbuf + ibest/750.0,100.0)
|
tsig=mod(tbuf + ibest/750.0,100.0)
|
||||||
|
@ -11,6 +11,6 @@ parameter (NZ=NSPS*NN) !Sync and Data samples (52736)
|
|||||||
parameter (NZ2=NSPS*NN2) !Total samples in shaped waveform (53760)
|
parameter (NZ2=NSPS*NN2) !Total samples in shaped waveform (53760)
|
||||||
parameter (NMAX=5*12000) !Samples in iwave (60,000)
|
parameter (NMAX=5*12000) !Samples in iwave (60,000)
|
||||||
parameter (NFFT1=2048, NH1=NFFT1/2) !Length of FFTs for symbol spectra
|
parameter (NFFT1=2048, NH1=NFFT1/2) !Length of FFTs for symbol spectra
|
||||||
parameter (NSTEP=NSPS/4) !Coarse time-sync step size
|
parameter (NSTEP=NSPS) !Coarse time-sync step size
|
||||||
parameter (NHSYM=NMAX/NSTEP-3) !Number of symbol spectra (1/4-sym steps)
|
parameter (NHSYM=(NMAX-NFFT1)/NSTEP) !Number of symbol spectra (1/4-sym steps)
|
||||||
parameter (NDOWN=16) !Downsample factor
|
parameter (NDOWN=16) !Downsample factor
|
||||||
|
@ -56,19 +56,32 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, &
|
|||||||
|
|
||||||
ncand=0
|
ncand=0
|
||||||
f_offset = -1.5*12000/512
|
f_offset = -1.5*12000/512
|
||||||
do i=1,maxcand
|
do i=nfa+1,nfb-1
|
||||||
ipk=maxloc(savsm(nfa:nfb))
|
if(savsm(i).ge.savsm(i-1) .and. savsm(i).ge.savsm(i+1) .and. savsm(i).ge.syncmin) then
|
||||||
ip=nfa-1+ipk(1)
|
del=0.5*(savsm(i-1)-savsm(i+1))/(savsm(i-1)-2*savsm(i)+savsm(i+1))
|
||||||
xmax=savsm(ip)
|
fpeak=(i+del)*df+f_offset
|
||||||
savsm(max(1,ip-8):min(NH1,ip+8))=0.0
|
speak=savsm(i) - 0.25*(savsm(i-1)-savsm(i+1))*del
|
||||||
if(xmax.ge.syncmin) then
|
ncand=ncand+1
|
||||||
ncand=ncand+1
|
if(ncand.gt.maxcand) exit
|
||||||
candidate(1,ncand)=ip*df+f_offset
|
candidate(1,ncand)=fpeak
|
||||||
candidate(2,ncand)=-99.9
|
candidate(2,ncand)=-99.99
|
||||||
candidate(3,ncand)=xmax
|
candidate(3,ncand)=speak
|
||||||
else
|
endif
|
||||||
exit
|
|
||||||
endif
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
! do i=1,maxcand
|
||||||
|
! ipk=maxloc(savsm(nfa:nfb))
|
||||||
|
! ip=nfa-1+ipk(1)
|
||||||
|
! xmax=savsm(ip)
|
||||||
|
! savsm(max(1,ip-8):min(NH1,ip+8))=0.0
|
||||||
|
! if(xmax.ge.syncmin) then
|
||||||
|
! ncand=ncand+1
|
||||||
|
! candidate(1,ncand)=ip*df+f_offset
|
||||||
|
! candidate(2,ncand)=-99.9
|
||||||
|
! candidate(3,ncand)=xmax
|
||||||
|
! else
|
||||||
|
! exit
|
||||||
|
! endif
|
||||||
|
! enddo
|
||||||
return
|
return
|
||||||
end subroutine getcandidates4
|
end subroutine getcandidates4
|
||||||
|
Loading…
Reference in New Issue
Block a user