diff --git a/ftn_init.F90 b/ftn_init.F90 index 7614dc93c..e6e5009fb 100644 --- a/ftn_init.F90 +++ b/ftn_init.F90 @@ -11,7 +11,7 @@ ! 18 test file to be transmitted (wsjtgen.f90) ! 19 bandmap.txt ! 20 bandmap2.txt -! 21 ALL.TXT +! 21 ALL65.TXT ! 22 kvasd.dat ! 23 CALL3.TXT @@ -88,10 +88,10 @@ subroutine ftn_init endfile 20 #ifdef Win32 - open(21,file=appdir(:iz)//'/ALL.TXT',status='unknown', & + open(21,file=appdir(:iz)//'/ALL65.TXT',status='unknown', & access='append',share='denynone',err=950) #else - open(21,file=appdir(:iz)//'/ALL.TXT',status='unknown', & + open(21,file=appdir(:iz)//'/ALL65.TXT',status='unknown', & access='append',err=950) do i=1,9999999 read(21,*,end=10) cjunk @@ -135,7 +135,7 @@ subroutine ftn_init stop 940 print*,'Error opening DEBUG.TXT' stop -950 print*,'Error opening ALL.TXT' +950 print*,'Error opening ALL65.TXT' stop end subroutine ftn_init diff --git a/gcom2.f90 b/gcom2.f90 index 634acb861..3bd96e218 100644 --- a/gcom2.f90 +++ b/gcom2.f90 @@ -6,6 +6,7 @@ real s2 !2d spectrum for horizontal waterfall GUI real ccf !CCF in time (blue curve) Decoder real green !Data for green line GUI real fselect !Specified QSO frequency GUI +real pctlost !Percent of lost packets Decoder real rxnoise !Rx noise in dB recvpkt integer ngreen !Length of green GUI real dgain !Digital audio gain setting GUI @@ -89,18 +90,18 @@ character*80 filetokillb character*12 pttport character*8 utcdata !HHMM UTC for the processed data Decoder -common/gcom2/ps0(431),psavg(450),s2(64,3100),ccf(-5:540), & - green(500),fselect,rxnoise,ngreen,dgain,iter,ndecoding, & +common/gcom2/ps0(431),psavg(450),s2(64,3100),ccf(-5:540), & + green(500),fselect,pctlost,rxnoise,ngreen,dgain,iter,ndecoding, & ndecoding0,mousebutton, & ndecdone,npingtime,ierr,lauto,mantx,nrestart,ntr,nmsg,nsave,nadd5, & - dftolerance,LDecoded,rxdone,monitoring,nzap,nsavecum,minsigdb, & + dftolerance,LDecoded,rxdone,monitoring,nzap,nsavecum,minsigdb, & nclearave,nfreeze,nafc,newspec,nmode,mode65,nclip,ndebug,nblank,nport, & - mousedf,mousefqso,neme,nsked,naggressive,ntx2,nagain,nsavelast, & - shok,sendingsh,d2a(661500),d2b(661500),b(60000),jza,jzb,ntime, & - idinterval,msmax,lenappdir,idf,ndiskdat,nlines,nflat,ntxreq,ntxnow, & - ndepth,nspecial,ndf,nfmid,nfrange,ss1(-224:224),ss2(-224:224), & - mycall,hiscall,hisgrid,txmsg,sending,mode,fname0,fnamea, & - fnameb,decodedfile,AppDir,filetokilla,filetokillb,utcdate,pttport, & + mousedf,mousefqso,neme,nsked,naggressive,ntx2,nagain,nsavelast, & + shok,sendingsh,d2a(661500),d2b(661500),b(60000),jza,jzb,ntime, & + idinterval,msmax,lenappdir,idf,ndiskdat,nlines,nflat,ntxreq,ntxnow,& + ndepth,nspecial,ndf,nfmid,nfrange,ss1(-224:224),ss2(-224:224), & + mycall,hiscall,hisgrid,txmsg,sending,mode,fname0,fnamea, & + fnameb,decodedfile,AppDir,filetokilla,filetokillb,utcdate,pttport, & utcdata !### volatile /gcom2/ diff --git a/map65.py b/map65.py index fd6a3ead3..38b637997 100644 --- a/map65.py +++ b/map65.py @@ -879,6 +879,14 @@ def left_arrow(event=NONE): if n<0: n=n-5 if n==Audio.gcom2.mousedf: n=n-5 Audio.gcom2.mousedf=n + +#------------------------------------------------------ inc_fqso +def inc_fqso(event=NONE): + Audio.gcom2.mousefqso=Audio.gcom2.mousefqso + 1 + +#------------------------------------------------------ dec_fqso +def dec_fqso(event=NONE): + Audio.gcom2.mousefqso=Audio.gcom2.mousefqso - 1 #------------------------------------------------------ GenStdMsgs def GenStdMsgs(event=NONE): @@ -1086,8 +1094,10 @@ def update(): t=time.strftime('%Y %b %d\n%H:%M:%S',utc) Audio.gcom2.utcdate=t[:12] ldate.configure(text=t) - t="Rx noise: %.1f" % Audio.gcom2.rxnoise + t="Rx noise: %.1f dB" % Audio.gcom2.rxnoise msg5.configure(text=t) + t="Drop: %.1f %%" % Audio.gcom2.pctlost + msg6.configure(text=t) root_geom=root.geometry() try: bm_geom=bm.geometry() @@ -1363,7 +1373,7 @@ filemenu.add_separator() filemenu.add('command', label = 'Delete all *.WAV files in RxWav', \ command = delwav) filemenu.add_separator() -filemenu.add('command', label = 'Erase ALL.TXT', command = del_all) +filemenu.add('command', label = 'Erase ALL65.TXT', command = del_all) filemenu.add_separator() filemenu.add('command', label = 'Exit', command = quit) @@ -1528,7 +1538,9 @@ root.bind_all('', ModeJT65C) root.bind_all('', showspecjt) root.bind_all('', astro1) root.bind_all('',left_arrow) +root.bind_all('',dec_fqso) root.bind_all('',right_arrow) +root.bind_all('',inc_fqso) root.bind_all('',btx1) root.bind_all('',btx2) root.bind_all('',btx3) @@ -1754,6 +1766,8 @@ msg4=Message(iframe6, text="", width=300,relief=SUNKEN) msg4.pack(side=LEFT, fill=X, padx=1) msg5=Message(iframe6, text="", width=300,relief=SUNKEN) msg5.pack(side=LEFT, fill=X, padx=1) +msg6=Message(iframe6, text="", width=300,relief=SUNKEN) +msg6.pack(side=LEFT, fill=X, padx=1) msg7=Message(iframe6, text=' ', width=300,relief=SUNKEN) msg7.pack(side=RIGHT, fill=X, padx=1) iframe6.pack(expand=1, fill=X, padx=4) diff --git a/map65a.f90 b/map65a.f90 index 1a7538ed6..81556bf34 100644 --- a/map65a.f90 +++ b/map65a.f90 @@ -15,17 +15,20 @@ subroutine map65a character*3 shmsg0(4),shmsg integer indx(MAXMSG),nsiz(MAXMSG) logical done(MAXMSG) + logical even character decoded*22,blank*22 include 'datcom.f90' common/spcom/ip0,ss(4,322,NFFT),ss5(322,NFFT) data blank/' '/ data shmsg0/'ATT','RO ','RRR','73 '/ - data nfile/0/,nutc0/-999/,nid/0/,ip00/1/ + data nfile/0/,nutc0/-999/,nid/0/,ip000/1/,ip001/1/ include 'gcom2.f90' save - if(nlost.ne.0) write(*,1001) nutc,nlost -1001 format('UTC:',i5.4,' Lost packets:',i6) + pctlost=nlost/331.03 + if(nlost.ne.0) write(*,1001) nutc,nlost,pctlost +1001 format('UTC:',i5.4,' Lost packets:',i6,', or',f6.1,' %') + even=mod(nutc,2).eq.0 if(newdat2.eq.0) newdat2=1 !### if(newdat2.gt.0) nid=1 @@ -75,7 +78,8 @@ subroutine map65a nfilt=2 !nfilt=2 is faster for selected freq do kpol=0,3 freq=fselect + 0.001*mousedf - ip0=ip00+kpol + if(even) ip0=ip000+kpol + if(.not.even) ip0=ip001+kpol if(ip0.gt.4) ip0=ip0-4 dt00=2.314240 dt=dt00 @@ -91,7 +95,9 @@ subroutine map65a if(nkv.gt.0) go to 5 enddo -5 ip00=ip0 +5 if(even) ip000=ip0 + if(.not.even) ip001=ip0 + nkHz=nint(freq-1.600) npol=nint(57.2957795*pol) nqual=qual @@ -304,6 +310,8 @@ subroutine map65a nsync2=nint(10.0*log10(sync2)) - 40 !### empirical ### write(26,1014) f0,ndf,ndf0,ndf1,ndf2,dt,npol,nsync1, & nsync2,nutc,decoded,nkv,nqual,nhist + write(21,1014) f0,ndf,ndf0,ndf1,ndf2,dt,npol,nsync1, & + nsync2,nutc,decoded,nkv,nqual,nhist 1014 format(f7.3,i5,3i3,f5.1,i5,i3,i4,i5.4,2x,a22,3i3) endif diff --git a/specjt.py b/specjt.py index 4f4da34fa..e88ff1d64 100644 --- a/specjt.py +++ b/specjt.py @@ -43,6 +43,7 @@ frange0=2000 isec0=-99 mode0="" mousedf0=0 +mousefqso0=0 naxis=IntVar() ncall=0 newMinute=0 @@ -123,11 +124,13 @@ def fdf_change2(event): def set_fqso(event): n=int(g.Freq + 0.5) Audio.gcom2.mousefqso=n + df_mark() #---------------------------------------------------- set_freezedf def set_freezedf(event): n=int(g.DFreq + 0.5) Audio.gcom2.mousedf=n + df_mark() #------------------------------------------------------ ftnstr def ftnstr(x): @@ -139,40 +142,27 @@ def ftnstr(x): #---------------------------------------------------- df_mark def df_mark(): draw_axis() - if nmark.get()==0 or Audio.gcom2.nfreeze: - fstep=10.0*11025.0/4096.0 - if g.mode[4:5]=='B': fstep=2*fstep - if g.mode[4:5]=='C': fstep=4*fstep +# if nmark.get()==0 or Audio.gcom2.nfreeze: +# Mark QSO freq in top graph + color='green' + df=96.0/750.0 + x1=393.0 + (Audio.gcom2.mousefqso-125)/df + c.create_line(x1-0.5,25,x1-0.5,12,fill=color) + c.create_line(x1+0.5,25,x1+0.5,12,fill=color) + df=96000.0/32768.0 # Mark sync tone and top JT65 tone (green) and shorthand tones (red) - dx=288.7 + (1500-fmid)/df - color='green' - x1=(Audio.gcom2.mousedf + 6.6*fstep)/df + dx - c.create_line(x1-0.5,25,x1-0.5,12,fill=color) - c.create_line(x1+0.5,25,x1+0.5,12,fill=color) - for i in range(5): - x1=(Audio.gcom2.mousedf + i*fstep)/df + dx - j=12 - if i>0: j=15 - if i!=1: c.create_line(x1-0.5,25,x1-0.5,j,fill=color) - if i!=1: c.create_line(x1+0.5,25,x1+0.5,j,fill=color) - color='red' - -#---------------------------------------------------- change_fmid -##def change_fmid1(): -## global fmid -## fmid=fmid+100 -## if fmid>5000-1000*nfr.get(): fmid=5000-1000*nfr.get() -## -##def change_fmid2(): -## global fmid -## fmid=fmid-100 -## if fmid<1000*nfr.get(): fmid=1000*nfr.get() -## -##def set_fmid(): -## global fmid -## if nfr.get()==1: fmid=1200 -## if nfr.get()==2: fmid=2200 + fstep=20.0*11025.0/4096.0 + x1=375.0 + (Audio.gcom2.mousedf + 6.6*fstep)/df + c2.create_line(x1-0.5,25,x1-0.5,12,fill=color) + c2.create_line(x1+0.5,25,x1+0.5,12,fill=color) + for i in range(5): + x1=375.0 + (Audio.gcom2.mousedf + i*fstep)/df + j=12 + if i>0: j=15 + if i!=1: c2.create_line(x1-0.5,25,x1-0.5,j,fill=color) + if i!=1: c2.create_line(x1+0.5,25,x1+0.5,j,fill=color) + color='red' #---------------------------------------------------- freq_range def freq_range(event): @@ -221,7 +211,7 @@ def freeze_decode(event): def update(): global a,a2,b0,c0,g0,im,im2,isec0,line0,line02,newMinute,\ nscroll,pim,pim2, \ - root_geom,t0,mousedf0,nfreeze0,tol0,mode0,nmark0, \ + root_geom,t0,mousedf0,mousefqso0,nfreeze0,tol0,mode0,nmark0, \ fmid,fmid0,frange,frange0 utc=time.gmtime(time.time()+0.1*Audio.gcom1.ndsec) @@ -299,13 +289,14 @@ def update(): newMinute=0 Audio.gcom2.newspec=0 - if (Audio.gcom2.mousedf != mousedf0 or Audio.gcom2.dftolerance != tol0): + if (Audio.gcom2.mousedf != mousedf0 or + Audio.gcom2.mousefqso != mousefqso0): df_mark() # The following int() calls are to ensure that the values copied to -# mousedf0 and tol0 are static. +# mousedf0 and mousefqso0 are static. mousedf0=int(Audio.gcom2.mousedf) - tol0=int(Audio.gcom2.dftolerance) + mousefqso0=int(Audio.gcom2.mousefqso) if Audio.gcom2.nfreeze != nfreeze0: if not Audio.gcom2.nfreeze: draw_axis() @@ -376,10 +367,10 @@ def draw_axis(): c2.create_text(x,y,text=str(ix)) c2.create_line(i,25,i,j,fill='black') - tol=Audio.gcom2.dftolerance - x1=(Audio.gcom2.mousedf-tol)/xdf2 + 0.5*NX - x2=(Audio.gcom2.mousedf+tol)/xdf2 + 0.5*NX - c2.create_line(x1,25,x2,25,fill='green',width=2) +# tol=Audio.gcom2.dftolerance +# x1=(Audio.gcom2.mousedf-tol)/xdf2 + 0.5*NX +# x2=(Audio.gcom2.mousedf+tol)/xdf2 + 0.5*NX +# c2.create_line(x1,25,x2,25,fill='green',width=2) #-------------------------------------------------------- Create GUI widgets @@ -476,8 +467,6 @@ Widget.bind(c2,"",freq_range) graph2=Canvas(iframe1, bg='black', width=NX, height=NY,bd=0,cursor='crosshair') graph2.pack(side=TOP) Widget.bind(graph2,"",fdf_change2) -#Widget.bind(graph2,"",decode_request) -#Widget.bind(graph2,"",decode_request) Widget.bind(graph2,"",set_freezedf) Widget.bind(graph2,"",freeze_decode) iframe1.pack(expand=1, fill=X) @@ -553,7 +542,9 @@ if g.cmap == "AFMHot": npal.set(5) #---------------------------------------------- Display GUI and start mainloop -draw_axis() +#draw_axis() +df_mark() + try: ndevin=g.ndevin.get() except: diff --git a/symspec.f b/symspec.f index c6f91e27d..c89dc1cee 100644 --- a/symspec.f +++ b/symspec.f @@ -13,7 +13,7 @@ C Compute spectra at four polarizations, using half-symbol steps. ! fac=1.e-4 ! fac=1.7e-4 - fac=0.0002 * 10.0**(0.1*(-rxnoise)) + 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