mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-12-24 11:40:31 -05:00
Merge improvements to the FT algorithm into Bill's new structure for
the Fortran routines. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6328 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
9e2fd2e11a
commit
5bfa43f46f
@ -215,16 +215,22 @@ contains
|
|||||||
integer, intent(in) :: hard_min
|
integer, intent(in) :: hard_min
|
||||||
integer, intent(in) :: aggression
|
integer, intent(in) :: aggression
|
||||||
|
|
||||||
|
integer param(0:8)
|
||||||
|
real rtt
|
||||||
|
common/test000/param !### TEST ONLY ###
|
||||||
|
rtt=0.001*param(4)
|
||||||
|
|
||||||
!$omp critical(decode_results)
|
!$omp critical(decode_results)
|
||||||
write(*,1010) utc,snr,dt,freq,decoded
|
write(*,1010) utc,snr,dt,freq,decoded
|
||||||
1010 format(i4.4,i4,f5.1,i5,1x,'#',1x,a22)
|
1010 format(i4.4,i4,f5.1,i5,1x,'#',1x,a22)
|
||||||
write(13,1012) utc,nint(sync),snr,dt,float(freq),drift,decoded,ft
|
write(13,1012) utc,nint(sync),snr,dt,float(freq),drift,decoded,ft
|
||||||
1012 format(i4.4,i4,i5,f6.1,f8.0,i4,3x,a22,' JT65',i4)
|
1012 format(i4.4,i4,i5,f6.1,f8.0,i4,3x,a22,' JT65',i4)
|
||||||
call flush(6)
|
call flush(6)
|
||||||
! write(79,3001) utc,nint(sync),snr,dt,freq,candidates, &
|
! write(79,3001) utc,sync,snr,dt,freq,candidates, &
|
||||||
write(79,3001) utc,sync,snr,dt,freq,candidates, &
|
! hard_min,total_min,rtt,tries,ft,min(qual,99),decoded
|
||||||
hard_min,total_min,tries,aggression,ft,qual,decoded
|
!3001 format(i4.4,f5.1,i4,f5.1,i5,i6,i3,i4,f6.3,i8,i2,i3,1x,a22)
|
||||||
3001 format(i4.4,f6.2,i4,f6.2,i5,i7,i3,i4,i8,i3,i2,i5,1x,a22)
|
! flush(79)
|
||||||
|
|
||||||
!$omp end critical(decode_results)
|
!$omp end critical(decode_results)
|
||||||
select type(this)
|
select type(this)
|
||||||
type is (counting_jt65_decoder)
|
type is (counting_jt65_decoder)
|
||||||
|
@ -81,11 +81,17 @@ subroutine extract(s3,nadd,ntrials,naggressive,ndepth,mycall_12, &
|
|||||||
nhard=param(1)
|
nhard=param(1)
|
||||||
nsoft=param(2)
|
nsoft=param(2)
|
||||||
nerased=param(3)
|
nerased=param(3)
|
||||||
nsofter=param(4)
|
rtt=0.001*param(4)
|
||||||
ntotal=param(5)
|
ntotal=param(5)
|
||||||
qual=0.001*param(7)
|
qual=0.001*param(7)
|
||||||
qmin=11-naggressive
|
nd0=81
|
||||||
if(qual.ge.qmin) nft=1
|
r0=0.87
|
||||||
|
if(naggressive.eq.10) then
|
||||||
|
nd0=83
|
||||||
|
r0=0.90
|
||||||
|
endif
|
||||||
|
if(ntotal.le.nd0 .and. rtt.le.r0) nft=1
|
||||||
|
! nft=1 !### TEST ONLY ###
|
||||||
|
|
||||||
if(nft.eq.0 .and. ndepth.ge.5) then
|
if(nft.eq.0 .and. ndepth.ge.5) then
|
||||||
call timer('exp_deco',0)
|
call timer('exp_deco',0)
|
||||||
@ -97,7 +103,7 @@ subroutine extract(s3,nadd,ntrials,naggressive,ndepth,mycall_12, &
|
|||||||
nft=2
|
nft=2
|
||||||
else
|
else
|
||||||
decoded=' '
|
decoded=' '
|
||||||
param=0
|
!### param=0
|
||||||
ntry=0
|
ntry=0
|
||||||
endif
|
endif
|
||||||
call timer('exp_deco',1)
|
call timer('exp_deco',1)
|
||||||
@ -143,16 +149,14 @@ subroutine getpp(workdat,p)
|
|||||||
call graycode(a,63,1,a)
|
call graycode(a,63,1,a)
|
||||||
|
|
||||||
psum=0.
|
psum=0.
|
||||||
ref=0.
|
|
||||||
do j=1,63
|
do j=1,63
|
||||||
i=a(j)+1
|
i=a(j)+1
|
||||||
x=s3a(i,j)
|
x=s3a(i,j)
|
||||||
s3a(i,j)=0.
|
s3a(i,j)=0.
|
||||||
psum=psum + x
|
psum=psum + x
|
||||||
ref=ref + maxval(s3a(1:64,j))
|
|
||||||
s3a(i,j)=x
|
s3a(i,j)=x
|
||||||
enddo
|
enddo
|
||||||
p=psum/ref
|
p=psum/63.0
|
||||||
|
|
||||||
return
|
return
|
||||||
end subroutine getpp
|
end subroutine getpp
|
||||||
|
@ -38,8 +38,7 @@ void ftrsd2_(int mrsym[], int mrprob[], int mr2sym[], int mr2prob[],
|
|||||||
int nhard=0,nhard_min=32768,nsoft=0,nsoft_min=32768;
|
int nhard=0,nhard_min=32768,nsoft=0,nsoft_min=32768;
|
||||||
int nsofter=0,nsofter_min=32768,ntotal=0,ntotal_min=32768,ncandidates;
|
int nsofter=0,nsofter_min=32768,ntotal=0,ntotal_min=32768,ncandidates;
|
||||||
int nera_best=0;
|
int nera_best=0;
|
||||||
float pp,pp1,pp2,bias;
|
float pp,pp1,pp2;
|
||||||
float qual=0.0;
|
|
||||||
static unsigned int nseed;
|
static unsigned int nseed;
|
||||||
|
|
||||||
// Power-percentage symbol metrics - composite gnnf/hf
|
// Power-percentage symbol metrics - composite gnnf/hf
|
||||||
@ -121,8 +120,10 @@ Hard-decision decoding failed. Try the FT soft-decision method.
|
|||||||
Generate random erasure-locator vectors and see if any of them
|
Generate random erasure-locator vectors and see if any of them
|
||||||
decode. This will generate a list of "candidate" codewords. The
|
decode. This will generate a list of "candidate" codewords. The
|
||||||
soft distance between each candidate codeword and the received
|
soft distance between each candidate codeword and the received
|
||||||
word (or a quality estimator "qual") is used to decide which
|
word is estimated by finding the largest (pp1) and second-largest
|
||||||
candidate codeword is "best".
|
(pp2) outputs from a synchronized filter-bank operating on the
|
||||||
|
symbol spectra, and using these to decide which candidate
|
||||||
|
codeword is "best".
|
||||||
*/
|
*/
|
||||||
|
|
||||||
nseed=1; //Seed for random numbers
|
nseed=1; //Seed for random numbers
|
||||||
@ -173,8 +174,8 @@ NB: j is the symbol-vector index of the symbol with rank i.
|
|||||||
nerr=decode_rs_int(rs,workdat,era_pos,numera,0);
|
nerr=decode_rs_int(rs,workdat,era_pos,numera,0);
|
||||||
if( nerr >= 0 ) {
|
if( nerr >= 0 ) {
|
||||||
// We have a candidate coderowd. Find its hard and soft distance from
|
// We have a candidate coderowd. Find its hard and soft distance from
|
||||||
// the received word. Also find its quality estimate "qual" from the
|
// the received word. Also find pp1 and pp2 from the full array
|
||||||
// full s3(64,63) array of synchronized symbol spectra.
|
// s3(64,63) of synchronized symbol spectra.
|
||||||
ncandidates=ncandidates+1;
|
ncandidates=ncandidates+1;
|
||||||
nhard=0;
|
nhard=0;
|
||||||
nsoft=0;
|
nsoft=0;
|
||||||
@ -205,17 +206,12 @@ NB: j is the symbol-vector index of the symbol with rank i.
|
|||||||
memcpy(correct,workdat,63*sizeof(int));
|
memcpy(correct,workdat,63*sizeof(int));
|
||||||
nera_best=numera;
|
nera_best=numera;
|
||||||
ntry[0]=k;
|
ntry[0]=k;
|
||||||
bias=1.12*pp2;
|
|
||||||
if(bias<0.570) bias=0.570;
|
|
||||||
// if(bias<0.335) bias=0.335;
|
|
||||||
// if(mode65.eq.2) bias=max(1.08*p2,0.405)
|
|
||||||
// if(mode65.ge.4) bias=max(1.04*p2,0.505)
|
|
||||||
qual=100.0*(pp1-bias);
|
|
||||||
} else {
|
} else {
|
||||||
if(pp>pp2 && pp!=pp1) pp2=pp;
|
if(pp>pp2 && pp!=pp1) pp2=pp;
|
||||||
}
|
}
|
||||||
|
// if(pp2==0.0 && pp1>5.0) break;
|
||||||
if(qual>10.0 && ncandidates>=100) break;
|
// if(pp2>0.0 && pp1>4.4 && pp1>pp2+0.6) break;
|
||||||
|
if(ntotal_min <= 81 && pp2/pp1 <= 0.87) break;
|
||||||
}
|
}
|
||||||
if(k == ntrials) ntry[0]=k;
|
if(k == ntrials) ntry[0]=k;
|
||||||
}
|
}
|
||||||
@ -230,10 +226,11 @@ NB: j is the symbol-vector index of the symbol with rank i.
|
|||||||
param[1]=nhard_min;
|
param[1]=nhard_min;
|
||||||
param[2]=nsoft_min;
|
param[2]=nsoft_min;
|
||||||
param[3]=nera_best;
|
param[3]=nera_best;
|
||||||
param[4]=nsofter_min;
|
param[4]=1000.0*pp2/pp1;
|
||||||
param[5]=ntotal_min;
|
param[5]=ntotal_min;
|
||||||
param[6]=ntry[0];
|
param[6]=ntry[0];
|
||||||
param[7]=1000.0*qual;
|
param[7]=1000.0*pp2;
|
||||||
|
param[8]=1000.0*pp1;
|
||||||
if(param[0]==0) param[2]=-1;
|
if(param[0]==0) param[2]=-1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -77,8 +77,8 @@ contains
|
|||||||
logical :: first_time, robust
|
logical :: first_time, robust
|
||||||
common/decstats/ntry65a,ntry65b,n65a,n65b,num9,numfano
|
common/decstats/ntry65a,ntry65b,n65a,n65b,num9,numfano
|
||||||
common/steve/thresh0
|
common/steve/thresh0
|
||||||
common/test000/ncandidates,nhard_min,nsoft_min,nera_best,nsofter_min, &
|
common/test000/ncandidates,nhard_min,nsoft_min,nera_best,nrtt1000, &
|
||||||
ntotal_min,ntry,nq1000,ntot !### TEST ONLY ###
|
ntotal_min,ntry,nq1000,npp1 !### TEST ONLY ###
|
||||||
save
|
save
|
||||||
|
|
||||||
this%callback => callback
|
this%callback => callback
|
||||||
|
@ -34,7 +34,7 @@ contains
|
|||||||
end subroutine test
|
end subroutine test
|
||||||
|
|
||||||
subroutine my_callback (this, utc, sync, snr, dt, freq, drift, decoded &
|
subroutine my_callback (this, utc, sync, snr, dt, freq, drift, decoded &
|
||||||
, ft, qual, candidates, tries, total_min, hard_min, aggression)
|
, ft, qual, candidates, tries, total_min, hard_min, aggression, rtt)
|
||||||
use jt65_decode
|
use jt65_decode
|
||||||
implicit none
|
implicit none
|
||||||
|
|
||||||
@ -53,16 +53,17 @@ contains
|
|||||||
integer, intent(in) :: total_min
|
integer, intent(in) :: total_min
|
||||||
integer, intent(in) :: hard_min
|
integer, intent(in) :: hard_min
|
||||||
integer, intent(in) :: aggression
|
integer, intent(in) :: aggression
|
||||||
|
real, intent(in) :: rtt
|
||||||
|
|
||||||
write(*,1010) utc,snr,dt,freq,decoded
|
write(*,1010) utc,snr,dt,freq,decoded
|
||||||
1010 format(i4.4,i4,f5.1,i5,1x,'#',1x,a22)
|
1010 format(i4.4,i4,f5.1,i5,1x,'#',1x,a22)
|
||||||
write(13,1012) utc,nint(sync),snr,dt,float(freq),drift,decoded,ft
|
write(13,1012) utc,nint(sync),snr,dt,float(freq),drift,decoded,ft
|
||||||
1012 format(i4.4,i4,i5,f6.1,f8.0,i4,3x,a22,' JT65',i4)
|
1012 format(i4.4,i4,i5,f6.1,f8.0,i4,3x,a22,' JT65',i4)
|
||||||
call flush(6)
|
call flush(6)
|
||||||
! write(79,3001) utc,nint(sync),snr,dt,freq,candidates, &
|
! write(79,3001) utc,sync,snr,dt,freq,candidates, &
|
||||||
write(79,3001) utc,sync,snr,dt,freq,candidates, &
|
! hard_min,total_min,rtt,tries,ft,qual,decoded
|
||||||
hard_min,total_min,tries,aggression,ft,qual,decoded
|
!3001 format(i4.4,f5.1,i4,f5.1,i5,i6,i3,i4,f6.3,i8,i2,i3,1x,a22)
|
||||||
3001 format(i4.4,f6.2,i4,f6.2,i5,i7,i3,i4,i8,i3,i2,i5,1x,a22)
|
|
||||||
end subroutine my_callback
|
end subroutine my_callback
|
||||||
|
|
||||||
end module jt65_test
|
end module jt65_test
|
||||||
|
@ -254,11 +254,15 @@ program jt9
|
|||||||
shared_data%params%nzhsym=181
|
shared_data%params%nzhsym=181
|
||||||
shared_data%params%ndepth=ndepth
|
shared_data%params%ndepth=ndepth
|
||||||
shared_data%params%dttol=3.
|
shared_data%params%dttol=3.
|
||||||
|
|
||||||
shared_data%params%minsync=-1 !### TEST ONLY
|
shared_data%params%minsync=-1 !### TEST ONLY
|
||||||
!mycall="K1ABC " !### TEST ONLY
|
shared_data%params%nfqso=1500 !### TEST ONLY
|
||||||
|
mycall="K1ABC " !### TEST ONLY
|
||||||
|
|
||||||
shared_data%params%naggressive=10
|
shared_data%params%naggressive=10
|
||||||
shared_data%params%n2pass=1
|
shared_data%params%n2pass=1
|
||||||
shared_data%params%nranera=8 ! ntrials=10000
|
shared_data%params%nranera=8 !### ntrials=10000
|
||||||
|
if(ndepth.eq.4) shared_data%params%nranera=10 !### ntrials=100,000
|
||||||
shared_data%params%nrobust=.false.
|
shared_data%params%nrobust=.false.
|
||||||
shared_data%params%nexp_decode=nexp_decode
|
shared_data%params%nexp_decode=nexp_decode
|
||||||
shared_data%params%mycall=mycall
|
shared_data%params%mycall=mycall
|
||||||
|
@ -22,8 +22,9 @@ program stats
|
|||||||
i1=index(infile,".")+1
|
i1=index(infile,".")+1
|
||||||
i2=40
|
i2=40
|
||||||
if(index(infile,"_").gt.1) i2=index(infile,"_") - 1
|
if(index(infile,"_").gt.1) i2=index(infile,"_") - 1
|
||||||
read(infile(i1:i2),*) snrgen
|
snrgen=0.
|
||||||
snrgen=-snrgen
|
read(infile(i1:i2),*,err=1) snrgen
|
||||||
|
1 snrgen=-snrgen
|
||||||
nsynced=0
|
nsynced=0
|
||||||
nbm=0
|
nbm=0
|
||||||
nftok=0
|
nftok=0
|
||||||
@ -34,8 +35,9 @@ program stats
|
|||||||
|
|
||||||
do iline=1,999999
|
do iline=1,999999
|
||||||
read(10,1010,end=100) nutc,sync,nsnr,dt,nfreq,ncandidates,nhard, &
|
read(10,1010,end=100) nutc,sync,nsnr,dt,nfreq,ncandidates,nhard, &
|
||||||
ntotal,ntry,naggressive,nft,nqual,decoded
|
ntotal,rtt,ntry,nft,nqual,decoded
|
||||||
1010 format(i4.4,f6.2,i4,f6.2,i5,i7,i3,i4,i8,i3,i2,i5,1x,a22)
|
1010 format(i4.4,f5.1,i4,f5.1,i5,i6,i3,i4,f6.3,i8,i2,i3,1x,a22)
|
||||||
|
|
||||||
! ndfreq=9999
|
! ndfreq=9999
|
||||||
! do ifreq=600,2400,200
|
! do ifreq=600,2400,200
|
||||||
! n=abs(nfreq-ifreq)
|
! n=abs(nfreq-ifreq)
|
||||||
@ -49,13 +51,16 @@ program stats
|
|||||||
nbadsync=nbadsync+1
|
nbadsync=nbadsync+1
|
||||||
endif
|
endif
|
||||||
if(decoded.eq.' ') cycle
|
if(decoded.eq.' ') cycle
|
||||||
if(decoded(1:11).eq.'K1ABC W9XYZ') then
|
! if(ntotal.le.83 .and. rtt.le.0.90) then !nag=10
|
||||||
ngood=ngood+1
|
if(ntotal.le.81 .and. rtt.le.0.87) then !nag=0
|
||||||
if(ncandidates.eq.0) nbm=nbm+1
|
if(decoded(1:11).eq.'K1ABC W9XYZ') then
|
||||||
if(nft.eq.1) nftok=nftok+1
|
ngood=ngood+1
|
||||||
if(nft.ge.1) nhint=nhint+1
|
if(ncandidates.eq.0) nbm=nbm+1
|
||||||
else
|
if(nft.eq.1) nftok=nftok+1
|
||||||
nbad=nbad+1
|
if(nft.ge.1) nhint=nhint+1
|
||||||
|
else
|
||||||
|
nbad=nbad+1
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user