From 759a2f785e89e409797f1b67541725d2635a2a29 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 29 Jun 2007 18:34:26 +0000 Subject: [PATCH] OK with multicasting data, FFTs starting at t=52 s. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/map65@439 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- datcom.f90 | 2 +- decode1.F90 | 5 +-- map65a.f90 | 107 +++++++++++++++++++++++++++------------------------- recvpkt.F90 | 42 ++++++++++----------- symspec.f90 | 29 +++++++++----- 5 files changed, 97 insertions(+), 88 deletions(-) diff --git a/datcom.f90 b/datcom.f90 index c09c0f726..5ea7b4df9 100644 --- a/datcom.f90 +++ b/datcom.f90 @@ -2,4 +2,4 @@ parameter (NSMAX=60*96000) !Samples per 60 s file integer*2 id !46 MB: raw data from Linrad timf2 character*80 fname80 common/datcom/id(4,NSMAX,2),nutc,newdat2,kbuf,kk,kkdone,nlost, & - nlen,fname80 + t00,nlen,fname80 diff --git a/decode1.F90 b/decode1.F90 index eb9abf113..6b977ed54 100644 --- a/decode1.F90 +++ b/decode1.F90 @@ -28,12 +28,11 @@ subroutine decode1(iarg) newdat2=0 kbuf=1 kk=NSMAX - kkdone=0 + kkdone=-1 newdat=1 endif - if((kk-kkdone).gt.32768) call symspec(id,kbuf,kk,kkdone,rxnoise, & - newspec,newdat,ndecoding) + if((kk-kkdone).gt.32768) call symspec(id,kbuf,kk,kkdone,nutc,t00,newdat) if(ndecoding.gt.0 .and. mode(1:4).eq.'JT65') then ndecdone=0 diff --git a/map65a.f90 b/map65a.f90 index 0c9c634c0..ad806036b 100644 --- a/map65a.f90 +++ b/map65a.f90 @@ -23,6 +23,7 @@ subroutine map65a(newdat) data nfile/0/,nutc0/-999/,nid/0/,ip000/1/,ip001/1/ save + print*,'C ',secnds(t00),nutc,kk,kbuf,kkdone pctlost=nlost/331.03 if(nlost.ne.0) write(*,1001) nutc,nlost,pctlost 1001 format('UTC:',i5.4,' Lost packets:',i6,', or',f6.1,' %') @@ -33,9 +34,6 @@ subroutine map65a(newdat) if(nutc.ne.nutc0) nfile=nfile+1 nutc0=nutc nutcdata=nutc - write(utcdata,1002) nutc -1002 format(i4.4) - utcdata=utcdata(1:2)//':'//utcdata(3:4) open(23,file='CALL3.TXT',status='old') fselect=mousefqso + 1.6 @@ -57,8 +55,8 @@ subroutine map65a(newdat) ib=nint((fb+23000.0)/df + 1.0) endif - kk=0 - nkk=1 + km=0 + nkm=1 nz=n/8 do i=1,NFFT @@ -117,32 +115,32 @@ subroutine map65a(newdat) ! Keep only the best candidate within ftol. if(fshort-fshort0.le.ftol .and. sync2.gt.sync20 & - .and. nkk.eq.2) kk=kk-1 + .and. nkm.eq.2) km=km-1 if(fshort-fshort0.gt.ftol .or. & sync2.gt.sync20) then - kk=kk+1 - sig(kk,1)=nfile - sig(kk,2)=nutc - sig(kk,3)=fshort - sig(kk,4)=syncshort - sig(kk,5)=dt2 - sig(kk,6)=45*(ipol2-1)/57.2957795 - sig(kk,7)=0 - sig(kk,8)=snr2 - sig(kk,9)=0 - sig(kk,10)=0 -! sig(kk,11)=rms0 - sig(kk,12)=savg(ipol2,i) - sig(kk,13)=0 - sig(kk,14)=0 - sig(kk,15)=0 - sig(kk,16)=0 -! sig(kk,17)=0 - sig(kk,18)=0 - msg(kk)=shmsg0(j) + km=km+1 + sig(km,1)=nfile + sig(km,2)=nutc + sig(km,3)=fshort + sig(km,4)=syncshort + sig(km,5)=dt2 + sig(km,6)=45*(ipol2-1)/57.2957795 + sig(km,7)=0 + sig(km,8)=snr2 + sig(km,9)=0 + sig(km,10)=0 +! sig(km,11)=rms0 + sig(km,12)=savg(ipol2,i) + sig(km,13)=0 + sig(km,14)=0 + sig(km,15)=0 + sig(km,16)=0 +! sig(km,17)=0 + sig(km,18)=0 + msg(km)=shmsg0(j) fshort0=fshort sync20=sync2 - nkk=2 + nkm=2 endif endif enddo @@ -155,42 +153,42 @@ subroutine map65a(newdat) ! (Am I deleting any good decodes by doing this? Any harm in omitting ! these statements??) if(freq-freq0.le.ftol .and. sync1.gt.sync10 .and. & - nkk.eq.1 .and.nqd.eq.0) kk=kk-1 + nkm.eq.1 .and.nqd.eq.0) km=km-1 if(freq-freq0.gt.ftol .or. sync1.gt.sync10 .and. nqd.eq.0) then nflip=nint(flipk) call decode1a(id(1,1,kbuf),newdat,nfilt,freq,nflip,dphi, & ipol,sync2,a,dt,pol,nkv,nhist,qual,decoded) - kk=kk+1 - sig(kk,1)=nfile - sig(kk,2)=nutc - sig(kk,3)=freq - sig(kk,4)=sync1 - sig(kk,5)=dt - sig(kk,6)=pol - sig(kk,7)=flipk - sig(kk,8)=sync2 - sig(kk,9)=nkv - sig(kk,10)=qual -! sig(kk,11)=rms0 - sig(kk,12)=savg(ipol,i) - sig(kk,13)=a(1) - sig(kk,14)=a(2) - sig(kk,15)=a(3) - sig(kk,16)=a(4) -! sig(kk,17)=a(5) - sig(kk,18)=nhist - msg(kk)=decoded + km=km+1 + sig(km,1)=nfile + sig(km,2)=nutc + sig(km,3)=freq + sig(km,4)=sync1 + sig(km,5)=dt + sig(km,6)=pol + sig(km,7)=flipk + sig(km,8)=sync2 + sig(km,9)=nkv + sig(km,10)=qual +! sig(km,11)=rms0 + sig(km,12)=savg(ipol,i) + sig(km,13)=a(1) + sig(km,14)=a(2) + sig(km,15)=a(3) + sig(km,16)=a(4) +! sig(km,17)=a(5) + sig(km,18)=nhist + msg(km)=decoded freq0=freq sync10=sync1 - nkk=1 + nkm=1 endif endif endif enddo if(nqd.eq.1) then nwrite=0 - do k=1,kk + do k=1,km decoded=msg(k) if(decoded.ne.' ') then nutc=sig(k,2) @@ -229,6 +227,7 @@ subroutine map65a(newdat) write(11,*) '$EOF' call flushqqq(11) + print*,'D ',secnds(t00),nutc,kk,kbuf,kkdone ndecdone=1 endif if(nagain.eq.1) go to 999 @@ -236,9 +235,9 @@ subroutine map65a(newdat) ! Trim the list and produce a sorted index and sizes of groups. ! (Should trimlist remove all but best SNR for given UTC and message content?) - call trimlist(sig,kk,indx,nsiz,nz) + call trimlist(sig,km,indx,nsiz,nz) - do i=1,kk + do i=1,km done(i)=.false. enddo j=0 @@ -307,5 +306,9 @@ subroutine map65a(newdat) 999 nagain=0 close(23) + if(kbuf.eq.1) kkdone=60*96000 + if(kbuf.eq.2) kkdone=0 + kk=kkdone + print*,'E ',secnds(t00),nutc,kk,kbuf,kkdone return end subroutine map65a diff --git a/recvpkt.F90 b/recvpkt.F90 index f20ad7d39..9c12de0f3 100644 --- a/recvpkt.F90 +++ b/recvpkt.F90 @@ -4,9 +4,9 @@ subroutine recvpkt(iarg) ! Receive timf2 packets from Linrad, stuff data into id(). ! This routine runs in a background thread and will never return. -#ifdef Win32 - use dflib -#endif +!#ifdef Win32 +! use dflib +!#endif parameter (NSZ=2*60*96000) real*8 d8(NSZ) @@ -15,7 +15,6 @@ subroutine recvpkt(iarg) logical first real*8 center_freq,buf8 common/plrscom/center_freq,msec,fqso,iptr,nblock,userx_no,iusb,buf8(174) -! 8 4 4 4 2 1 1 1392 include 'datcom.f90' include 'gcom1.f90' include 'gcom2.f90' @@ -36,9 +35,8 @@ subroutine recvpkt(iarg) nblock0=nblock if(lost.ne.0 .and. .not.first) then -! print*,'Lost packets?',nblock,nblock0,lost,rxnoise,mode -! Fill in zeros for the lost data. - nlost=nlost + lost +! print*,'Lost packets:',nblock,nblock0,lost + nlost=nlost + lost ! Insert zeros for the lost data. do i=1,174*lost k=k+1 d8(k)=0 @@ -55,7 +53,6 @@ subroutine recvpkt(iarg) k=0 if(kb.eq.2) k=NSMAX nlost=0 - kbuf=kb endif if(kb.eq.1 .and. (k+174).gt.NSMAX) go to 20 @@ -104,24 +101,25 @@ subroutine recvpkt(iarg) mutcm=mod(nsec/60,60) mutc=100*mutch + mutcm ns=mod(nsec,60) -! write(*,1010) mutc,ns,0.001*msec,k,rxnoise -!1010 format('UTC:',i5.4,' ns:',i3,' t:',f10.3,' k:',i8) nsec0=nsec ntx=ntx+transmitting - - nutc=mutc -! if(mod(nsec,60).eq.43) kk=k !### ??? ### - if(mod(nsec,60).eq.52) then - kk=k +!### +! kk=k +! kbuf=kb +!### +! if(ns.eq.42) then +! nutc=mutc +! kbuf=kb +! kk=k +! t00=secnds(0.0) +! endif + if(ns.eq.52) then + nutc=mutc kbuf=kb - klost=nlost -! if(ntx.lt.20) then -! newdat=1 -! ndecoding=1 -! endif -! ntx=0 + kk=k + t00=secnds(0.0) + print*,'A ',0.0,nutc,kk,kbuf,kkdone endif - print*,ns,nutc,kbuf,kk,kkdone endif endif diff --git a/symspec.f90 b/symspec.f90 index 812e0eec4..7c79d2af4 100644 --- a/symspec.f90 +++ b/symspec.f90 @@ -1,28 +1,34 @@ -subroutine symspec(id,kbuf,kk,kkdone,rxnoise,newspec,newdat,ndecoding) +subroutine symspec(id,kbuf,kk,kkdone,nutc,t00,newdat) ! Compute spectra at four polarizations, using half-symbol steps. parameter (NSMAX=60*96000) - integer*2 id(4,NSMAX) + integer*2 id(4,NSMAX,2) complex z real*8 ts,hsym include 'spcom.f90' + include 'gcom2.f90' complex cx(NFFT),cy(NFFT) ! pad to 32k with zeros + data kbuf0/-999/ + save + print*,'B ',secnds(t00),0,kk,kbuf,kkdone fac=0.0002 * 10.0**(0.05*(-rxnoise)) hsym=2048.d0*96000.d0/11025.d0 !Samples per half symbol npts=hsym !Integral samples per half symbol ntot=322 !Half symbols per transmission ! ntot=279 !Half symbols in 51.8 sec - if(kkdone.eq.0) then + if(kbuf.ne.kbuf0 .or. kkdone.eq.-1) then + kkdone=0 + kbuf0=kbuf + ts=1.d0 - hsym + n=0 do ip=1,4 do i=1,NFFT szavg(ip,i)=0. enddo enddo - ts=1.d0 - hsym - n=0 endif do nn=1,ntot @@ -31,11 +37,11 @@ subroutine symspec(id,kbuf,kk,kkdone,rxnoise,newspec,newdat,ndecoding) i1=ts+2*hsym !Next starting sample pointer ts=ts+hsym !OK, update the exact sample pointer do i=1,npts !Copy data to FFT arrays - xr=fac*id(1,i0+i) - xi=fac*id(2,i0+i) + xr=fac*id(1,i0+i,kbuf) + xi=fac*id(2,i0+i,kbuf) cx(i)=cmplx(xr,xi) - yr=fac*id(3,i0+i) - yi=fac*id(4,i0+i) + yr=fac*id(3,i0+i,kbuf) + yi=fac*id(4,i0+i,kbuf) cy(i)=cmplx(yr,yi) enddo @@ -86,12 +92,15 @@ subroutine symspec(id,kbuf,kk,kkdone,rxnoise,newspec,newdat,ndecoding) ! if(n.eq.ntot) then if(n.ge.279) then call move(ssz5,ss5,322*NFFT) + write(utcdata,1002) nutc +1002 format(i4.4) + utcdata=utcdata(1:2)//':'//utcdata(3:4) newspec=1 call move(ssz,ss,4*322*NFFT) call move(szavg,savg,4*NFFT) newdat=1 ndecoding=1 - go to 999 + return endif kkdone=i1-1 nhsym=n