diff --git a/lib/decode65a.f90 b/lib/decode65a.f90 index 18f7b4546..8d3ac902b 100644 --- a/lib/decode65a.f90 +++ b/lib/decode65a.f90 @@ -1,6 +1,6 @@ subroutine decode65a(dd,npts,newdat,nqd,f0,nflip,mode65,ntrials, & naggressive,ndepth,mycall,hiscall,hisgrid,nexp_decode,sync2, & - a,dt,nft,qual,nhist,decoded) + a,dt,nft,qual,nhist,nsmo,decoded) ! Apply AFC corrections to a candidate JT65 signal, then decode it. @@ -12,6 +12,7 @@ subroutine decode65a(dd,npts,newdat,nqd,f0,nflip,mode65,ntrials, & complex cx1(NMAX/8) !Data at 1378.125 sps, offset by 355.3 Hz complex c5x(NMAX/32) !Data at 344.53125 Hz complex c5a(512) + real s1(-255:256,126) real s2(66,126) real a(5) logical first @@ -60,8 +61,8 @@ subroutine decode65a(dd,npts,newdat,nqd,f0,nflip,mode65,ntrials, & df=1378.125/nfft j=int(dtbest*1378.125) - c5a=cmplx(0.0,0.0) call timer('sh_ffts ',0) + c5a=cmplx(0.0,0.0) do k=1,nsym do i=1,nfft j=j+1 @@ -72,23 +73,44 @@ subroutine decode65a(dd,npts,newdat,nqd,f0,nflip,mode65,ntrials, & endif enddo call four2a(c5a,nfft,1,1,1) - do i=1,66 + do i=1,512 jj=i - if(mode65.eq.2) jj=2*i-1 - if(mode65.eq.4) then -! jj=4*i-3 - ff=4*(i-1)*df - 355.297852 - jj=nint(ff/df)+1 - if(jj.lt.1) jj=jj+512 - endif - s2(i,k)=real(c5a(jj))**2 + aimag(c5a(jj))**2 + if(i.gt.256) jj=i-512 + s1(jj,k)=real(c5a(i))**2 + aimag(c5a(i))**2 enddo enddo call timer('sh_ffts ',1) call timer('dec65b ',0) - call decode65b(s2,nflip,mode65,ntrials,naggressive,ndepth, & - mycall,hiscall,hisgrid,nexp_decode,nqd,nft,qual,nhist,decoded) + maxsmo=0 + if(mode65.eq.2) maxsmo=2 + if(mode65.eq.4) maxsmo=5 + do ismo=0,maxsmo + if(ismo.gt.0) then + do j=1,126 + call smo121(s1(-255,j),512) + enddo + endif + + do i=1,66 + jj=i + if(mode65.eq.2) jj=2*i-1 + if(mode65.eq.4) then + ff=4*(i-1)*df - 355.297852 + jj=nint(ff/df)+1 + endif + s2(i,1:126)=s1(jj,1:126) + enddo + + call decode65b(s2,nflip,mode65,ntrials,naggressive,ndepth, & + mycall,hiscall,hisgrid,nexp_decode,nqd,nft,qual,nhist,decoded) + if(nft.eq.1) then +!### Should also deal with nft=2 solutions, if no nft=1. + nsmo=ismo + exit + endif + enddo + call timer('dec65b ',1) return diff --git a/lib/decoder.f90 b/lib/decoder.f90 index fea7b2744..b75cea382 100644 --- a/lib/decoder.f90 +++ b/lib/decoder.f90 @@ -215,16 +215,23 @@ contains integer, intent(in) :: hard_min integer, intent(in) :: aggression - integer param(0:8) + integer param(0:9) + integer nsmo real rtt common/test000/param !### TEST ONLY ### + rtt=0.001*param(4) + nsmo=param(9) !$omp critical(decode_results) - write(*,1010) utc,snr,dt,freq,decoded -1010 format(i4.4,i4,f5.1,i5,1x,'#',1x,a22) - 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) + if(ft.eq.2 .or. nsmo.gt.0) then + write(*,1010) utc,snr,dt,freq,decoded,ft,nsmo + else + write(*,1010) utc,snr,dt,freq,decoded +1010 format(i4.4,i4,f5.1,i5,1x,'#',1x,a22,i4,i2) + endif + write(13,1012) utc,nint(sync),snr,dt,float(freq),drift,decoded,ft,nsmo +1012 format(i4.4,i4,i5,f6.1,f8.0,i4,3x,a22,' JT65',i4,i2) call flush(6) ! write(79,3001) utc,sync,snr,dt,freq,candidates, & ! hard_min,total_min,rtt,tries,ft,min(qual,99),decoded diff --git a/lib/extract.f90 b/lib/extract.f90 index 4bf071434..4f7ede979 100644 --- a/lib/extract.f90 +++ b/lib/extract.f90 @@ -24,7 +24,7 @@ subroutine extract(s3,nadd,ntrials,naggressive,ndepth,mycall_12, & integer dat4(12) integer mrsym(63),mr2sym(63),mrprob(63),mr2prob(63) integer correct(63),tmp(63) - integer param(0:8) + integer param(0:9) logical ltext common/chansyms65/correct common/test000/param !### TEST ONLY ### @@ -72,8 +72,6 @@ subroutine extract(s3,nadd,ntrials,naggressive,ndepth,mycall_12, & call interleave63(mr2sym,-1) !from second-most-reliable symbols call interleave63(mr2prob,-1) ntry=0 - iftest=0 - if(iftest.eq.2) go to 10 call timer('ftrsd ',0) param=0 @@ -93,9 +91,8 @@ subroutine extract(s3,nadd,ntrials,naggressive,ndepth,mycall_12, & r0=0.90 endif if(ntotal.le.nd0 .and. rtt.le.r0) nft=1 - if(iftest.eq.1) nft=1 !### TEST ONLY ### -10 if(iftest.eq.2 .or. (nft.eq.0 .and. ndepth.ge.5)) then + if(nft.eq.0 .and. ndepth.ge.5) then mode65=1 flip=1.0 qmin=1.0 diff --git a/lib/jt65_decode.f90 b/lib/jt65_decode.f90 index 1ab84662c..8870311cc 100644 --- a/lib/jt65_decode.f90 +++ b/lib/jt65_decode.f90 @@ -81,7 +81,7 @@ contains common/decstats/ntry65a,ntry65b,n65a,n65b,num9,numfano common/steve/thresh0 common/test000/ncandidates,nhard_min,nsoft_min,nera_best,nrtt1000, & - ntotal_min,ntry,nq1000,npp1 !### TEST ONLY ### + ntotal_min,ntry,nq1000,npp1,nsmo !### TEST ONLY ### ! 0 1 2 3 4 5 6 7 8 9 10 11 data h0/41,42,43,43,44,45,46,47,48,48,49,49/ @@ -161,7 +161,7 @@ contains call timer('decod65a',0) call decode65a(dd,npts,first_time,nqd,freq,nflip,mode65,nvec, & naggressive,ndepth,mycall,hiscall,hisgrid,nexp_decode, & - sync2,a,dtx,nft,qual,nhist,decoded) + sync2,a,dtx,nft,qual,nhist,nsmo,decoded) call timer('decod65a',1) n=naggressive rtt=0.001*nrtt1000 diff --git a/lib/jt9.f90 b/lib/jt9.f90 index dcfe3b018..e7ca5eb4b 100644 --- a/lib/jt9.f90 +++ b/lib/jt9.f90 @@ -19,8 +19,9 @@ program jt9 character c character(len=500) optarg, infile character wisfile*80 +!### ndepth was defined as 60001. Why??? integer :: arglen,stat,offset,remain,mode=0,flow=200,fsplit=2700, & - fhigh=4000,nrxfreq=1500,ntrperiod=1,ndepth=60001,nexp_decode=0 + fhigh=4000,nrxfreq=1500,ntrperiod=1,ndepth=1,nexp_decode=0 logical :: read_files = .true., tx9 = .false., display_help = .false. type (option) :: long_options(23) = [ & option ('help', .false., 'h', 'Display this help message', ''), &