From ccca5b80ea5e3b26eed23cb4ef88dd8af3c4acfb Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Sun, 1 Feb 2015 17:40:14 +0000 Subject: [PATCH] Forgot to commit decjt9.f90. Also note: something's wrong when trying to decode a file read by the GUI from disk. Will fix it soon... git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@4920 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- lib/decjt9.f90 | 131 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 lib/decjt9.f90 diff --git a/lib/decjt9.f90 b/lib/decjt9.f90 new file mode 100644 index 000000000..1dd1e60f9 --- /dev/null +++ b/lib/decjt9.f90 @@ -0,0 +1,131 @@ +subroutine decjt9(ss,id2,nutc,nfqso,newdat,npts8,nfa,nfsplit,nfb,ntol, & + nzhsym,nagain,ndepth,nmode) + + include 'constants.f90' + real ss(184,NSMAX) + character*22 msg + real*4 ccfred(NSMAX) + real*4 red2(NSMAX) + logical ccfok(NSMAX) + logical done(NSMAX) + integer*2 id2(NTMAX*12000) + integer*1 i1SoftSymbols(207) + + nsynced=0 + ndecoded=0 + nsps=6912 !Params for JT9-1 + df3=1500.0/2048.0 + + tstep=0.5*nsps/12000.0 !Half-symbol step (seconds) + done=.false. + + nf0=0 + nf1=nfa + if(nmode.eq.65+9) nf1=nfsplit + ia=max(1,nint((nf1-nf0)/df3)) + ib=min(NSMAX,nint((nfb-nf0)/df3)) + lag1=-int(2.5/tstep + 0.9999) + lag2=int(5.0/tstep + 0.9999) + if(newdat.ne.0) then + call timer('sync9 ',0) + call sync9(ss,nzhsym,lag1,lag2,ia,ib,ccfred,red2,ipk) + call timer('sync9 ',1) + endif + + nsps8=nsps/8 + df8=1500.0/nsps8 + dblim=db(864.0/nsps8) - 26.2 + + do nqd=1,0,-1 + limit=5000 + ccflim=3.0 + red2lim=1.6 + schklim=2.2 + if(ndepth.eq.2) then + limit=10000 + ccflim=2.7 + endif + if(ndepth.ge.3 .or. nqd.eq.1) then + limit=50000 + ccflim=2.5 + endif + ccfok=.false. + + if(nqd.eq.1) then + nfa1=nfqso-ntol + nfb1=nfqso+ntol + ia=max(1,nint((nfa1-nf0)/df3)) + ib=min(NSMAX,nint((nfb1-nf0)/df3)) + ccfok(ia:ib)=(ccfred(ia:ib).gt.(ccflim-2.0)) .and. & + (red2(ia:ib).gt.(red2lim-1.0)) + ia1=ia + ib1=ib + else + nfa1=nf1 + nfb1=nfb + ia=max(1,nint((nfa1-nf0)/df3)) + ib=min(NSMAX,nint((nfb1-nf0)/df3)) + do i=ia,ib + ccfok(i)=ccfred(i).gt.ccflim .and. red2(i).gt.red2lim + enddo + ccfok(ia1:ib1)=.false. + endif + + fgood=0. + do i=ia,ib + if(done(i) .or. (.not.ccfok(i))) cycle + f=(i-1)*df3 + if(nqd.eq.1 .or. & + (ccfred(i).ge.ccflim .and. abs(f-fgood).gt.10.0*df8)) then + + if(nqd.eq.0) nfreqs0=nfreqs0+1 + if(nqd.eq.1) nfreqs1=nfreqs1+1 + + call timer('softsym ',0) + fpk=nf0 + df3*(i-1) + + call softsym(id2,npts8,nsps8,newdat,fpk,syncpk,snrdb,xdt, & + freq,drift,schk,i1SoftSymbols) + call timer('softsym ',1) + + sync=(syncpk+1)/4.0 + if(maxval(i1SoftSymbols).eq.0) cycle + if(nqd.eq.1 .and. ((sync.lt.0.5) .or. (schk.lt.2.0))) cycle + if(nqd.ne.1 .and. ((sync.lt.1.0) .or. (schk.lt.schklim))) cycle + + call timer('jt9fano ',0) + call jt9fano(i1SoftSymbols,limit,nlim,msg) + call timer('jt9fano ',1) + + if(sync.lt.0.0 .or. snrdb.lt.dblim-2.0) sync=0.0 + nsync=int(sync) + if(nsync.gt.10) nsync=10 + nsnr=nint(snrdb) + ndrift=nint(drift/df3) + + if(msg.ne.' ') then + if(nqd.eq.0) ndecodes0=ndecodes0+1 + if(nqd.eq.1) ndecodes1=ndecodes1+1 + + write(*,1000) nutc,nsnr,xdt,nint(freq),msg +1000 format(i4.4,i4,f5.1,i5,1x,'@',1x,a22) + write(13,1002) nutc,nsync,nsnr,xdt,freq,ndrift,msg +1002 format(i4.4,i4,i5,f6.1,f8.0,i4,3x,a22,' JT9') + + iaa=max(1,i-1) + ibb=min(NSMAX,i+22) + fgood=f + nsynced=1 + ndecoded=1 + ccfok(iaa:ibb)=.false. + done(iaa:ibb)=.true. + call flush(6) + endif + endif + enddo + call flush(6) + if(nagain.ne.0) exit + enddo + + return +end subroutine decjt9