Many changes to the procedures for selecting decodable candidate JT9 signals.

This code may be the new benchmark?


git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@3274 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
Joe Taylor 2013-05-16 16:02:00 +00:00
parent 1f82d75194
commit 057287fab1
11 changed files with 94 additions and 44 deletions

View File

@ -30,7 +30,7 @@ OBJS1 = pctile.o graycode.o sort.o ssort.o \
softsym.o peakdt9.o getlags.o afc9.o fchisq.o \
twkfreq.o downsam9.o symspec2.o ipcomm.o sleep_msec.o \
stdmsg.o sec_midn.o cutil.o azdist.o geodist.o morse.o \
fillcom.o
fillcom.o chkss2.o
libjt9.a: $(OBJS1)
ar cr libjt9.a $(OBJS1)

View File

@ -1,4 +1,4 @@
subroutine chkss2(ss2,schk)
subroutine chkss2(ss2,freq,drift,schk)
real ss2(0:8,85)
real s(0:8,85)
@ -8,7 +8,7 @@ subroutine chkss2(ss2,schk)
ave=sum(ss2)/(9*85)
s=ss2/ave-1.0
! call zplot9(s)
! call zplot9(s,freq,drift)
s1=0.
do lag=0,5
do i=1,16

View File

@ -82,7 +82,6 @@ subroutine decode9(i1SoftSymbols,limit,nlim,msg)
call packbits(i1DecodedBits,12,6,i4Decoded6BitWords)
call unpackmsg(i4Decoded6BitWords,msg) !Unpack decoded msg
if(index(msg,'000AAA ').gt.0) msg=' '
! if(index(msg,'15P6715P67WCV').gt.0) msg=' '
endif
return

View File

@ -10,6 +10,7 @@ subroutine decoder(ss,c0,nstandalone)
character*80 fmt
character*20 datetime
real*4 ccfred(NSMAX)
real*4 red2(NSMAX)
logical ccfok(NSMAX)
logical done(NSMAX)
integer*1 i1SoftSymbols(207)
@ -61,6 +62,16 @@ subroutine decoder(ss,c0,nstandalone)
! idf=ntol/df3 + 0.999
done=.false.
ia=max(1,nint((nfa-1000)/df3))
ib=min(NSMAX,nint((nfb-1000)/df3))
lag1=-(2.5/tstep + 0.9999)
lag2=5.0/tstep + 0.9999
call timer('sync9 ',0)
call sync9(ss,nzhsym,lag1,lag2,ia,ib,ccfred,red2,ipk)
call timer('sync9 ',1)
red2lim=1.6
schklim=2.2
do nqd=1,0,-1
limit=1000
ccflim=4.0
@ -70,7 +81,7 @@ subroutine decoder(ss,c0,nstandalone)
endif
if(ndepth.ge.3) then
limit=100000
ccflim=3.0
ccflim=2.5
endif
if(nqd.eq.1) then
@ -82,27 +93,20 @@ subroutine decoder(ss,c0,nstandalone)
nfa1=nfa
nfb1=nfb
endif
ia=max(1,nint((nfa1-1000)/df3))
ib=min(NSMAX,nint((nfb1-1000)/df3))
lag1=-(2.5/tstep + 0.9999)
lag2=5.0/tstep + 0.9999
call timer('sync9 ',0)
! Compute ccfred()
call sync9(ss,nzhsym,lag1,lag2,ia,ib,ccfred,ipk)
call timer('sync9 ',1)
ccfok=.false.
if(nqd.eq.1) then
ccfok(ipk)=.true.
do i=ia,ib
ccfok(i)=ccfred(i).gt.ccflim
ccfok(i)=ccfred(i).gt.ccflim .and. red2(i).gt.red2lim
enddo
ia1=ia
ib1=ib
else
do i=ia,ib
ccfok(i)=ccfred(i).gt.ccflim
ccfok(i)=ccfred(i).gt.ccflim .and. red2(i).gt.red2lim
enddo
ccfok(ia1:ib1)=.false.
endif
@ -128,7 +132,7 @@ subroutine decoder(ss,c0,nstandalone)
drift,schk,i1SoftSymbols)
call timer('softsym ',1)
if(schk.ge.2.0) then
if(schk.ge.schklim) then
call timer('decode9 ',0)
call decode9(i1SoftSymbols,limit,nlim,msg)
@ -141,8 +145,9 @@ subroutine decoder(ss,c0,nstandalone)
nsnr=nint(snrdb)
ndrift=nint(drift/df3)
write(38,3002) nutc,nqd,nsnr,i,freq,ccfred(i),schk,nlim,msg
3002 format(i4.4,i2,i5,i6,f8.1,2f6.1,i9,2x,a22)
! write(38,3002) nutc,nqd,nsnr,i,freq,ccfred(i),red2(i), &
! schk,nlim,msg
!3002 format(i4.4,i2,i5,i6,f8.1,3f6.1,i9,2x,a22)
if(msg.ne.' ') then
if(nqd.eq.0) ndecodes0=ndecodes0+1
@ -163,7 +168,7 @@ subroutine decoder(ss,c0,nstandalone)
call flush(6)
endif
else
write(38,3002) nutc,nqd,-99,i,freq,ccfred(i),schk,0
! write(38,3002) nutc,nqd,-99,i,freq,ccfred(i),red2(i),schk,0
endif
endif
enddo
@ -181,11 +186,11 @@ subroutine decoder(ss,c0,nstandalone)
if(nstandalone.eq.0) call timer('decoder ',101)
call system_clock(iclock,iclock_rate,iclock_max)
write(39,3001) nutc,nfreqs1,nfreqs0,ndecodes1,ndecodes0+ndecodes1, &
float(iclock-iclock0)/iclock_rate
3001 format(5i8,f10.3)
call flush(38)
call flush(39)
! write(39,3001) nutc,nfreqs1,nfreqs0,ndecodes1,ndecodes0+ndecodes1, &
! float(iclock-iclock0)/iclock_rate
!3001 format(5i8,f10.3)
! call flush(38)
! call flush(39)
return
end subroutine decoder

View File

@ -34,7 +34,6 @@ subroutine downsam9(c0,npts8,nsps8,newdat,nspsd,fpk,c2,nz2)
!3001 format(i5,2f12.3,i8)
enddo
call pctile(s,1000,40,avenoise)
newdat=0
endif
ndown=nsps8/16 !Downsample factor

View File

@ -11,6 +11,8 @@ subroutine softsym(c0,npts8,nsps8,newdat,fpk,syncpk,snrdb,xdt,freq,drift, &
integer*1 i1SoftSymbolsScrambled(207)
integer*1 i1SoftSymbols(207)
include 'jt9sync.f90'
data freq0/-999.0/,drift0/-999.0/
save freq0,drift0
nspsd=16
ndown=nsps8/nspsd
@ -26,15 +28,22 @@ subroutine softsym(c0,npts8,nsps8,newdat,fpk,syncpk,snrdb,xdt,freq,drift, &
freq=fpk - a(1)
drift=-2.0*a(2)
if(abs(freq-freq0).lt.0.1 .and. abs(drift-drift0).lt.0.1) then
schk=0.
go to 999
endif
freq0=freq
drift0=drift
newdat=0
call twkfreq(c3,c5,nz3,fsample,a) !Correct for deltaF, fDot, fDDot
! Compute soft symbols (in scrambled order)
call symspec2(c5,nz3,nsps8,nspsd,fsample,freq,drift,snrdb,schk, &
i1SoftSymbolsScrambled)
if(snrdb.lt.-99.0) return
! Remove interleaving
call interleave9(i1SoftSymbolsScrambled,-1,i1SoftSymbols)
return
999 return
end subroutine softsym

View File

@ -25,7 +25,7 @@ subroutine symspec(k,ntrperiod,nsps,ingain,nb,nbslider,pxdb,s,red, &
parameter (NFFT2=1024,NFFT2A=NFFT2/8)
parameter (MAXFFT3=32768)
real*4 s(NSMAX),w3(MAXFFT3)
real*4 x0(NFFT1),x1(NFFT1)
real*4 x1(NFFT1)
real*4 x2(NFFT1+105)
real*4 ssum(NSMAX)
real*4 red(NSMAX)
@ -82,24 +82,16 @@ subroutine symspec(k,ntrperiod,nsps,ingain,nb,nbslider,pxdb,s,red, &
k0=k
nzap=0
sigmas=1.0*(10.0**(0.01*nbslider)) + 0.7
peaklimit=sigmas*max(10.0,rms)
px=0.
nwindow=2
! nwindow=0 !### No windowing ###
kstep1=NFFT1
if(nwindow.ne.0) kstep1=NFFT1/2
fac=2.0/NFFT1
nblks=(k-k1)/kstep1
gain=10.0**(0.05*ingain)
do nblk=1,nblks
do i=1,NFFT1
x0(i)=gain*id2(k1+i)
x1(i)=gain*id2(k1+i)
enddo
call timf2(x0,k,NFFT1,nwindow,nb,peaklimit,x1, &
slimit,lstrong,px,nzap)
! Mix at 1500 Hz, lowpass at +/-750 Hz, and downsample to 1500 Hz complex.
x2(106:105+kstep1)=x1(1:kstep1)
call fil3(x2,kstep1+105,c0(k8+1),n2)
@ -152,6 +144,7 @@ subroutine symspec(k,ntrperiod,nsps,ingain,nb,nbslider,pxdb,s,red, &
call pctile(ssum,iz,npct,xmed1)
fac1=fac00/max(xmed1,0.006*ihsym)
savg(1:iz)=fac1*ssum(1:iz)
savg(iz+1:iz+20)=savg(iz)
call redsync(ss,ntrperiod,ihsym,iz,red)
return

View File

@ -11,7 +11,7 @@ subroutine symspec2(c5,nz3,nsps8,nspsd,fsample,freq,drift,snrdb,schk, &
real ss3(0:7,69)
integer*1 i1
equivalence (i1,i4)
include 'jt9sync.f90'
include 'jt9sync.f90'
aa(1)=-1500.0/nsps8
aa(2)=0.
@ -37,7 +37,9 @@ subroutine symspec2(c5,nz3,nsps8,nspsd,fsample,freq,drift,snrdb,schk, &
!###
! write(30) freq,drift,ss2
! call flush(30)
call chkss2(ss2,schk)
call chkss2(ss2,freq,drift,schk)
freq0=freq
drift0=drift
if(schk.lt.2.0) go to 900
!###
ss=0.

View File

@ -1,9 +1,14 @@
subroutine sync9(ss,nzhsym,lag1,lag2,ia,ib,ccfred,ipkbest)
subroutine sync9(ss,nzhsym,lag1,lag2,ia,ib,ccfred,red2,ipkbest)
parameter (NSMAX=22000) !Max length of saved spectra
real ss(184,NSMAX)
real ss1(184)
real ccfred(NSMAX)
real savg(NSMAX)
real savg2(NSMAX)
real smo(-5:25)
real sq(NSMAX)
real red2(NSMAX)
include 'jt9sync.f90'
ipk=0
@ -42,7 +47,43 @@ subroutine sync9(ss,nzhsym,lag1,lag2,ia,ib,ccfred,ipkbest)
call pctile(ccfred(ia),ib-ia+1,50,xmed)
if(xmed.le.0.0) xmed=1.0
ccfred=2.0*ccfred/xmed
ccfred=2.0*ccfred/xmed
! ccfred=4.0*(ccfred/xmed - 1.0)
savg=0.
do j=1,nzhsym
savg(ia:ib)=savg(ia:ib) + ss(j,ia:ib)
enddo
df=1500.0/2048.0 ! 0.732422
df9=12000.0/6912.0 ! 1.736111
savg(ia:ib)=savg(ia:ib)/nzhsym
smo(0:20)=1.0/21.0
smo(-5:-1)=-(1.0/21.0)*(21.0/10.0)
smo(21:25)=smo(-5)
do i=ia,ib
sm=0.
do j=-5,25
if(i+j.ge.1 .and. i+j.lt.NSMAX) sm=sm + smo(j)*savg(i+j)
enddo
savg2(i)=sm
sq(i)=sm*sm
enddo
call pctile(sq(ia:ib),ib-ia+1,20,sq0)
rms=sqrt(sq0)
savg2(ia:ib)=savg2(ia:ib)/(5.0*rms)
red2=0.
do i=ia+11,ib-10
ref=max(savg2(i-10),savg2(i+10))
red2(i)=savg2(i)-ref
if(red2(i).lt.-99.0) red2(i)=-99.0
if(red2(i).gt.99.0) red2(i)=99.0
! write(30,3001) i,i*df+1000.0,savg2(i),red2(i),ccfred(i)
!3001 format(i8,4f10.3)
enddo
! call flush(30)
return
end subroutine sync9

View File

@ -1,10 +1,12 @@
subroutine zplot9(s)
subroutine zplot9(s,freq,drift)
real s(0:8,85)
character*1 line(85),mark(0:6)
data mark/' ',' ','.','-','+','X','$'/
include 'jt9sync.f90'
write(32,1000) freq,drift
1000 format('Freq:',f7.1,' Drift:',f5.1,' ',60('-'))
do j=8,0,-1
do i=1,85
n=(s(j,i))
@ -23,7 +25,7 @@ subroutine zplot9(s)
1015 format(87('-'))
write(32,1020) line
1020 format(2x,85a1)
write(32,1015)
call flush(32)
return
end subroutine zplot9

View File

@ -1760,7 +1760,7 @@ void MainWindow::startTx2()
double snr=t.mid(1,5).toDouble();
if(snr>0.0 or snr < -50.0) snr=99.0;
soundOutThread.setTxSNR(snr);
soundOutThread.start(QThread::HighPriority);
soundOutThread.start(QThread::HighestPriority);
ui->xThermo->setValue(0.0); //Set Thermo to zero
m_monitoring=false;
soundInThread.setMonitoring(false);