mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-20 11:01:54 -05:00
deep65: corrected error in determining p2
sync65: added call to smooth for improved sync in mode JT65C. added +2 dB to SNR estimates for JT65C. wsjt65: cleaned up some display details of decoded lines short65: added calls to smooth for improved shorthand decodes in JT65C. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/trunk@217 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
694d24403d
commit
b30d2e3e8c
30
deep65.F
30
deep65.F
@ -11,7 +11,8 @@
|
|||||||
character*180 line
|
character*180 line
|
||||||
character*4 rpt(MAXRPT)
|
character*4 rpt(MAXRPT)
|
||||||
logical first
|
logical first
|
||||||
integer ncode(63,2*MAXCALLS)
|
integer ncode(63,2*MAXCALLS + 2 + MAXRPT)
|
||||||
|
real pp(2*MAXCALLS + 2 + MAXRPT)
|
||||||
common/tmp9/ mrs(63),mrs2(63)
|
common/tmp9/ mrs(63),mrs2(63)
|
||||||
|
|
||||||
data neme0/-99/
|
data neme0/-99/
|
||||||
@ -73,7 +74,7 @@
|
|||||||
|
|
||||||
mz=1
|
mz=1
|
||||||
if(n.eq.1 .and. j3.lt.1 .and. j4.lt.1 .and.
|
if(n.eq.1 .and. j3.lt.1 .and. j4.lt.1 .and.
|
||||||
+ flip.gt.0.0) mz=MAXRPT+1
|
+ flip.gt.0.0 .and. callsign(1:6).ne.' ') mz=MAXRPT+1
|
||||||
C Test for messages with MyCall + HisCall + report
|
C Test for messages with MyCall + HisCall + report
|
||||||
do m=1,mz
|
do m=1,mz
|
||||||
if(m.gt.1) grid=rpt(m-1)
|
if(m.gt.1) grid=rpt(m-1)
|
||||||
@ -83,7 +84,8 @@ C Test for messages with MyCall + HisCall + report
|
|||||||
k=k+1
|
k=k+1
|
||||||
testmsg(k)=message
|
testmsg(k)=message
|
||||||
call encode65(message,ncode(1,k))
|
call encode65(message,ncode(1,k))
|
||||||
if(m.eq.1) then
|
C Insert CQ message unless sync=OOO (flip=-1).
|
||||||
|
if(m.eq.1 .and. flip.gt.0.0) then
|
||||||
message='CQ '//callgrid(icall)
|
message='CQ '//callgrid(icall)
|
||||||
k=k+1
|
k=k+1
|
||||||
testmsg(k)=message
|
testmsg(k)=message
|
||||||
@ -102,10 +104,7 @@ C Test for messages with MyCall + HisCall + report
|
|||||||
|
|
||||||
p1=-1.e30
|
p1=-1.e30
|
||||||
p2=-1.e30
|
p2=-1.e30
|
||||||
n=0
|
|
||||||
do k=1,ntot
|
do k=1,ntot
|
||||||
C If sync=OOO, no CQ messages
|
|
||||||
if(flip.lt.0.0 .and. testmsg(k)(1:3).eq.'CQ ') go to 30
|
|
||||||
sum=0.
|
sum=0.
|
||||||
ref=ref0
|
ref=ref0
|
||||||
do j=1,63
|
do j=1,63
|
||||||
@ -116,26 +115,25 @@ C If sync=OOO, no CQ messages
|
|||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
p=sum/ref
|
p=sum/ref
|
||||||
n=n+1
|
pp(k)=p
|
||||||
if(p.gt.p1) then
|
if(p.gt.p1) then
|
||||||
if(p1.gt.p2) then
|
|
||||||
p2=p1
|
|
||||||
ip2=ip1
|
|
||||||
endif
|
|
||||||
p1=p
|
p1=p
|
||||||
ip1=k
|
ip1=k
|
||||||
else if(p.gt.p2 .and. p.lt.p1) then
|
|
||||||
p2=p
|
|
||||||
ip2=k
|
|
||||||
endif
|
endif
|
||||||
30 enddo
|
30 enddo
|
||||||
|
|
||||||
ntot=n
|
p2=-1.e30
|
||||||
|
do i=1,ntot
|
||||||
|
if(pp(i).gt.p2 .and. pp(i).ne.p1) p2=pp(i)
|
||||||
|
enddo
|
||||||
|
|
||||||
40 if(mode65.eq.1) bias=max(1.12*p2,0.335)
|
if(mode65.eq.1) bias=max(1.12*p2,0.335)
|
||||||
if(mode65.eq.2) bias=max(1.08*p2,0.405)
|
if(mode65.eq.2) bias=max(1.08*p2,0.405)
|
||||||
if(mode65.ge.4) bias=max(1.04*p2,0.505)
|
if(mode65.ge.4) bias=max(1.04*p2,0.505)
|
||||||
|
|
||||||
|
C This is really weird, but do not remove the following statement!
|
||||||
|
rewind 23
|
||||||
|
|
||||||
qual=100.0*(p1-bias)
|
qual=100.0*(p1-bias)
|
||||||
decoded=' '
|
decoded=' '
|
||||||
c=' '
|
c=' '
|
||||||
|
@ -34,6 +34,10 @@ C Do 16 k FFTs, stepped by 8k. (*** Maybe should step by 4k? ***)
|
|||||||
do j=1,nsteps
|
do j=1,nsteps
|
||||||
k=(j-1)*NH + 1
|
k=(j-1)*NH + 1
|
||||||
call ps(data(k),NFFT,s2(1,j)) !Get power spectra
|
call ps(data(k),NFFT,s2(1,j)) !Get power spectra
|
||||||
|
if(mode65.eq.4) then
|
||||||
|
call smooth(s2(1,j),NQ)
|
||||||
|
call smooth(s2(1,j),NQ)
|
||||||
|
endif
|
||||||
call add(psavg,s2(1,j),psavg,NQ)
|
call add(psavg,s2(1,j),psavg,NQ)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
4
sync65.f
4
sync65.f
@ -1,5 +1,5 @@
|
|||||||
subroutine sync65(dat,jz,DFTolerance,NFreeze,NAFC,MouseDF,
|
subroutine sync65(dat,jz,DFTolerance,NFreeze,NAFC,MouseDF,
|
||||||
+ dtx,dfx,snrx,snrsync,ccfblue,ccfred,flip,width)
|
+ mode65,dtx,dfx,snrx,snrsync,ccfblue,ccfred,flip,width)
|
||||||
|
|
||||||
C Synchronizes JT65 data, finding the best-fit DT and DF.
|
C Synchronizes JT65 data, finding the best-fit DT and DF.
|
||||||
C NB: at this stage, submodes ABC are processed in the same way.
|
C NB: at this stage, submodes ABC are processed in the same way.
|
||||||
@ -32,6 +32,7 @@ C Compute power spectrum for each step and get average
|
|||||||
k=(j-1)*nh + 1
|
k=(j-1)*nh + 1
|
||||||
call limit(dat(k),nfft)
|
call limit(dat(k),nfft)
|
||||||
call ps(dat(k),nfft,s2(1,j))
|
call ps(dat(k),nfft,s2(1,j))
|
||||||
|
if(mode65.eq.4) call smooth(s2(1,j),nh)
|
||||||
call add(psavg,s2(1,j),psavg,nh)
|
call add(psavg,s2(1,j),psavg,nh)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
@ -133,6 +134,7 @@ C Find rms of the CCF, without the main peak
|
|||||||
C Plus 3 dB because sync tone is on half the time. (Don't understand
|
C Plus 3 dB because sync tone is on half the time. (Don't understand
|
||||||
C why an additional +2 dB is needed ...)
|
C why an additional +2 dB is needed ...)
|
||||||
if(ppmax.gt.0.0001) snrx=db(ppmax*df/2500.0) + 5.0 !###
|
if(ppmax.gt.0.0001) snrx=db(ppmax*df/2500.0) + 5.0 !###
|
||||||
|
if(mode65.eq.4) snrx=snrx + 2.0
|
||||||
if(snrx.lt.-33.0) snrx=-33.0
|
if(snrx.lt.-33.0) snrx=-33.0
|
||||||
|
|
||||||
C Compute width of sync tone to outermost -3 dB points
|
C Compute width of sync tone to outermost -3 dB points
|
||||||
|
2
wsjt.py
2
wsjt.py
@ -1,4 +1,4 @@
|
|||||||
#----------------------------------------------------------------- WSJT
|
#------------------------------------------------------------------ WSJT
|
||||||
from Tkinter import *
|
from Tkinter import *
|
||||||
from tkFileDialog import *
|
from tkFileDialog import *
|
||||||
import Pmw
|
import Pmw
|
||||||
|
21
wsjt65.f
21
wsjt65.f
@ -57,7 +57,7 @@ C already been done.
|
|||||||
|
|
||||||
C Attempt to synchronize: look for sync tone, get DF and DT.
|
C Attempt to synchronize: look for sync tone, get DF and DT.
|
||||||
call sync65(dat,npts,DFTolerance,NFreeze,NAFC,MouseDF,
|
call sync65(dat,npts,DFTolerance,NFreeze,NAFC,MouseDF,
|
||||||
+ dtx,dfx,snrx,snrsync,ccfblue,ccfred,flip,width)
|
+ mode65,dtx,dfx,snrx,snrsync,ccfblue,ccfred,flip,width)
|
||||||
f0=1270.46 + dfx
|
f0=1270.46 + dfx
|
||||||
csync=' '
|
csync=' '
|
||||||
decoded=' '
|
decoded=' '
|
||||||
@ -69,6 +69,8 @@ C Attempt to synchronize: look for sync tone, get DF and DT.
|
|||||||
ncount1=-1 !Flag for RS Decode of ave1
|
ncount1=-1 !Flag for RS Decode of ave1
|
||||||
ncount2=-1 !Flag for RS Decode of ave2
|
ncount2=-1 !Flag for RS Decode of ave2
|
||||||
NSyncOK=0
|
NSyncOK=0
|
||||||
|
nqual1=0
|
||||||
|
nqual2=0
|
||||||
|
|
||||||
if(nsave.lt.MAXAVE .and. (NAgain.eq.0 .or. NClearAve.eq.1))
|
if(nsave.lt.MAXAVE .and. (NAgain.eq.0 .or. NClearAve.eq.1))
|
||||||
+ nsave=nsave+1
|
+ nsave=nsave+1
|
||||||
@ -134,19 +136,22 @@ C If we get here, we have achieved sync!
|
|||||||
+ nint(width),csync,special,decoded(1:19),cooo,kvqual,nqual
|
+ nint(width),csync,special,decoded(1:19),cooo,kvqual,nqual
|
||||||
1010 format(a6,i3,i5,f5.1,i5,i3,1x,a1,1x,a5,a19,1x,a3,i4,i4)
|
1010 format(a6,i3,i5,f5.1,i5,i3,1x,a1,1x,a5,a19,1x,a3,i4,i4)
|
||||||
|
|
||||||
|
C Blank all end-of-line stuff if no decode
|
||||||
|
if(line(31:40).eq.' ') line=line(:30)
|
||||||
|
|
||||||
C Blank DT if shorthand message (### wrong logic? ###)
|
C Blank DT if shorthand message (### wrong logic? ###)
|
||||||
if(special.ne.' ') then
|
if(special.ne.' ') then
|
||||||
line(15:19)=' '
|
line(15:19)=' '
|
||||||
|
line=line(:35)
|
||||||
ccfblue(-5)=-9999.0
|
ccfblue(-5)=-9999.0
|
||||||
if(ndiag.gt.0) write(line(51:57),1012) iderrsh,idriftsh
|
! if(ndiag.gt.0) write(line(51:57),1012) iderrsh,idriftsh
|
||||||
1012 format(i3,i4)
|
! 1012 format(i3,i4)
|
||||||
else
|
else
|
||||||
nspecial=0
|
nspecial=0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
C Blank the end-of-line numbers
|
C Blank the end-of-line numbers
|
||||||
if(naggressive.eq.0 .and. ndiag.eq.0) line(58:67)=' '
|
if(naggressive.eq.0 .and. ndiag.eq.0) line(59:66)=' '
|
||||||
if(ndiag.eq.0) line(66:67)=' '
|
|
||||||
|
|
||||||
if(lcum) write(21,1011) line
|
if(lcum) write(21,1011) line
|
||||||
1011 format(a67)
|
1011 format(a67)
|
||||||
@ -199,10 +204,8 @@ C If Monitor segment #2 is available, write that line also
|
|||||||
ns20=ns2
|
ns20=ns2
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if(ndiag.eq.0) then
|
if(ave1(31:40).eq.' ') ave1=ave1(:30)
|
||||||
ave1(58:67)=' '
|
if(ave2(31:40).eq.' ') ave2=ave2(:30)
|
||||||
ave2(58:67)=' '
|
|
||||||
endif
|
|
||||||
write(12,1011) ave1
|
write(12,1011) ave1
|
||||||
write(12,1011) ave2
|
write(12,1011) ave2
|
||||||
call flushqqq(12)
|
call flushqqq(12)
|
||||||
|
Loading…
Reference in New Issue
Block a user