mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-29 20:10:28 -04:00 
			
		
		
		
	Cleaned up syncmsk144
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6718 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
		
							parent
							
								
									21bd398053
								
							
						
					
					
						commit
						05a311be59
					
				| @ -71,7 +71,7 @@ subroutine syncmsk144(cdat,npts,metric,msgreceived,fest) | ||||
|   endif | ||||
| 
 | ||||
| ! Coarse carrier frequency sync | ||||
| ! look for tones near 2k and 4k in the analytic signal spectrum  | ||||
| ! look for tones near 2k and 4k in the (analytic signal)**2 spectrum  | ||||
| ! search range for coarse frequency error is +/- 100 Hz | ||||
|   fs=12000.0 | ||||
|   nfft=6000      !using a zero-padded fft to get 2 Hz bins | ||||
| @ -103,20 +103,17 @@ subroutine syncmsk144(cdat,npts,metric,msgreceived,fest) | ||||
|     tot=sum(tonespec(901:1101)) | ||||
|     q1=200*al/(tot-tonespec(ilpk)) | ||||
|   endif | ||||
|   fdiff=(ihpk-ilpk)*df | ||||
| 
 | ||||
|   write(78,*) "Coarse frequency error: ",ferr | ||||
|   write(78,*) "Tone / avg            : ",q1 | ||||
|   write(78,*) "Tone separation       : ",fdiff | ||||
|   fdiff=(ihpk-ilpk)*df  | ||||
| 
 | ||||
| ! remove coarse freq error - should now be within a few Hz | ||||
|   call tweak1(cdat,npts,-(1500+ferr),cdat) | ||||
| 
 | ||||
| ! correlate with sync word waveform | ||||
| ! attempt frame synchronization | ||||
| ! correlate with sync word waveforms - the resulting complex | ||||
| ! correlations provide all synch information. | ||||
|   cc=0 | ||||
|   cc1=0 | ||||
|   cc2=0 | ||||
|   cc3=0 | ||||
|   do i=1,npts-448-41 | ||||
|     cc1(i)=sum(cdat(i:i+41)*conjg(cb)) | ||||
|     cc2(i)=sum(cdat(i+56*6:i+56*6+41)*conjg(cb)) | ||||
| @ -127,39 +124,38 @@ subroutine syncmsk144(cdat,npts,metric,msgreceived,fest) | ||||
|   ic1=iloc(1) | ||||
|   iloc=maxloc(dd)            | ||||
|   ic2=iloc(1) | ||||
|    | ||||
|   write(78,*) "Syncs: ic1,ic2 ",ic1,ic2 | ||||
| ! the goal is for ic to be the index of the first sample of the message | ||||
| ! This parameter could be dithered | ||||
|   ic=ic2 | ||||
| 
 | ||||
| !  do i=1,npts-448-41 | ||||
| !    write(78,*) i,abs(cc1(i)),abs(cc2(i)),abs(cc(i)),dd(i),abs(cc3(i)) | ||||
| !  enddo | ||||
| 
 | ||||
| ! Estimate fine frequency error and initial carrier phase using  | ||||
| ! difference and sum of sync-word phases. Only frequency error is used. | ||||
|   cca=sum(cdat(ic:ic+41)*conjg(cb)) | ||||
|   ccb=sum(cdat(ic+56*6:ic+56*6+41)*conjg(cb)) | ||||
|   phase0=atan2(imag(cca+ccb),real(cca+ccb)) | ||||
|   cfac=ccb*conjg(cca) | ||||
|   ferr2=atan2(imag(cfac),real(cfac))/(twopi*56*6*dt) | ||||
|   write(78,*) "Fine frequency error: ",ferr2 | ||||
|   write(78,*) "Coarse Carrier phase       : ",phase0 | ||||
| 
 | ||||
| ! Final estimate of the carrier frequency - returned to the calling program | ||||
|   fest=1500+ferr+ferr2 | ||||
|   write(78,*) "Estimated f0        : ",fest | ||||
| 
 | ||||
| ! Remove fine frequency error | ||||
|   call tweak1(cdat,npts,-ferr2,cdat) | ||||
| 
 | ||||
| ! Estimate final carrier phase | ||||
| ! Estimate final frequency error and carrier phase using  | ||||
| ! difference and sum of sync-word phases | ||||
|   cca=sum(cdat(ic:ic+41)*conjg(cb)) | ||||
|   ccb=sum(cdat(ic+56*6:ic+56*6+41)*conjg(cb)) | ||||
|   cfac=ccb*conjg(cca) | ||||
|   ffin=atan2(imag(cfac),real(cfac))/(twopi*56*6*dt) | ||||
|   phase0=atan2(imag(cca+ccb),real(cca+ccb)) | ||||
|   write(78,*) "Final freq    error: ",ffin | ||||
| 
 | ||||
| ! Remove the static phase error from the data | ||||
|   cfac=cmplx(cos(phase0),sin(phase0)) | ||||
|   cdat=cdat*conjg(cfac) | ||||
| 
 | ||||
| ! we hope that we are synced. For now we use only the frame | ||||
| ! that starts at ic | ||||
|   do i=1,864 | ||||
|     ii=ic+i-1 | ||||
|     if( ii .gt. npts ) then | ||||
| @ -182,7 +178,6 @@ subroutine syncmsk144(cdat,npts,metric,msgreceived,fest) | ||||
|   nbadsync=sum(s8*(2*hardbits(1:8)-1)) | ||||
|   nbadsync=nbadsync+sum(s8*(2*hardbits(57:57+7)-1)) | ||||
|   nbadsync=16-nbadsync | ||||
|   write(78,*) nbadsync," bad sync bits" | ||||
| 
 | ||||
|   hardword(1:48)=hardbits(9:9+47)   | ||||
|   hardword(49:128)=hardbits(65:65+80-1)   | ||||
| @ -202,9 +197,8 @@ subroutine syncmsk144(cdat,npts,metric,msgreceived,fest) | ||||
|   unscrambledsoftbits(2:128:2)=lratio(65:128)  | ||||
| 
 | ||||
|   max_iterations=20 | ||||
|   max_dither=100 | ||||
|   max_dither=50 | ||||
|   call ldpc_decode(unscrambledsoftbits, decoded, max_iterations, niterations, max_dither, ndither) | ||||
|   write(78,*) 'Decoder used ',niterations,'iterations and ',ndither,' dither trials.' | ||||
| 
 | ||||
|   if( niterations .lt. 0 ) then  | ||||
|     msgreceived=' ' | ||||
| @ -239,6 +233,8 @@ subroutine syncmsk144(cdat,npts,metric,msgreceived,fest) | ||||
|       enddo | ||||
|       call unpackmsg(i4Dec6BitWords,msgreceived) | ||||
|     endif | ||||
| 
 | ||||
| write(78,*) fest,nbadsync,phase0,niterations,ndither,i1hashdec,i1Dec8BitBytes(10),msgreceived | ||||
| return | ||||
| 
 | ||||
| end subroutine syncmsk144 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user