mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-22 04:11:16 -05:00
First cut at identifying multiple candidates for decoding. Needs work.
This commit is contained in:
parent
134da155b6
commit
57cf69e6ad
@ -64,16 +64,16 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line)
|
||||
candidate=0.0
|
||||
ncand=0
|
||||
|
||||
nfa=375
|
||||
nfb=3000
|
||||
syncmin=1.0
|
||||
fa=375.0
|
||||
fb=3000.0
|
||||
syncmin=1.2
|
||||
maxcand=100
|
||||
! call syncft4(iwave,nfa,nfb,syncmin,nfqso,maxcand,s,candidate,ncand,sbase)
|
||||
|
||||
call getcandidates4(iwave,375.0,3000.0,0.2,2200.0,100,savg,candidate,ncand,sbase)
|
||||
call getcandidates4(iwave,fa,fb,syncmin,nfqso,100,savg,candidate,ncand,sbase)
|
||||
ndecodes=0
|
||||
do icand=1,ncand
|
||||
f0=candidate(1,icand)-35.0
|
||||
f0=candidate(1,icand)
|
||||
xsnr=10*log10(candidate(3,icand))-15.0
|
||||
if( f0.le.375.0 .or. f0.ge.(5000.0-375.0) ) cycle
|
||||
call ft4_downsample(iwave,f0,cd2) ! downsample from 320 Sa/Symbol to 20 Sa/Symbol
|
||||
@ -81,26 +81,43 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line)
|
||||
if(sum2.gt.0.0) cd2=cd2/sqrt(sum2)
|
||||
|
||||
! 750 samples/second here
|
||||
ibest=-1
|
||||
smax=-99.
|
||||
dfbest=-1.
|
||||
do idf=-30,+30,2
|
||||
df=idf
|
||||
a=0.
|
||||
a(1)=df
|
||||
ctwk=1.
|
||||
call twkfreq1(ctwk,4*NSS,fs,a,ctwk2)
|
||||
do istart=0,374
|
||||
call sync4d(cd2,istart,ctwk2,1,sync)
|
||||
if(sync.gt.smax) then
|
||||
smax=sync
|
||||
ibest=istart
|
||||
dfbest=df
|
||||
endif
|
||||
|
||||
do isync=1,2
|
||||
if(isync.eq.1) then
|
||||
idfmin=-50
|
||||
idfmax=50
|
||||
idfstp=3
|
||||
ibmin=0
|
||||
ibmax=374
|
||||
ibstp=4
|
||||
else
|
||||
idfmin=idfbest-5
|
||||
idfmax=idfbest+5
|
||||
idfstp=1
|
||||
ibmin=max(0,ibest-5)
|
||||
ibmax=min(ibest+5,NMAX/NDOWN-1)
|
||||
ibstp=1
|
||||
endif
|
||||
ibest=-1
|
||||
smax=-99.
|
||||
idfbest=0
|
||||
do idf=idfmin,idfmax,idfstp
|
||||
a=0.
|
||||
a(1)=real(idf)
|
||||
ctwk=1.
|
||||
call twkfreq1(ctwk,4*NSS,fs,a,ctwk2)
|
||||
do istart=ibmin,ibmax,ibstp
|
||||
call sync4d(cd2,istart,ctwk2,1,sync)
|
||||
if(sync.gt.smax) then
|
||||
smax=sync
|
||||
ibest=istart
|
||||
idfbest=idf
|
||||
endif
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
|
||||
f0=f0+dfbest
|
||||
f0=f0+real(idfbest)
|
||||
call ft4_downsample(iwave,f0,cb) ! downsample from 320s/Symbol to 20s/Symbol
|
||||
sum2=sum(abs(cb)**2)/(real(NSS)*NN)
|
||||
if(sum2.gt.0.0) cb=cb/sqrt(sum2)
|
||||
@ -111,7 +128,6 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line)
|
||||
call four2a(csymb,NSS,1,-1,1)
|
||||
cs(0:3,k)=csymb(1:4)
|
||||
s4(0:3,k)=abs(csymb(1:4))
|
||||
!write(*,'(i4,4f8.1)') k, s4(0:3,k)
|
||||
enddo
|
||||
|
||||
! sync quality check
|
||||
@ -189,6 +205,10 @@ subroutine ft4_decode(cdatetime0,nfqso,iwave,ndecodes,mycall,hiscall,nrx,line)
|
||||
ns4=count(hbits(199:206).eq.(/0,0,0,1,1,0,1,1/))
|
||||
nsync_qual=ns1+ns2+ns3+ns4
|
||||
|
||||
if(nsync.lt.8 .or. nsync_qual.lt. 20) then
|
||||
cycle
|
||||
endif
|
||||
|
||||
scalefac=2.83
|
||||
llra( 1: 58)=bmeta( 9: 66)
|
||||
llra( 59:116)=bmeta( 75:132)
|
||||
|
@ -10,6 +10,7 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, &
|
||||
real candidate(3,maxcand)
|
||||
integer*2 id(NMAX)
|
||||
integer indx(NH1)
|
||||
integer ipk(1)
|
||||
equivalence (x,cx)
|
||||
|
||||
! Compute symbol spectra, stepping by NSTEP steps.
|
||||
@ -29,8 +30,8 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, &
|
||||
savg=savg + s(1:NH1,j) !Average spectrum
|
||||
enddo
|
||||
savsm=0.
|
||||
do i=6,NH1-5
|
||||
savsm(i)=sum(savg(i-5:i+5))/11.
|
||||
do i=8,NH1-7
|
||||
savsm(i)=sum(savg(i-7:i+7))/15.
|
||||
enddo
|
||||
nfa=fa/df
|
||||
nfb=fb/df
|
||||
@ -39,22 +40,22 @@ subroutine getcandidates4(id,fa,fb,syncmin,nfqso,maxcand,savg,candidate, &
|
||||
call indexx(savsm(nfa:nfb),np,indx)
|
||||
xn=savsm(nfa+indx(nint(0.3*np)))
|
||||
savsm=savsm/xn
|
||||
imax=-1
|
||||
xmax=-99.
|
||||
do i=2,NH1-1
|
||||
if(savsm(i).gt.savsm(i-1).and. &
|
||||
savsm(i).gt.savsm(i+1).and. &
|
||||
savsm(i).gt.xmax) then
|
||||
xmax=savsm(i)
|
||||
imax=i
|
||||
endif
|
||||
|
||||
ncand=0
|
||||
f_offset = -1.5*12000/512
|
||||
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
|
||||
f0=imax*df
|
||||
if(xmax.gt.1.2) then
|
||||
ncand=ncand+1
|
||||
candidate(1,ncand)=f0
|
||||
candidate(2,ncand)=-99.9
|
||||
candidate(3,ncand)=xmax
|
||||
endif
|
||||
return
|
||||
end subroutine getcandidates4
|
||||
|
Loading…
Reference in New Issue
Block a user