mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-18 01:52:05 -05:00
Message averaging and DS now fully integrated in wsjt24d.
Code cleanup and optimization still to be done! git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@2970 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
fdb3ff464b
commit
4369b52d5d
@ -1,11 +1,11 @@
|
|||||||
subroutine decode24(dat,npts,dtx,dfx,flip,mode,mode4,decoded,ncount, &
|
subroutine decode24(dat,npts,dtx,dfx,flip,mode,mode4,decoded,ncount, &
|
||||||
deepmsg,qual,submode)
|
deepbest,qbest,submode)
|
||||||
|
|
||||||
! Decodes JT65 data, assuming that DT and DF have already been determined.
|
! Decodes JT65 data, assuming that DT and DF have already been determined.
|
||||||
|
|
||||||
parameter (MAXAVE=120)
|
parameter (MAXAVE=120)
|
||||||
real dat(npts) !Raw data
|
real dat(npts) !Raw data
|
||||||
character decoded*22,deepmsg*22
|
character decoded*22,deepmsg*22,deepbest*22
|
||||||
character*12 mycall,hiscall
|
character*12 mycall,hiscall
|
||||||
character*6 hisgrid
|
character*6 hisgrid
|
||||||
character*72 c72
|
character*72 c72
|
||||||
@ -23,7 +23,7 @@ subroutine decode24(dat,npts,dtx,dfx,flip,mode,mode4,decoded,ncount, &
|
|||||||
integer mettab(0:255,0:1) !Metric table
|
integer mettab(0:255,0:1) !Metric table
|
||||||
integer nch(7)
|
integer nch(7)
|
||||||
integer npr2(207)
|
integer npr2(207)
|
||||||
! common/ave/ppsave(64,63,MAXAVE),nflag(MAXAVE),nsave,iseg(MAXAVE)
|
common/ave/ppsave(207,7,MAXAVE),nflag(MAXAVE),nsave,iseg(MAXAVE)
|
||||||
data mode0/-999/
|
data mode0/-999/
|
||||||
data nsum/7*0/,rsymbol/1449*0.0/
|
data nsum/7*0/,rsymbol/1449*0.0/
|
||||||
data npr2/ &
|
data npr2/ &
|
||||||
@ -128,59 +128,49 @@ subroutine decode24(dat,npts,dtx,dfx,flip,mode,mode4,decoded,ncount, &
|
|||||||
! enddo
|
! enddo
|
||||||
!###
|
!###
|
||||||
|
|
||||||
nbits=72+31
|
call extract4(sym,nadd,ncount,decoded) !Do the KV decode
|
||||||
delta=50
|
|
||||||
limit=100000
|
|
||||||
ncycles=0
|
|
||||||
ncount=-1
|
|
||||||
call interleave24(symbol(2),-1) !Remove the interleaving
|
|
||||||
|
|
||||||
call fano232(symbol(2),nbits,mettab,delta,limit,data1,ncycles,metric,ncount)
|
qual=0. !Now try deep search
|
||||||
nlim=ncycles/nbits
|
|
||||||
|
|
||||||
!### Try deep search
|
|
||||||
qual=0.
|
|
||||||
neme=1
|
neme=1
|
||||||
mycall='VK7MO'
|
mycall='VK7MO'
|
||||||
hiscall='W5LUA'
|
hiscall='W5LUA'
|
||||||
hisgrid='EM13'
|
hisgrid='EM13'
|
||||||
call deep24(sym(2),neme,flip,mycall,hiscall,hisgrid,decoded,qual)
|
call deep24(sym(2),neme,flip,mycall,hiscall,hisgrid,deepmsg,qual)
|
||||||
if(qual.gt.qbest) then
|
if(qual.gt.qbest) then
|
||||||
qbest=qual
|
qbest=qual
|
||||||
deepmsg=decoded
|
deepbest=deepmsg
|
||||||
ichbest=ich
|
ichbest=ich
|
||||||
endif
|
endif
|
||||||
!###
|
|
||||||
|
|
||||||
if(ncount.ge.0) go to 100
|
if(ncount.ge.0) go to 100
|
||||||
if(mode.eq.7 .and. nchips.lt.mode4) go to 40
|
if(mode.eq.7 .and. nchips.lt.mode4) go to 40
|
||||||
|
|
||||||
100 do i=1,9
|
100 continue
|
||||||
i4=data1(i)
|
!100 do i=1,9
|
||||||
if(i4.lt.0) i4=i4+256
|
! i4=data1(i)
|
||||||
data4a(i)=i4
|
! if(i4.lt.0) i4=i4+256
|
||||||
enddo
|
! data4a(i)=i4
|
||||||
write(c72,1100) (data4a(i),i=1,9)
|
! enddo
|
||||||
1100 format(9b8.8)
|
! write(c72,1100) (data4a(i),i=1,9)
|
||||||
read(c72,1102) data4
|
!1100 format(9b8.8)
|
||||||
1102 format(12b6)
|
! read(c72,1102) data4
|
||||||
|
!1102 format(12b6)
|
||||||
|
|
||||||
decoded=' '
|
! decoded=' '
|
||||||
submode=' '
|
! submode=' '
|
||||||
if(ncount.ge.0) then
|
|
||||||
call unpackmsg(data4,decoded)
|
if(ncount.lt.0) then
|
||||||
submode=char(ichar('A')+ich-1)
|
decoded=deepbest
|
||||||
else
|
|
||||||
decoded=deepmsg
|
|
||||||
submode=char(ichar('A')+ichbest-1)
|
submode=char(ichar('A')+ichbest-1)
|
||||||
qual=qbest
|
qual=qbest
|
||||||
endif
|
endif
|
||||||
if(decoded(1:6).eq.'000AAA') then
|
! if(decoded(1:6).eq.'000AAA') then
|
||||||
decoded='***WRONG MODE?***'
|
! decoded='***WRONG MODE?***'
|
||||||
ncount=-1
|
! ncount=-1
|
||||||
endif
|
! endif
|
||||||
|
|
||||||
! Save symbol spectra for possible decoding of average.
|
! Save symbol spectra for possible decoding of average.
|
||||||
|
ppsave(1:207,1:7,nsave)=rsymbol(1:207,1:7)
|
||||||
|
|
||||||
return
|
return
|
||||||
end subroutine decode24
|
end subroutine decode24
|
||||||
|
61
lib/extract4.f90
Normal file
61
lib/extract4.f90
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
subroutine extract4(sym,nadd,ncount,decoded)
|
||||||
|
|
||||||
|
real sym(207)
|
||||||
|
character decoded*22, submode*1
|
||||||
|
character*72 c72
|
||||||
|
integer*1 symbol(207)
|
||||||
|
integer*1 data1(13) !Decoded data (8-bit bytes)
|
||||||
|
integer data4a(9) !Decoded data (8-bit bytes)
|
||||||
|
integer data4(12) !Decoded data (6-bit bytes)
|
||||||
|
integer mettab(0:255,0:1) !Metric table
|
||||||
|
logical first
|
||||||
|
data first/.true./
|
||||||
|
save first,mettab
|
||||||
|
|
||||||
|
if(first) then
|
||||||
|
call getmet24(mode,mettab)
|
||||||
|
first=.false.
|
||||||
|
endif
|
||||||
|
|
||||||
|
do j=1,207
|
||||||
|
r=sym(j) + 128.
|
||||||
|
if(r.gt.255.0) r=255.0
|
||||||
|
if(r.lt.0.0) r=0.0
|
||||||
|
i4=nint(r)
|
||||||
|
if(i4.gt.127) i4=i4-256
|
||||||
|
symbol(j)=i4
|
||||||
|
enddo
|
||||||
|
|
||||||
|
nbits=72+31
|
||||||
|
ndelta=50
|
||||||
|
limit=100000
|
||||||
|
ncycles=0
|
||||||
|
ncount=-1
|
||||||
|
decoded=' '
|
||||||
|
submode=' '
|
||||||
|
|
||||||
|
call interleave24(symbol(2),-1) !Remove the interleaving
|
||||||
|
call fano232(symbol(2),nbits,mettab,ndelta,limit,data1,ncycles,metric,ncount)
|
||||||
|
nlim=ncycles/nbits
|
||||||
|
|
||||||
|
if(ncount.ge.0) then
|
||||||
|
do i=1,9
|
||||||
|
i4=data1(i)
|
||||||
|
if(i4.lt.0) i4=i4+256
|
||||||
|
data4a(i)=i4
|
||||||
|
enddo
|
||||||
|
write(c72,1100) (data4a(i),i=1,9)
|
||||||
|
1100 format(9b8.8)
|
||||||
|
read(c72,1102) data4
|
||||||
|
1102 format(12b6)
|
||||||
|
|
||||||
|
call unpackmsg(data4,decoded)
|
||||||
|
submode=char(ichar('A')+ich-1)
|
||||||
|
if(decoded(1:6).eq.'000AAA') then
|
||||||
|
decoded='***WRONG MODE?***'
|
||||||
|
ncount=-1
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
return
|
||||||
|
end subroutine extract4
|
@ -5,8 +5,6 @@ subroutine getmet24(mode,mettab)
|
|||||||
! Metric table (RxSymbol,TxSymbol)
|
! Metric table (RxSymbol,TxSymbol)
|
||||||
integer mettab(0:255,0:1)
|
integer mettab(0:255,0:1)
|
||||||
real*4 xx0(0:255)
|
real*4 xx0(0:255)
|
||||||
logical first
|
|
||||||
data first/.true./
|
|
||||||
data xx0/ &
|
data xx0/ &
|
||||||
1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, &
|
1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, &
|
||||||
1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, &
|
1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, &
|
||||||
@ -42,15 +40,12 @@ subroutine getmet24(mode,mettab)
|
|||||||
-9.966,-9.966,-9.966,-9.966,-9.966,-9.966,-9.966,-9.966/
|
-9.966,-9.966,-9.966,-9.966,-9.966,-9.966,-9.966,-9.966/
|
||||||
save
|
save
|
||||||
|
|
||||||
if(first) then
|
|
||||||
bias=0.5
|
bias=0.5
|
||||||
scale=10.0
|
scale=10.0
|
||||||
do i=0,255
|
do i=0,255
|
||||||
mettab(i,0)=nint(scale*(xx0(i)-bias))
|
mettab(i,0)=nint(scale*(xx0(i)-bias))
|
||||||
if(i.ge.1) mettab(256-i,1)=mettab(i,0)
|
if(i.ge.1) mettab(256-i,1)=mettab(i,0)
|
||||||
enddo
|
enddo
|
||||||
first=.false.
|
|
||||||
endif
|
|
||||||
|
|
||||||
return
|
return
|
||||||
end subroutine getmet24
|
end subroutine getmet24
|
||||||
|
@ -22,8 +22,7 @@ subroutine wsjt24(dat,npts,cfile6,NClearAve,MinSigdB, &
|
|||||||
character*6 hisgrid
|
character*6 hisgrid
|
||||||
character submode*1
|
character submode*1
|
||||||
real*4 ccfbluesum(-5:540),ccfredsum(-224:224)
|
real*4 ccfbluesum(-5:540),ccfredsum(-224:224)
|
||||||
! common/ave/ppsave(64,63,MAXAVE),nflag(MAXAVE),nsave,iseg(MAXAVE) !For msg avg
|
common/ave/ppsave(207,7,MAXAVE),nflag(MAXAVE),nsave,iseg(MAXAVE)
|
||||||
integer nflag(MAXAVE),iseg(MAXAVE)
|
|
||||||
data first/.true./,ns10/0/,ns20/0/
|
data first/.true./,ns10/0/,ns20/0/
|
||||||
save
|
save
|
||||||
|
|
||||||
@ -37,6 +36,7 @@ subroutine wsjt24(dat,npts,cfile6,NClearAve,MinSigdB, &
|
|||||||
if(nspecial.eq.999) go to 900 !Silence compiler warning
|
if(nspecial.eq.999) go to 900 !Silence compiler warning
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ndepth=3 !###
|
||||||
naggressive=0
|
naggressive=0
|
||||||
if(ndepth.ge.2) naggressive=1
|
if(ndepth.ge.2) naggressive=1
|
||||||
nq1=3
|
nq1=3
|
||||||
@ -118,18 +118,18 @@ subroutine wsjt24(dat,npts,cfile6,NClearAve,MinSigdB, &
|
|||||||
! Blank all end-of-line stuff if no decode
|
! Blank all end-of-line stuff if no decode
|
||||||
if(line(31:40).eq.' ') line=line(:30)
|
if(line(31:40).eq.' ') line=line(:30)
|
||||||
|
|
||||||
! if(lcum) write(21,1011) line
|
if(lcum) write(21,1011) line
|
||||||
|
|
||||||
! Write decoded msg unless this is an "Exclude" request:
|
! Write decoded msg unless this is an "Exclude" request:
|
||||||
if(MinSigdB.lt.99) write(*,1011) line
|
if(MinSigdB.lt.99) write(*,1011) line
|
||||||
1011 format(a77)
|
1011 format(a77)
|
||||||
|
|
||||||
! if(nsave.ge.1) call avemsg65(1,mode65,ndepth, &
|
if(nsave.ge.1) call avemsg4(1,mode4,ndepth, &
|
||||||
! avemsg1,nused1,nq1,nq2,neme,mycall,hiscall,hisgrid,qual1, &
|
avemsg1,nused1,nq1,nq2,neme,mycall,hiscall,hisgrid,qual1, &
|
||||||
! ns1,ncount1)
|
ns1,ncount1)
|
||||||
! if(nsave.ge.1) call avemsg65(2,mode65,ndepth, &
|
if(nsave.ge.1) call avemsg4(2,mode4,ndepth, &
|
||||||
! avemsg2,nused2,nq1,nq2,neme,mycall,hiscall,hisgrid,qual2, &
|
avemsg2,nused2,nq1,nq2,neme,mycall,hiscall,hisgrid,qual2, &
|
||||||
! ns2,ncount2)
|
ns2,ncount2)
|
||||||
nqual1=qual1
|
nqual1=qual1
|
||||||
nqual2=qual2
|
nqual2=qual2
|
||||||
if(ndiag.eq.0 .and. nqual1.gt.10) nqual1=10
|
if(ndiag.eq.0 .and. nqual1.gt.10) nqual1=10
|
||||||
@ -140,39 +140,36 @@ subroutine wsjt24(dat,npts,cfile6,NClearAve,MinSigdB, &
|
|||||||
if(ncount2.ge.0) nc2=1
|
if(ncount2.ge.0) nc2=1
|
||||||
|
|
||||||
! Write the average line
|
! Write the average line
|
||||||
! if(ns1.ge.1 .and. ns1.ne.ns10) then
|
if(ns1.ge.1) then
|
||||||
|
if(ns1.lt.10) write(ave1,1021) cfile6,1,nused1,ns1,avemsg1,nc1,nqual1
|
||||||
! if(ns1.ge.1) then
|
1021 format(a6,i3,i4,'/',i1,20x,a19,i7,i5)
|
||||||
! if(ns1.lt.10) write(ave1,1021) cfile6,1,nused1,ns1,avemsg1,nc1,nqual1
|
if(ns1.ge.10 .and. nsave.le.99) write(ave1,1022) cfile6, &
|
||||||
!1021 format(a6,i3,i4,'/',i1,20x,a19,i8,i4)
|
1,nused1,ns1,avemsg1,nc1,nqual1
|
||||||
! if(ns1.ge.10 .and. nsave.le.99) write(ave1,1022) cfile6, &
|
1022 format(a6,i3,i4,'/',i2,19x,a19,i7,i5)
|
||||||
! 1,nused1,ns1,avemsg1,nc1,nqual1
|
if(ns1.ge.100) write(ave1,1023) cfile6,1,nused1,ns1, &
|
||||||
!1022 format(a6,i3,i4,'/',i2,19x,a19,i8,i4)
|
avemsg1,nc1,nqual1
|
||||||
! if(ns1.ge.100) write(ave1,1023) cfile6,1,nused1,ns1, &
|
1023 format(a6,i3,i4,'/',i3,18x,a19,i7,i5)
|
||||||
! avemsg1,nc1,nqual1
|
if(lcum .and. (avemsg1.ne.' ')) &
|
||||||
!1023 format(a6,i3,i4,'/',i3,18x,a19,i8,i4)
|
write(21,1011) ave1
|
||||||
! if(lcum .and. (avemsg1.ne.' ')) &
|
ns10=ns1
|
||||||
! write(21,1011) ave1
|
endif
|
||||||
! ns10=ns1
|
|
||||||
! endif
|
|
||||||
|
|
||||||
! If Monitor segment #2 is available, write that line also
|
! If Monitor segment #2 is available, write that line also
|
||||||
! if(ns2.ge.1 .and. ns2.ne.ns20) then !***Why the 2nd part?? ***
|
if(ns2.ge.1) then
|
||||||
! if(ns2.ge.1) then
|
if(ns2.lt.10) write(ave2,1021) cfile6,2,nused2,ns2,avemsg2,nc2,nqual2
|
||||||
! if(ns2.lt.10) write(ave2,1021) cfile6,2,nused2,ns2,avemsg2,nc2,nqual2
|
if(ns2.ge.10 .and. nsave.le.99) write(ave2,1022) cfile6, &
|
||||||
! if(ns2.ge.10 .and. nsave.le.99) write(ave2,1022) cfile6, &
|
2,nused2,ns2,avemsg2,nc2,nqual2
|
||||||
! 2,nused2,ns2,avemsg2,nc2,nqual2
|
if(ns2.ge.100) write(ave2,1023) cfile6,2,nused2,ns2,avemsg2,nc2,nqual2
|
||||||
! if(ns2.ge.100) write(ave2,1023) cfile6,2,nused2,ns2,avemsg2,nc2,nqual2
|
if(lcum .and. (avemsg2.ne.' ')) &
|
||||||
! if(lcum .and. (avemsg2.ne.' ')) &
|
write(21,1011) ave2
|
||||||
! write(21,1011) ave2
|
ns20=ns2
|
||||||
! ns20=ns2
|
endif
|
||||||
! endif
|
|
||||||
|
|
||||||
if(ave1(31:40).eq.' ') ave1=ave1(:30)
|
if(ave1(31:40).eq.' ') ave1=ave1(:30)
|
||||||
if(ave2(31:40).eq.' ') ave2=ave2(:30)
|
if(ave2(31:40).eq.' ') ave2=ave2(:30)
|
||||||
! write(12,1011) ave1
|
write(12,1011) ave1
|
||||||
! write(12,1011) ave2
|
write(12,1011) ave2
|
||||||
! call flush(12)
|
call flush(12)
|
||||||
! call cs_unlock
|
! call cs_unlock
|
||||||
|
|
||||||
900 continue
|
900 continue
|
||||||
@ -180,19 +177,5 @@ subroutine wsjt24(dat,npts,cfile6,NClearAve,MinSigdB, &
|
|||||||
ccfbluesum=ccfbluesum + ccfblue
|
ccfbluesum=ccfbluesum + ccfblue
|
||||||
ccfredsum=ccfredsum + ccfred
|
ccfredsum=ccfredsum + ccfred
|
||||||
|
|
||||||
! This was for testing message averaging:
|
|
||||||
|
|
||||||
! rewind 71
|
|
||||||
! rewind 72
|
|
||||||
! do i=-5,540
|
|
||||||
! write(71,3001) 0.2 + i*0.057143,ccfbluesum(i)
|
|
||||||
!3001 format(2f12.3)
|
|
||||||
! enddo
|
|
||||||
! do i=-224,224
|
|
||||||
! write(72,3001) i*2.1875,ccfredsum(i)
|
|
||||||
! enddo
|
|
||||||
! call flush(71)
|
|
||||||
! call flush(72)
|
|
||||||
|
|
||||||
return
|
return
|
||||||
end subroutine wsjt24
|
end subroutine wsjt24
|
||||||
|
Loading…
Reference in New Issue
Block a user