mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-04 05:50:31 -05:00 
			
		
		
		
	Progress toward integrating JTMSK short messages. Not finished, and won't work!
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6417 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
		
							parent
							
								
									c83b1556e5
								
							
						
					
					
						commit
						42d32c7fc0
					
				@ -358,7 +358,8 @@ set (wsjt_FSRCS
 | 
				
			|||||||
  lib/jt65_decode.f90
 | 
					  lib/jt65_decode.f90
 | 
				
			||||||
  lib/jt9_decode.f90
 | 
					  lib/jt9_decode.f90
 | 
				
			||||||
  lib/jt9fano.f90
 | 
					  lib/jt9fano.f90
 | 
				
			||||||
  lib/jtmsk.f90
 | 
					  lib/jtmsk_decode.f90
 | 
				
			||||||
 | 
					  lib/jtmsk_short.f90
 | 
				
			||||||
  lib/libration.f90
 | 
					  lib/libration.f90
 | 
				
			||||||
  lib/lpf1.f90
 | 
					  lib/lpf1.f90
 | 
				
			||||||
  lib/mixlpf.f90
 | 
					  lib/mixlpf.f90
 | 
				
			||||||
 | 
				
			|||||||
@ -28,7 +28,7 @@ subroutine fast_decode(id2,narg,line)
 | 
				
			|||||||
     call fast9(id2,narg,line)
 | 
					     call fast9(id2,narg,line)
 | 
				
			||||||
     go to 900
 | 
					     go to 900
 | 
				
			||||||
  else if(nmode.eq.103) then
 | 
					  else if(nmode.eq.103) then
 | 
				
			||||||
     call jtmsk(id2,narg,line)
 | 
					     call jtmsk_decode(id2,narg,line)
 | 
				
			||||||
     go to 900
 | 
					     go to 900
 | 
				
			||||||
  endif
 | 
					  endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
subroutine jtmsk(id2,narg,line)
 | 
					subroutine jtmsk_decode(id2,narg,line)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
! Decoder for JTMSK
 | 
					! Decoder for JTMSK
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -12,14 +12,12 @@ subroutine jtmsk(id2,narg,line)
 | 
				
			|||||||
  real d(0:NMAX)                       !Raw r*4 data
 | 
					  real d(0:NMAX)                       !Raw r*4 data
 | 
				
			||||||
  real ty(703)
 | 
					  real ty(703)
 | 
				
			||||||
  real yellow(703)
 | 
					  real yellow(703)
 | 
				
			||||||
!  real spk2(20)
 | 
					 | 
				
			||||||
!  real fpk2(20)
 | 
					 | 
				
			||||||
!  integer jpk2(20)
 | 
					 | 
				
			||||||
  complex c(NFFTMAX)                   !Complex (analytic) data
 | 
					  complex c(NFFTMAX)                   !Complex (analytic) data
 | 
				
			||||||
  complex cdat(24000)                  !Short segments, up to 2 s
 | 
					  complex cdat(24000)                  !Short segments, up to 2 s
 | 
				
			||||||
  complex cdat2(24000)
 | 
					  complex cdat2(24000)
 | 
				
			||||||
  integer narg(0:11)                   !Arguments passed from calling pgm
 | 
					  integer narg(0:11)                   !Arguments passed from calling pgm
 | 
				
			||||||
  character*22 msg,msg0                !Decoded message
 | 
					  character*22 msg,msg0                !Decoded message
 | 
				
			||||||
 | 
					  character*22 msg1         !### Test ###
 | 
				
			||||||
  character*80 line(100)               !Decodes passed back to caller
 | 
					  character*80 line(100)               !Decodes passed back to caller
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  limtrace=-1
 | 
					  limtrace=-1
 | 
				
			||||||
@ -56,6 +54,29 @@ subroutine jtmsk(id2,narg,line)
 | 
				
			|||||||
  call analytic(d,npts,nfft,c)         !Convert to analytic signal
 | 
					  call analytic(d,npts,nfft,c)         !Convert to analytic signal
 | 
				
			||||||
  call timer('analytic',1)
 | 
					  call timer('analytic',1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  msg1="<K1ABC W9XYZ> R26"
 | 
				
			||||||
 | 
					  msg='                      '
 | 
				
			||||||
 | 
					  call jtmsk_short(c,npts,msg1,msg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!### Needs work!
 | 
				
			||||||
 | 
					  print*,'b ',msg
 | 
				
			||||||
 | 
					  nsnr=1
 | 
				
			||||||
 | 
					  if(msg.ne.'                      ') then
 | 
				
			||||||
 | 
					     if(msg.ne.msg0) then
 | 
				
			||||||
 | 
					        nline=nline+1
 | 
				
			||||||
 | 
					        nsnr0=-99
 | 
				
			||||||
 | 
					     endif
 | 
				
			||||||
 | 
					     if(nsnr.gt.nsnr0) then
 | 
				
			||||||
 | 
					!        call rectify_msk(cdat2(jpk:jpk+NSPM-1),msg,freq2)
 | 
				
			||||||
 | 
					        write(line(nline),1020) nutc,nsnr,t0,nint(freq2),msg
 | 
				
			||||||
 | 
					        nsnr0=nsnr
 | 
				
			||||||
 | 
					        go to 900
 | 
				
			||||||
 | 
					     endif
 | 
				
			||||||
 | 
					     msg0=msg
 | 
				
			||||||
 | 
					     if(nline.ge.maxlines) go to 900
 | 
				
			||||||
 | 
					  endif
 | 
				
			||||||
 | 
					!###
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  nbefore=NSPM
 | 
					  nbefore=NSPM
 | 
				
			||||||
  nafter=4*NSPM
 | 
					  nafter=4*NSPM
 | 
				
			||||||
! Process ping list (sorted by S/N) from top down.
 | 
					! Process ping list (sorted by S/N) from top down.
 | 
				
			||||||
@ -69,8 +90,6 @@ subroutine jtmsk(id2,narg,line)
 | 
				
			|||||||
     ja=ia/NSPM + 1
 | 
					     ja=ia/NSPM + 1
 | 
				
			||||||
     jb=ib/NSPM
 | 
					     jb=ib/NSPM
 | 
				
			||||||
     t0=ia/12000.0
 | 
					     t0=ia/12000.0
 | 
				
			||||||
!     call msksync(cdat,iz,jpk2,fpk2,spk2)
 | 
					 | 
				
			||||||
!     call softmsk(cdat,iz,jpk2,fpk2,spk2)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
     do itry=1,21
 | 
					     do itry=1,21
 | 
				
			||||||
        idf1=(itry/2) * 50
 | 
					        idf1=(itry/2) * 50
 | 
				
			||||||
@ -85,8 +104,6 @@ subroutine jtmsk(id2,narg,line)
 | 
				
			|||||||
        call syncmsk(cdat,iz,jpk,ipk,idf,rmax,snr,metric,msg)
 | 
					        call syncmsk(cdat,iz,jpk,ipk,idf,rmax,snr,metric,msg)
 | 
				
			||||||
        call timer('syncmsk ',1)
 | 
					        call timer('syncmsk ',1)
 | 
				
			||||||
        freq=fpk+idf
 | 
					        freq=fpk+idf
 | 
				
			||||||
!        write(72,4001) jpk,idf,nint(freq),rmax,snr,msg
 | 
					 | 
				
			||||||
!4001    format(3i6,2f9.2,2x,a22)
 | 
					 | 
				
			||||||
        if(metric.eq.-9999) cycle             !No output if no significant sync
 | 
					        if(metric.eq.-9999) cycle             !No output if no significant sync
 | 
				
			||||||
        t0=(ia+jpk)/12000.0
 | 
					        t0=(ia+jpk)/12000.0
 | 
				
			||||||
        nsnr=nint(yellow(n)-2.0)
 | 
					        nsnr=nint(yellow(n)-2.0)
 | 
				
			||||||
@ -109,6 +126,7 @@ subroutine jtmsk(id2,narg,line)
 | 
				
			|||||||
  enddo
 | 
					  enddo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
900 if(line(1)(1:6).eq.'      ') line(1)(1:1)=char(0)
 | 
					900 if(line(1)(1:6).eq.'      ') line(1)(1:1)=char(0)
 | 
				
			||||||
 | 
					  print*,'z ',line(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return
 | 
					  return
 | 
				
			||||||
end subroutine jtmsk
 | 
					end subroutine jtmsk_decode
 | 
				
			||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
subroutine jtmsk_short(cdat,npts,msg)
 | 
					subroutine jtmsk_short(cdat,npts,msg,decoded)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  parameter (NMAX=15*12000,NSAVE=100)
 | 
					  parameter (NMAX=15*12000,NSAVE=100)
 | 
				
			||||||
  character*22 msg,decoded,msgsent
 | 
					  character*22 msg,decoded,msgsent
 | 
				
			||||||
@ -11,16 +11,14 @@ subroutine jtmsk_short(cdat,npts,msg)
 | 
				
			|||||||
  real r1(0:NMAX-1)
 | 
					  real r1(0:NMAX-1)
 | 
				
			||||||
  real r2(0:4096)
 | 
					  real r2(0:4096)
 | 
				
			||||||
  real r1save(NSAVE)
 | 
					  real r1save(NSAVE)
 | 
				
			||||||
  integer*8 count0,count1,clkfreq
 | 
					!  integer*8 count0,count1,clkfreq
 | 
				
			||||||
  integer itone(234)                      !Message bits
 | 
					  integer itone(234)                      !Message bits
 | 
				
			||||||
  integer jgood(NSAVE)
 | 
					  integer jgood(NSAVE)
 | 
				
			||||||
  integer indx(NSAVE)
 | 
					  integer indx(NSAVE)
 | 
				
			||||||
  logical first
 | 
					  logical first
 | 
				
			||||||
  data rpt /'26 ','27 ','28 ','R26','R27','R28','RRR','73 '/
 | 
					  data rpt /'26 ','27 ','28 ','R26','R27','R28','RRR','73 '/
 | 
				
			||||||
  data first/.true./
 | 
					  data first/.true./
 | 
				
			||||||
  save first,cw
 | 
					  save first,cw,cb11
 | 
				
			||||||
 | 
					 | 
				
			||||||
!  msg='<W2DEF K3GHI> 73      '
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if(first) then
 | 
					  if(first) then
 | 
				
			||||||
     dt=1.d0/12000.d0
 | 
					     dt=1.d0/12000.d0
 | 
				
			||||||
@ -49,18 +47,19 @@ subroutine jtmsk_short(cdat,npts,msg)
 | 
				
			|||||||
           enddo
 | 
					           enddo
 | 
				
			||||||
        enddo
 | 
					        enddo
 | 
				
			||||||
     enddo
 | 
					     enddo
 | 
				
			||||||
 | 
					     cb11=cw(0:65,0)
 | 
				
			||||||
     first=.false.
 | 
					     first=.false.
 | 
				
			||||||
  endif
 | 
					  endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  r1thresh=0.40
 | 
					!  r1thresh=0.40
 | 
				
			||||||
 | 
					  r1thresh=0.80
 | 
				
			||||||
  r2thresh=0.50
 | 
					  r2thresh=0.50
 | 
				
			||||||
  rmax=0.9
 | 
					  rmax=0.9
 | 
				
			||||||
  ngood=0
 | 
					  ngood=0
 | 
				
			||||||
  nbad=0
 | 
					  nbad=0
 | 
				
			||||||
  maxdecodes=999
 | 
					  maxdecodes=999
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  cb11=cw(0:65,0)
 | 
					!  call system_clock(count0,clkfreq)
 | 
				
			||||||
  call system_clock(count0,clkfreq)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  r1max=0.
 | 
					  r1max=0.
 | 
				
			||||||
  do j=0,npts-210                         !Find the B11 sync vectors
 | 
					  do j=0,npts-210                         !Find the B11 sync vectors
 | 
				
			||||||
@ -94,9 +93,11 @@ subroutine jtmsk_short(cdat,npts,msg)
 | 
				
			|||||||
  do kk=1,kmax
 | 
					  do kk=1,kmax
 | 
				
			||||||
     k=indx(kmax+1-kk)
 | 
					     k=indx(kmax+1-kk)
 | 
				
			||||||
     j=jgood(k)
 | 
					     j=jgood(k)
 | 
				
			||||||
 | 
					     if(j.lt.144 .or. j.gt.npts-210) cycle
 | 
				
			||||||
     u1=0.
 | 
					     u1=0.
 | 
				
			||||||
     u2=0.
 | 
					     u2=0.
 | 
				
			||||||
     r2max=0.
 | 
					     r2max=0.
 | 
				
			||||||
 | 
					     ibest=-1
 | 
				
			||||||
     do imsg=0,4096
 | 
					     do imsg=0,4096
 | 
				
			||||||
        ssa=0.
 | 
					        ssa=0.
 | 
				
			||||||
        ssb=0.
 | 
					        ssb=0.
 | 
				
			||||||
@ -127,19 +128,20 @@ subroutine jtmsk_short(cdat,npts,msg)
 | 
				
			|||||||
           n=1
 | 
					           n=1
 | 
				
			||||||
           decoded=msg(1:14)//rpt(irpt)
 | 
					           decoded=msg(1:14)//rpt(irpt)
 | 
				
			||||||
        endif
 | 
					        endif
 | 
				
			||||||
        if(n.eq.0) nbad=nbad+1
 | 
					        print*,'a ', decoded
 | 
				
			||||||
        if(n.eq.1) ngood=ngood+1
 | 
					        go to 900
 | 
				
			||||||
        if(n.eq.0 .and. r2max.gt.r2bad) r2bad=r2max
 | 
					
 | 
				
			||||||
        write(52,3020) k,t,ibest,r1(j),r2max,u2/u1,r1or2,n,decoded
 | 
					!        if(n.eq.0) nbad=nbad+1
 | 
				
			||||||
3020    format(i3,f9.4,i5,4f7.2,i2,1x,a22)
 | 
					!        if(n.eq.1) ngood=ngood+1
 | 
				
			||||||
        if(ngood+nbad.ge.maxdecodes) exit
 | 
					!        if(n.eq.0 .and. r2max.gt.r2bad) r2bad=r2max
 | 
				
			||||||
 | 
					!        write(52,3020) k,t,ibest,r1(j),r2max,u2/u1,r1or2,n,decoded
 | 
				
			||||||
 | 
					!3020    format(i3,f9.4,i5,4f7.2,i2,1x,a22)
 | 
				
			||||||
 | 
					!        if(ngood+nbad.ge.maxdecodes) exit
 | 
				
			||||||
     endif
 | 
					     endif
 | 
				
			||||||
  enddo
 | 
					  enddo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  call system_clock(count1,clkfreq)
 | 
					!  print "('Worst false decode:',f6.3)",r2bad
 | 
				
			||||||
  t=float(count1-count0)/float(clkfreq)
 | 
					!  print "('Good:',i3,'   Bad:',i3)",ngood,nbad
 | 
				
			||||||
  print "('Decode:            ',f6.3)",t
 | 
					
 | 
				
			||||||
  print "('Worst false decode:',f6.3)",r2bad
 | 
					900 return
 | 
				
			||||||
  print "('Good:',i3,'   Bad:',i3)",ngood,nbad
 | 
					 | 
				
			||||||
  return
 | 
					 | 
				
			||||||
end subroutine jtmsk_short
 | 
					end subroutine jtmsk_short
 | 
				
			||||||
 | 
				
			|||||||
@ -50,9 +50,9 @@ program testmsk
 | 
				
			|||||||
     narg(10)=nrxfreq
 | 
					     narg(10)=nrxfreq
 | 
				
			||||||
     narg(11)=ntol
 | 
					     narg(11)=ntol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     call timer('jtmsk   ',0)
 | 
					     call timer('jtmsk_de',0)
 | 
				
			||||||
     call jtmsk(id2,narg,line)
 | 
					     call jtmsk_decode(id2,narg,line)
 | 
				
			||||||
     call timer('jtmsk   ',1)
 | 
					     call timer('jtmsk_de',1)
 | 
				
			||||||
     do i=1,narg(8)
 | 
					     do i=1,narg(8)
 | 
				
			||||||
        if(line(i)(1:1).eq.char(0)) exit
 | 
					        if(line(i)(1:1).eq.char(0)) exit
 | 
				
			||||||
        ndecodes=ndecodes+1
 | 
					        ndecodes=ndecodes+1
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user