mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 13:30:52 -05:00 
			
		
		
		
	1. Fix broken sync.
2. Change FST240-15 to use nsps=720
This commit is contained in:
		
							parent
							
								
									ae6ca148bd
								
							
						
					
					
						commit
						355b060454
					
				@ -47,7 +47,7 @@ program fst240sim
 | 
				
			|||||||
   fs=12000.0                             !Sample rate (Hz)
 | 
					   fs=12000.0                             !Sample rate (Hz)
 | 
				
			||||||
   dt=1.0/fs                              !Sample interval (s)
 | 
					   dt=1.0/fs                              !Sample interval (s)
 | 
				
			||||||
   nsps=0
 | 
					   nsps=0
 | 
				
			||||||
   if(nsec.eq.15) nsps=800
 | 
					   if(nsec.eq.15) nsps=720
 | 
				
			||||||
   if(nsec.eq.30) nsps=1680
 | 
					   if(nsec.eq.30) nsps=1680
 | 
				
			||||||
   if(nsec.eq.60) nsps=3888
 | 
					   if(nsec.eq.60) nsps=3888
 | 
				
			||||||
   if(nsec.eq.120) nsps=8200
 | 
					   if(nsec.eq.120) nsps=8200
 | 
				
			||||||
@ -99,7 +99,8 @@ program fst240sim
 | 
				
			|||||||
   icmplx=1
 | 
					   icmplx=1
 | 
				
			||||||
   f0=f00+1.5*hmod*baud
 | 
					   f0=f00+1.5*hmod*baud
 | 
				
			||||||
   call gen_fst240wave(itone,NN,nsps,nmax,fsample,hmod,f0,icmplx,c0,wave)
 | 
					   call gen_fst240wave(itone,NN,nsps,nmax,fsample,hmod,f0,icmplx,c0,wave)
 | 
				
			||||||
   k=nint(xdt/dt)
 | 
					   k=nint((xdt+1.0)/dt)
 | 
				
			||||||
 | 
					   if(nsec.eq.15) k=nint((xdt+0.5)/dt)
 | 
				
			||||||
   c0=cshift(c0,-k)
 | 
					   c0=cshift(c0,-k)
 | 
				
			||||||
   if(k.gt.0) c0(0:k-1)=0.0
 | 
					   if(k.gt.0) c0(0:k-1)=0.0
 | 
				
			||||||
   if(k.lt.0) c0(nmax+k:nmax-1)=0.0
 | 
					   if(k.lt.0) c0(nmax+k:nmax-1)=0.0
 | 
				
			||||||
 | 
				
			|||||||
@ -71,19 +71,19 @@ subroutine gen_fst240wave(itone,nsym,nsps,nwave,fsample,hmod,f0,    &
 | 
				
			|||||||
     wave(1:nsps)=0.0
 | 
					     wave(1:nsps)=0.0
 | 
				
			||||||
     wave(nsps+1:nsps+nsps/4)=wave(nsps+1:nsps+nsps/4) *                      &
 | 
					     wave(nsps+1:nsps+nsps/4)=wave(nsps+1:nsps+nsps/4) *                      &
 | 
				
			||||||
          (1.0-cos(twopi*(/(i,i=0,nsps/4-1)/)/real(nsps/2)))/2.0
 | 
					          (1.0-cos(twopi*(/(i,i=0,nsps/4-1)/)/real(nsps/2)))/2.0
 | 
				
			||||||
     k1=nsym*nsps+3*nsps/4
 | 
					     k1=nsym*nsps+3*nsps/4+1
 | 
				
			||||||
     wave((nsym+1)*nsps+1:)=0.0 
 | 
					     wave((nsym+1)*nsps+1:)=0.0 
 | 
				
			||||||
     wave(k1:k1+nsps/4-1)=wave(k1:k1+nsps/4-1) *                              &
 | 
					     wave(k1:k1+nsps/4)=wave(k1:k1+nsps/4) *                              &
 | 
				
			||||||
          (1.0+cos(twopi*(/(i,i=0,nsps/4-1)/)/real(nsps/2)))/2.0
 | 
					          (1.0+cos(twopi*(/(i,i=0,nsps/4)/)/real(nsps/2)))/2.0
 | 
				
			||||||
     wave=cshift(wave,kshift)
 | 
					     wave=cshift(wave,kshift)
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
     cwave(1:nsps)=0.0
 | 
					     cwave(1:nsps)=0.0
 | 
				
			||||||
     cwave(nsps+1:nsps+nsps/4)=cwave(nsps+1:nsps+nsps/4) *                    &
 | 
					     cwave(nsps+1:nsps+nsps/4)=cwave(nsps+1:nsps+nsps/4) *                    &
 | 
				
			||||||
          (1.0-cos(twopi*(/(i,i=0,nsps/4-1)/)/real(nsps/2)))/2.0
 | 
					          (1.0-cos(twopi*(/(i,i=0,nsps/4-1)/)/real(nsps/2)))/2.0
 | 
				
			||||||
     k1=nsym*nsps+3*nsps/4
 | 
					     k1=nsym*nsps+3*nsps/4+1
 | 
				
			||||||
     cwave((nsym+1)*nsps+1:)=0.0
 | 
					     cwave((nsym+1)*nsps+1:)=0.0
 | 
				
			||||||
     cwave(k1:k1+nsps/4-1)=cwave(k1:k1+nsps/4-1) *                              &
 | 
					     cwave(k1:k1+nsps/4)=cwave(k1:k1+nsps/4) *                              &
 | 
				
			||||||
          (1.0+cos(twopi*(/(i,i=0,nsps/4-1)/)/real(nsps/2)))/2.0
 | 
					          (1.0+cos(twopi*(/(i,i=0,nsps/4)/)/real(nsps/2)))/2.0
 | 
				
			||||||
     cwave=cshift(cwave,kshift)
 | 
					     cwave=cshift(cwave,kshift)
 | 
				
			||||||
  endif
 | 
					  endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -69,9 +69,10 @@ contains
 | 
				
			|||||||
   nmax=15*12000
 | 
					   nmax=15*12000
 | 
				
			||||||
   single_decode=iand(nexp_decode,32).eq.32
 | 
					   single_decode=iand(nexp_decode,32).eq.32
 | 
				
			||||||
   if(ntrperiod.eq.15) then
 | 
					   if(ntrperiod.eq.15) then
 | 
				
			||||||
      nsps=800
 | 
					      nsps=720
 | 
				
			||||||
      nmax=15*12000
 | 
					      nmax=15*12000
 | 
				
			||||||
      ndown=20/hmod !nss=40,80,160,400
 | 
					      ndown=18/hmod !nss=40,80,160,400
 | 
				
			||||||
 | 
					      if(hmod.eq.4) ndown=4
 | 
				
			||||||
      if(hmod.eq.8) ndown=2
 | 
					      if(hmod.eq.8) ndown=2
 | 
				
			||||||
      nfft1=int(nmax/ndown)*ndown
 | 
					      nfft1=int(nmax/ndown)*ndown
 | 
				
			||||||
   else if(ntrperiod.eq.30) then
 | 
					   else if(ntrperiod.eq.30) then
 | 
				
			||||||
@ -87,7 +88,6 @@ contains
 | 
				
			|||||||
         ndown=5
 | 
					         ndown=5
 | 
				
			||||||
         nfft1=nmax
 | 
					         nfft1=nmax
 | 
				
			||||||
      endif
 | 
					      endif
 | 
				
			||||||
      nfft1=int(nmax/ndown)*ndown
 | 
					 | 
				
			||||||
   else if(ntrperiod.eq.60) then
 | 
					   else if(ntrperiod.eq.60) then
 | 
				
			||||||
      nsps=3888
 | 
					      nsps=3888
 | 
				
			||||||
      nmax=60*12000
 | 
					      nmax=60*12000
 | 
				
			||||||
@ -276,7 +276,7 @@ contains
 | 
				
			|||||||
         if(ijitter.eq.2) ioffset=-1
 | 
					         if(ijitter.eq.2) ioffset=-1
 | 
				
			||||||
         is0=isbest+ioffset
 | 
					         is0=isbest+ioffset
 | 
				
			||||||
         if(is0.lt.0) cycle
 | 
					         if(is0.lt.0) cycle
 | 
				
			||||||
         cframe=c2(is0:is0+164*nss-1)
 | 
					         cframe=c2(is0:is0+160*nss-1)
 | 
				
			||||||
         bitmetrics=0
 | 
					         bitmetrics=0
 | 
				
			||||||
         call get_fst240_bitmetrics(cframe,nss,hmod,ntmax,bitmetrics,s4,badsync)
 | 
					         call get_fst240_bitmetrics(cframe,nss,hmod,ntmax,bitmetrics,s4,badsync)
 | 
				
			||||||
         if(badsync) cycle
 | 
					         if(badsync) cycle
 | 
				
			||||||
@ -392,31 +392,36 @@ contains
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
   include 'fst240/fst240_params.f90'
 | 
					   include 'fst240/fst240_params.f90'
 | 
				
			||||||
   complex cd0(0:np-1)
 | 
					   complex cd0(0:np-1)
 | 
				
			||||||
   complex, allocatable, save ::  csync(:)
 | 
					   complex, allocatable, save ::  csync1(:),csync2(:)
 | 
				
			||||||
   complex, allocatable, save ::  csynct(:)
 | 
					   complex, allocatable, save ::  csynct1(:),csynct2(:)
 | 
				
			||||||
   complex ctwk(8*nss)
 | 
					   complex ctwk(8*nss)
 | 
				
			||||||
   complex z1,z2,z3,z4,z5
 | 
					   complex z1,z2,z3,z4,z5
 | 
				
			||||||
   logical first
 | 
					   logical first
 | 
				
			||||||
   integer hmod,isyncword(0:7)
 | 
					   integer hmod,isyncword1(0:7),isyncword2(0:7)
 | 
				
			||||||
   real f0save
 | 
					   real f0save
 | 
				
			||||||
   data isyncword/0,1,3,2,1,0,2,3/
 | 
					   data isyncword1/0,1,3,2,1,0,2,3/
 | 
				
			||||||
 | 
					   data isyncword2/2,3,1,0,3,2,0,1/
 | 
				
			||||||
   data first/.true./,f0save/-99.9/,nss0/-1/
 | 
					   data first/.true./,f0save/-99.9/,nss0/-1/
 | 
				
			||||||
   save first,twopi,dt,fac,f0save,nss0
 | 
					   save first,twopi,dt,fac,f0save,nss0
 | 
				
			||||||
   p(z1)=(real(z1*fac)**2 + aimag(z1*fac)**2)**0.5     !Compute power
 | 
					   p(z1)=(real(z1*fac)**2 + aimag(z1*fac)**2)**0.5     !Compute power
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   if(nss.ne.nss0 .and. allocated(csync)) deallocate(csync,csynct)
 | 
					   if(nss.ne.nss0 .and. allocated(csync1)) deallocate(csync1,csync2,csynct1,csynct2)
 | 
				
			||||||
   if(first .or. nss.ne.nss0) then
 | 
					   if(first .or. nss.ne.nss0) then
 | 
				
			||||||
      allocate( csync(8*nss) )
 | 
					      allocate( csync1(8*nss), csync2(8*nss) )
 | 
				
			||||||
      allocate( csynct(8*nss) )
 | 
					      allocate( csynct1(8*nss), csynct2(8*nss) )
 | 
				
			||||||
      twopi=8.0*atan(1.0)
 | 
					      twopi=8.0*atan(1.0)
 | 
				
			||||||
      dt=1/fs
 | 
					      dt=1/fs
 | 
				
			||||||
      k=1
 | 
					      k=1
 | 
				
			||||||
      phi=0.0
 | 
					      phi1=0.0
 | 
				
			||||||
 | 
					      phi2=0.0
 | 
				
			||||||
      do i=0,7
 | 
					      do i=0,7
 | 
				
			||||||
         dphi=twopi*hmod*(isyncword(i)-1.5)/real(nss)
 | 
					         dphi1=twopi*hmod*(isyncword1(i)-1.5)/real(nss)
 | 
				
			||||||
 | 
					         dphi2=twopi*hmod*(isyncword2(i)-1.5)/real(nss)
 | 
				
			||||||
         do j=1,nss
 | 
					         do j=1,nss
 | 
				
			||||||
            csync(k)=cmplx(cos(phi),sin(phi))
 | 
					            csync1(k)=cmplx(cos(phi1),sin(phi1))
 | 
				
			||||||
            phi=mod(phi+dphi,twopi)
 | 
					            csync2(k)=cmplx(cos(phi2),sin(phi2))
 | 
				
			||||||
 | 
					            phi1=mod(phi1+dphi1,twopi)
 | 
				
			||||||
 | 
					            phi2=mod(phi2+dphi2,twopi)
 | 
				
			||||||
            k=k+1
 | 
					            k=k+1
 | 
				
			||||||
         enddo
 | 
					         enddo
 | 
				
			||||||
      enddo
 | 
					      enddo
 | 
				
			||||||
@ -432,7 +437,8 @@ contains
 | 
				
			|||||||
         ctwk(i)=cmplx(cos(phi),sin(phi))
 | 
					         ctwk(i)=cmplx(cos(phi),sin(phi))
 | 
				
			||||||
         phi=mod(phi+dphi,twopi)
 | 
					         phi=mod(phi+dphi,twopi)
 | 
				
			||||||
      enddo
 | 
					      enddo
 | 
				
			||||||
      csynct=ctwk*csync
 | 
					      csynct1=ctwk*csync1
 | 
				
			||||||
 | 
					      csynct2=ctwk*csync2
 | 
				
			||||||
      f0save=f0
 | 
					      f0save=f0
 | 
				
			||||||
   endif
 | 
					   endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -453,14 +459,14 @@ contains
 | 
				
			|||||||
      is=(i-1)*ncoh*nss
 | 
					      is=(i-1)*ncoh*nss
 | 
				
			||||||
      z1=0
 | 
					      z1=0
 | 
				
			||||||
      if(i1+is.ge.1) then
 | 
					      if(i1+is.ge.1) then
 | 
				
			||||||
         z1=sum(cd0(i1+is:i1+is+ncoh*nss-1)*conjg(csynct(is+1:is+ncoh*nss)))
 | 
					         z1=sum(cd0(i1+is:i1+is+ncoh*nss-1)*conjg(csynct1(is+1:is+ncoh*nss)))
 | 
				
			||||||
      endif
 | 
					      endif
 | 
				
			||||||
      z2=sum(cd0(i2+is:i2+is+ncoh*nss-1)*conjg(csynct(is+1:is+ncoh*nss)))
 | 
					      z2=sum(cd0(i2+is:i2+is+ncoh*nss-1)*conjg(csynct2(is+1:is+ncoh*nss)))
 | 
				
			||||||
      z3=sum(cd0(i3+is:i3+is+ncoh*nss-1)*conjg(csynct(is+1:is+ncoh*nss)))
 | 
					      z3=sum(cd0(i3+is:i3+is+ncoh*nss-1)*conjg(csynct1(is+1:is+ncoh*nss)))
 | 
				
			||||||
      z4=sum(cd0(i4+is:i4+is+ncoh*nss-1)*conjg(csynct(is+1:is+ncoh*nss)))
 | 
					      z4=sum(cd0(i4+is:i4+is+ncoh*nss-1)*conjg(csynct2(is+1:is+ncoh*nss)))
 | 
				
			||||||
      z5=0
 | 
					      z5=0
 | 
				
			||||||
      if(i5+is+ncoh*nss-1.le.np) then
 | 
					      if(i5+is+ncoh*nss-1.le.np) then
 | 
				
			||||||
         z5=sum(cd0(i5+is:i5+is+ncoh*nss-1)*conjg(csynct(is+1:is+ncoh*nss)))
 | 
					         z5=sum(cd0(i5+is:i5+is+ncoh*nss-1)*conjg(csynct1(is+1:is+ncoh*nss)))
 | 
				
			||||||
      endif
 | 
					      endif
 | 
				
			||||||
      s1=s1+abs(z1)/(8*nss)
 | 
					      s1=s1+abs(z1)/(8*nss)
 | 
				
			||||||
      s2=s2+abs(z2)/(8*nss)
 | 
					      s2=s2+abs(z2)/(8*nss)
 | 
				
			||||||
@ -482,7 +488,7 @@ contains
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
   df=12000.0/nfft1
 | 
					   df=12000.0/nfft1
 | 
				
			||||||
   i0=nint(f0/df)
 | 
					   i0=nint(f0/df)
 | 
				
			||||||
   ih=nint( ( f0 + 1.2*sigbw/2.0 )/df)
 | 
					   ih=nint( ( f0 + 1.3*sigbw/2.0 )/df)
 | 
				
			||||||
   nbw=ih-i0+1
 | 
					   nbw=ih-i0+1
 | 
				
			||||||
   c1=0.
 | 
					   c1=0.
 | 
				
			||||||
   c1(0)=c_bigfft(i0)
 | 
					   c1(0)=c_bigfft(i0)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user