Tick marks on waterfall displays.

Display percent of deopped packets.
Save all decodes to ALL65.txt.
Shift F12/F11 to inrecment/decrement fqso.
Save even/odd ip00 separately.


git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/map65@414 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
Joe Taylor 2007-06-24 23:26:17 +00:00
parent 648d63e207
commit 3b219465c7
6 changed files with 78 additions and 64 deletions

View File

@ -11,7 +11,7 @@
! 18 test file to be transmitted (wsjtgen.f90) ! 18 test file to be transmitted (wsjtgen.f90)
! 19 bandmap.txt ! 19 bandmap.txt
! 20 bandmap2.txt ! 20 bandmap2.txt
! 21 ALL.TXT ! 21 ALL65.TXT
! 22 kvasd.dat ! 22 kvasd.dat
! 23 CALL3.TXT ! 23 CALL3.TXT
@ -88,10 +88,10 @@ subroutine ftn_init
endfile 20 endfile 20
#ifdef Win32 #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) access='append',share='denynone',err=950)
#else #else
open(21,file=appdir(:iz)//'/ALL.TXT',status='unknown', & open(21,file=appdir(:iz)//'/ALL65.TXT',status='unknown', &
access='append',err=950) access='append',err=950)
do i=1,9999999 do i=1,9999999
read(21,*,end=10) cjunk read(21,*,end=10) cjunk
@ -135,7 +135,7 @@ subroutine ftn_init
stop stop
940 print*,'Error opening DEBUG.TXT' 940 print*,'Error opening DEBUG.TXT'
stop stop
950 print*,'Error opening ALL.TXT' 950 print*,'Error opening ALL65.TXT'
stop stop
end subroutine ftn_init end subroutine ftn_init

View File

@ -6,6 +6,7 @@ real s2 !2d spectrum for horizontal waterfall GUI
real ccf !CCF in time (blue curve) Decoder real ccf !CCF in time (blue curve) Decoder
real green !Data for green line GUI real green !Data for green line GUI
real fselect !Specified QSO frequency GUI real fselect !Specified QSO frequency GUI
real pctlost !Percent of lost packets Decoder
real rxnoise !Rx noise in dB recvpkt real rxnoise !Rx noise in dB recvpkt
integer ngreen !Length of green GUI integer ngreen !Length of green GUI
real dgain !Digital audio gain setting GUI real dgain !Digital audio gain setting GUI
@ -89,18 +90,18 @@ character*80 filetokillb
character*12 pttport character*12 pttport
character*8 utcdata !HHMM UTC for the processed data Decoder character*8 utcdata !HHMM UTC for the processed data Decoder
common/gcom2/ps0(431),psavg(450),s2(64,3100),ccf(-5:540), & common/gcom2/ps0(431),psavg(450),s2(64,3100),ccf(-5:540), &
green(500),fselect,rxnoise,ngreen,dgain,iter,ndecoding, & green(500),fselect,pctlost,rxnoise,ngreen,dgain,iter,ndecoding, &
ndecoding0,mousebutton, & ndecoding0,mousebutton, &
ndecdone,npingtime,ierr,lauto,mantx,nrestart,ntr,nmsg,nsave,nadd5, & 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, & nclearave,nfreeze,nafc,newspec,nmode,mode65,nclip,ndebug,nblank,nport, &
mousedf,mousefqso,neme,nsked,naggressive,ntx2,nagain,nsavelast, & mousedf,mousefqso,neme,nsked,naggressive,ntx2,nagain,nsavelast, &
shok,sendingsh,d2a(661500),d2b(661500),b(60000),jza,jzb,ntime, & shok,sendingsh,d2a(661500),d2b(661500),b(60000),jza,jzb,ntime, &
idinterval,msmax,lenappdir,idf,ndiskdat,nlines,nflat,ntxreq,ntxnow, & idinterval,msmax,lenappdir,idf,ndiskdat,nlines,nflat,ntxreq,ntxnow,&
ndepth,nspecial,ndf,nfmid,nfrange,ss1(-224:224),ss2(-224:224), & ndepth,nspecial,ndf,nfmid,nfrange,ss1(-224:224),ss2(-224:224), &
mycall,hiscall,hisgrid,txmsg,sending,mode,fname0,fnamea, & mycall,hiscall,hisgrid,txmsg,sending,mode,fname0,fnamea, &
fnameb,decodedfile,AppDir,filetokilla,filetokillb,utcdate,pttport, & fnameb,decodedfile,AppDir,filetokilla,filetokillb,utcdate,pttport, &
utcdata utcdata
!### volatile /gcom2/ !### volatile /gcom2/

View File

@ -880,6 +880,14 @@ def left_arrow(event=NONE):
if n==Audio.gcom2.mousedf: n=n-5 if n==Audio.gcom2.mousedf: n=n-5
Audio.gcom2.mousedf=n 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 #------------------------------------------------------ GenStdMsgs
def GenStdMsgs(event=NONE): def GenStdMsgs(event=NONE):
global altmsg global altmsg
@ -1086,8 +1094,10 @@ def update():
t=time.strftime('%Y %b %d\n%H:%M:%S',utc) t=time.strftime('%Y %b %d\n%H:%M:%S',utc)
Audio.gcom2.utcdate=t[:12] Audio.gcom2.utcdate=t[:12]
ldate.configure(text=t) ldate.configure(text=t)
t="Rx noise: %.1f" % Audio.gcom2.rxnoise t="Rx noise: %.1f dB" % Audio.gcom2.rxnoise
msg5.configure(text=t) msg5.configure(text=t)
t="Drop: %.1f %%" % Audio.gcom2.pctlost
msg6.configure(text=t)
root_geom=root.geometry() root_geom=root.geometry()
try: try:
bm_geom=bm.geometry() bm_geom=bm.geometry()
@ -1363,7 +1373,7 @@ filemenu.add_separator()
filemenu.add('command', label = 'Delete all *.WAV files in RxWav', \ filemenu.add('command', label = 'Delete all *.WAV files in RxWav', \
command = delwav) command = delwav)
filemenu.add_separator() 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_separator()
filemenu.add('command', label = 'Exit', command = quit) filemenu.add('command', label = 'Exit', command = quit)
@ -1528,7 +1538,9 @@ root.bind_all('<Control-F8>', ModeJT65C)
root.bind_all('<F10>', showspecjt) root.bind_all('<F10>', showspecjt)
root.bind_all('<Shift-F10>', astro1) root.bind_all('<Shift-F10>', astro1)
root.bind_all('<F11>',left_arrow) root.bind_all('<F11>',left_arrow)
root.bind_all('<Shift-F11>',dec_fqso)
root.bind_all('<F12>',right_arrow) root.bind_all('<F12>',right_arrow)
root.bind_all('<Shift-F12>',inc_fqso)
root.bind_all('<Alt-Key-1>',btx1) root.bind_all('<Alt-Key-1>',btx1)
root.bind_all('<Alt-Key-2>',btx2) root.bind_all('<Alt-Key-2>',btx2)
root.bind_all('<Alt-Key-3>',btx3) root.bind_all('<Alt-Key-3>',btx3)
@ -1754,6 +1766,8 @@ msg4=Message(iframe6, text="", width=300,relief=SUNKEN)
msg4.pack(side=LEFT, fill=X, padx=1) msg4.pack(side=LEFT, fill=X, padx=1)
msg5=Message(iframe6, text="", width=300,relief=SUNKEN) msg5=Message(iframe6, text="", width=300,relief=SUNKEN)
msg5.pack(side=LEFT, fill=X, padx=1) 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=Message(iframe6, text=' ', width=300,relief=SUNKEN)
msg7.pack(side=RIGHT, fill=X, padx=1) msg7.pack(side=RIGHT, fill=X, padx=1)
iframe6.pack(expand=1, fill=X, padx=4) iframe6.pack(expand=1, fill=X, padx=4)

View File

@ -15,17 +15,20 @@ subroutine map65a
character*3 shmsg0(4),shmsg character*3 shmsg0(4),shmsg
integer indx(MAXMSG),nsiz(MAXMSG) integer indx(MAXMSG),nsiz(MAXMSG)
logical done(MAXMSG) logical done(MAXMSG)
logical even
character decoded*22,blank*22 character decoded*22,blank*22
include 'datcom.f90' include 'datcom.f90'
common/spcom/ip0,ss(4,322,NFFT),ss5(322,NFFT) common/spcom/ip0,ss(4,322,NFFT),ss5(322,NFFT)
data blank/' '/ data blank/' '/
data shmsg0/'ATT','RO ','RRR','73 '/ 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' include 'gcom2.f90'
save save
if(nlost.ne.0) write(*,1001) nutc,nlost pctlost=nlost/331.03
1001 format('UTC:',i5.4,' Lost packets:',i6) 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.eq.0) newdat2=1 !###
if(newdat2.gt.0) nid=1 if(newdat2.gt.0) nid=1
@ -75,7 +78,8 @@ subroutine map65a
nfilt=2 !nfilt=2 is faster for selected freq nfilt=2 !nfilt=2 is faster for selected freq
do kpol=0,3 do kpol=0,3
freq=fselect + 0.001*mousedf 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 if(ip0.gt.4) ip0=ip0-4
dt00=2.314240 dt00=2.314240
dt=dt00 dt=dt00
@ -91,7 +95,9 @@ subroutine map65a
if(nkv.gt.0) go to 5 if(nkv.gt.0) go to 5
enddo enddo
5 ip00=ip0 5 if(even) ip000=ip0
if(.not.even) ip001=ip0
nkHz=nint(freq-1.600) nkHz=nint(freq-1.600)
npol=nint(57.2957795*pol) npol=nint(57.2957795*pol)
nqual=qual nqual=qual
@ -304,6 +310,8 @@ subroutine map65a
nsync2=nint(10.0*log10(sync2)) - 40 !### empirical ### nsync2=nint(10.0*log10(sync2)) - 40 !### empirical ###
write(26,1014) f0,ndf,ndf0,ndf1,ndf2,dt,npol,nsync1, & write(26,1014) f0,ndf,ndf0,ndf1,ndf2,dt,npol,nsync1, &
nsync2,nutc,decoded,nkv,nqual,nhist 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) 1014 format(f7.3,i5,3i3,f5.1,i5,i3,i4,i5.4,2x,a22,3i3)
endif endif

View File

@ -43,6 +43,7 @@ frange0=2000
isec0=-99 isec0=-99
mode0="" mode0=""
mousedf0=0 mousedf0=0
mousefqso0=0
naxis=IntVar() naxis=IntVar()
ncall=0 ncall=0
newMinute=0 newMinute=0
@ -123,11 +124,13 @@ def fdf_change2(event):
def set_fqso(event): def set_fqso(event):
n=int(g.Freq + 0.5) n=int(g.Freq + 0.5)
Audio.gcom2.mousefqso=n Audio.gcom2.mousefqso=n
df_mark()
#---------------------------------------------------- set_freezedf #---------------------------------------------------- set_freezedf
def set_freezedf(event): def set_freezedf(event):
n=int(g.DFreq + 0.5) n=int(g.DFreq + 0.5)
Audio.gcom2.mousedf=n Audio.gcom2.mousedf=n
df_mark()
#------------------------------------------------------ ftnstr #------------------------------------------------------ ftnstr
def ftnstr(x): def ftnstr(x):
@ -139,40 +142,27 @@ def ftnstr(x):
#---------------------------------------------------- df_mark #---------------------------------------------------- df_mark
def df_mark(): def df_mark():
draw_axis() draw_axis()
if nmark.get()==0 or Audio.gcom2.nfreeze: # if nmark.get()==0 or Audio.gcom2.nfreeze:
fstep=10.0*11025.0/4096.0 # Mark QSO freq in top graph
if g.mode[4:5]=='B': fstep=2*fstep color='green'
if g.mode[4:5]=='C': fstep=4*fstep 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) # Mark sync tone and top JT65 tone (green) and shorthand tones (red)
dx=288.7 + (1500-fmid)/df fstep=20.0*11025.0/4096.0
color='green' x1=375.0 + (Audio.gcom2.mousedf + 6.6*fstep)/df
x1=(Audio.gcom2.mousedf + 6.6*fstep)/df + dx c2.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) c2.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):
for i in range(5): x1=375.0 + (Audio.gcom2.mousedf + i*fstep)/df
x1=(Audio.gcom2.mousedf + i*fstep)/df + dx j=12
j=12 if i>0: j=15
if i>0: j=15 if i!=1: c2.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) if i!=1: c2.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'
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
#---------------------------------------------------- freq_range #---------------------------------------------------- freq_range
def freq_range(event): def freq_range(event):
@ -221,7 +211,7 @@ def freeze_decode(event):
def update(): def update():
global a,a2,b0,c0,g0,im,im2,isec0,line0,line02,newMinute,\ global a,a2,b0,c0,g0,im,im2,isec0,line0,line02,newMinute,\
nscroll,pim,pim2, \ nscroll,pim,pim2, \
root_geom,t0,mousedf0,nfreeze0,tol0,mode0,nmark0, \ root_geom,t0,mousedf0,mousefqso0,nfreeze0,tol0,mode0,nmark0, \
fmid,fmid0,frange,frange0 fmid,fmid0,frange,frange0
utc=time.gmtime(time.time()+0.1*Audio.gcom1.ndsec) utc=time.gmtime(time.time()+0.1*Audio.gcom1.ndsec)
@ -299,13 +289,14 @@ def update():
newMinute=0 newMinute=0
Audio.gcom2.newspec=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() df_mark()
# The following int() calls are to ensure that the values copied to # 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) mousedf0=int(Audio.gcom2.mousedf)
tol0=int(Audio.gcom2.dftolerance) mousefqso0=int(Audio.gcom2.mousefqso)
if Audio.gcom2.nfreeze != nfreeze0: if Audio.gcom2.nfreeze != nfreeze0:
if not Audio.gcom2.nfreeze: draw_axis() if not Audio.gcom2.nfreeze: draw_axis()
@ -376,10 +367,10 @@ def draw_axis():
c2.create_text(x,y,text=str(ix)) c2.create_text(x,y,text=str(ix))
c2.create_line(i,25,i,j,fill='black') c2.create_line(i,25,i,j,fill='black')
tol=Audio.gcom2.dftolerance # tol=Audio.gcom2.dftolerance
x1=(Audio.gcom2.mousedf-tol)/xdf2 + 0.5*NX # x1=(Audio.gcom2.mousedf-tol)/xdf2 + 0.5*NX
x2=(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) # c2.create_line(x1,25,x2,25,fill='green',width=2)
#-------------------------------------------------------- Create GUI widgets #-------------------------------------------------------- Create GUI widgets
@ -476,8 +467,6 @@ Widget.bind(c2,"<Shift-Button-3>",freq_range)
graph2=Canvas(iframe1, bg='black', width=NX, height=NY,bd=0,cursor='crosshair') graph2=Canvas(iframe1, bg='black', width=NX, height=NY,bd=0,cursor='crosshair')
graph2.pack(side=TOP) graph2.pack(side=TOP)
Widget.bind(graph2,"<Motion>",fdf_change2) Widget.bind(graph2,"<Motion>",fdf_change2)
#Widget.bind(graph2,"<Button-1>",decode_request)
#Widget.bind(graph2,"<Button-3>",decode_request)
Widget.bind(graph2,"<Button-1>",set_freezedf) Widget.bind(graph2,"<Button-1>",set_freezedf)
Widget.bind(graph2,"<Double-Button-1>",freeze_decode) Widget.bind(graph2,"<Double-Button-1>",freeze_decode)
iframe1.pack(expand=1, fill=X) iframe1.pack(expand=1, fill=X)
@ -553,7 +542,9 @@ if g.cmap == "AFMHot":
npal.set(5) npal.set(5)
#---------------------------------------------- Display GUI and start mainloop #---------------------------------------------- Display GUI and start mainloop
draw_axis() #draw_axis()
df_mark()
try: try:
ndevin=g.ndevin.get() ndevin=g.ndevin.get()
except: except:

View File

@ -13,7 +13,7 @@ C Compute spectra at four polarizations, using half-symbol steps.
! fac=1.e-4 ! fac=1.e-4
! fac=1.7e-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 hsym=2048.d0*96000.d0/11025.d0 !Samples per half symbol
npts=hsym !Integral samples per half symbol npts=hsym !Integral samples per half symbol