Changes to enable Fast and Normal decode settings. NB - max number of candidates has been increased to 20.

This commit is contained in:
K9AN 2020-06-21 08:48:34 -05:00
parent 0e935f0cf7
commit f03f411733
2 changed files with 27 additions and 17 deletions

View File

@ -1,4 +1,4 @@
subroutine get_fst280_bitmetrics(cd,nss,hmod,bitmetrics,badsync) subroutine get_fst280_bitmetrics(cd,nss,hmod,nmax,bitmetrics,badsync)
include 'fst280_params.f90' include 'fst280_params.f90'
complex cd(0:NN*nss-1) complex cd(0:NN*nss-1)
@ -78,7 +78,7 @@ subroutine get_fst280_bitmetrics(cd,nss,hmod,bitmetrics,badsync)
endif endif
bitmetrics=0.0 bitmetrics=0.0
do nseq=1,4 !Try coherent sequences of 1, 2, and 4 symbols do nseq=1,nmax !Try coherent sequences of 1, 2, and 4 symbols
if(nseq.eq.1) nsym=1 if(nseq.eq.1) nsym=1
if(nseq.eq.2) nsym=2 if(nseq.eq.2) nsym=2
if(nseq.eq.3) nsym=4 if(nseq.eq.3) nsym=4

View File

@ -100,10 +100,24 @@ contains
allocate( cframe(0:164*nss-1) ) allocate( cframe(0:164*nss-1) )
npts=nmax npts=nmax
fa=nfa fa=max(100,nfa)
fb=nfb fb=min(4800,nfb)
! The big fft is done once and is used for calculating the smoothed spectrum if(ndeep.eq.3) then
ntmax=4 ! number of block sizes to try
jittermax=2
norder=3
elseif(ndeep.eq.2) then
ntmax=3
jittermax=2
norder=3
elseif(ndeep.eq.1) then
ntmax=1
jittermax=2
norder=2
endif
! The big fft is done once and is used for calculating the smoothed spectrum
! and also for downconverting/downsampling each candidate. ! and also for downconverting/downsampling each candidate.
r_data(1:nfft1)=iwave(1:nfft1) r_data(1:nfft1)=iwave(1:nfft1)
r_data(nfft1+1:nfft1+2)=0.0 r_data(nfft1+1:nfft1+2)=0.0
@ -113,7 +127,7 @@ contains
! Get first approximation of candidate frequencies ! Get first approximation of candidate frequencies
call get_candidates_fst280(c_bigfft,nfft1,nsps,hmod,fs,fa,fb, & call get_candidates_fst280(c_bigfft,nfft1,nsps,hmod,fs,fa,fb, &
ncand,candidates) ncand,candidates)
ndecodes=0 ndecodes=0
isbest1=0 isbest1=0
isbest8=0 isbest8=0
@ -173,16 +187,12 @@ contains
if(smax8/smax1 .lt. 0.65 ) then if(smax8/smax1 .lt. 0.65 ) then
fc2=fc21 fc2=fc21
isbest=isbest1 isbest=isbest1
ntmax=4
if(hmod.gt.1) ntmax=1 if(hmod.gt.1) ntmax=1
ntmin=1
njitter=2 njitter=2
else else
fc2=fc28 fc2=fc28
isbest=isbest8 isbest=isbest8
ntmax=4
if(hmod.gt.1) ntmax=1 if(hmod.gt.1) ntmax=1
ntmin=1
njitter=2 njitter=2
endif endif
fc_synced = fc0 + fc2 fc_synced = fc0 + fc2
@ -223,7 +233,7 @@ contains
xdt=(isbest-nspsec)/fs2 xdt=(isbest-nspsec)/fs2
call fst280_downsample(c_bigfft,nfft1,ndown,fc_synced,c2) call fst280_downsample(c_bigfft,nfft1,ndown,fc_synced,c2)
do ijitter=0,2 do ijitter=0,jittermax
if(ijitter.eq.0) ioffset=0 if(ijitter.eq.0) ioffset=0
if(ijitter.eq.1) ioffset=1 if(ijitter.eq.1) ioffset=1
if(ijitter.eq.2) ioffset=-1 if(ijitter.eq.2) ioffset=-1
@ -233,7 +243,8 @@ contains
s2=sum(cframe*conjg(cframe)) s2=sum(cframe*conjg(cframe))
cframe=cframe/sqrt(s2) cframe=cframe/sqrt(s2)
bitmetrics=0 bitmetrics=0
call get_fst280_bitmetrics(cframe,nss,hmod,bitmetrics,badsync) call get_fst280_bitmetrics(cframe,nss,hmod,ntmax,bitmetrics,badsync)
if(badsync) cycle
hbits=0 hbits=0
where(bitmetrics(:,1).ge.0) hbits=1 where(bitmetrics(:,1).ge.0) hbits=1
@ -261,7 +272,7 @@ contains
llrd=scalefac*llrd llrd=scalefac*llrd
apmask=0 apmask=0
do itry=ntmax,ntmin,-1 do itry=1,ntmax
if(itry.eq.1) llr=llra if(itry.eq.1) llr=llra
if(itry.eq.2) llr=llrb if(itry.eq.2) llr=llrb
if(itry.eq.3) llr=llrc if(itry.eq.3) llr=llrc
@ -272,13 +283,13 @@ contains
if(iwspr.eq.0) then if(iwspr.eq.0) then
maxosd=2 maxosd=2
call timer('d280_101',0) call timer('d280_101',0)
call decode280_101(llr,Keff,maxosd,ndeep,apmask,message101, & call decode280_101(llr,Keff,maxosd,norder,apmask,message101, &
cw,ntype,nharderrors,dmin) cw,ntype,nharderrors,dmin)
call timer('d280_101',1) call timer('d280_101',1)
else else
maxosd=2 maxosd=2
call timer('d280_74 ',0) call timer('d280_74 ',0)
call decode280_74(llr,Keff,maxosd,ndeep,apmask,message74,cw, & call decode280_74(llr,Keff,maxosd,norder,apmask,message74,cw, &
ntype,nharderrors,dmin) ntype,nharderrors,dmin)
call timer('d280_74 ',1) call timer('d280_74 ',1)
endif endif
@ -466,7 +477,7 @@ contains
snr_cand=0. snr_cand=0.
snr_cand(1:ncand)=candidates(1:ncand,2) snr_cand(1:ncand)=candidates(1:ncand,2)
call indexx(snr_cand,ncand,indx) call indexx(snr_cand,ncand,indx)
nmax=min(ncand,5) nmax=min(ncand,20)
do i=1,nmax do i=1,nmax
j=indx(ncand+1-i) j=indx(ncand+1-i)
candidates0(i,1:4)=candidates(j,1:4) candidates0(i,1:4)=candidates(j,1:4)
@ -474,7 +485,6 @@ contains
ncand=nmax ncand=nmax
candidates(1:ncand,1:4)=candidates0(1:ncand,1:4) candidates(1:ncand,1:4)=candidates0(1:ncand,1:4)
candidates(ncand+1:,1:4)=0. candidates(ncand+1:,1:4)=0.
return return
end subroutine get_candidates_fst280 end subroutine get_candidates_fst280