mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 04:50:34 -04:00 
			
		
		
		
	More progress on q3list decodes in NA VHF contest mode, Q65-60A.
This commit is contained in:
		
							parent
							
								
									871198c44f
								
							
						
					
					
						commit
						7bf6a6123d
					
				| @ -45,6 +45,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample) | ||||
|   real ss(184,NSMAX) | ||||
|   logical baddata,newdat65,newdat9,single_decode,bVHF,bad0,newdat,ex | ||||
|   integer*2 id2(NTMAX*12000) | ||||
|   integer nqf(20) | ||||
|   type(params_block) :: params | ||||
|   real*4 dd(NTMAX*12000) | ||||
|   character(len=20) :: datetime | ||||
| @ -211,7 +212,22 @@ subroutine multimode_decoder(ss,id2,params,nfsample) | ||||
|           params%nfa,params%nfb,logical(params%nclearave),               & | ||||
|           single_decode,logical(params%nagain),params%max_drift,         & | ||||
|           logical(params%newdat),params%emedelay,mycall,hiscall,hisgrid, & | ||||
|           params%nQSOProgress,ncontest,logical(params%lapcqonly),navg0) | ||||
|           params%nQSOProgress,ncontest,logical(params%lapcqonly),navg0,nqf) | ||||
| 
 | ||||
| !### | ||||
|      do k=1,20 | ||||
|         if(nqf(k).eq.0) exit | ||||
|         nqd=1 | ||||
|         navg0=0 | ||||
|         ntol=5 | ||||
|         call my_q65%decode(q65_decoded,id2,nqd,params%nutc,params%ntr,      & | ||||
|              params%nsubmode,nqf(k),ntol,params%ndepth,        & | ||||
|              params%nfa,params%nfb,logical(params%nclearave),               & | ||||
|              .true.,.true.,params%max_drift,         & | ||||
|              .false.,params%emedelay,mycall,hiscall,hisgrid, & | ||||
|              params%nQSOProgress,ncontest,logical(params%lapcqonly),navg0,nqf) | ||||
|      enddo | ||||
| !### | ||||
|      call timer('dec_q65 ',1) | ||||
|      close(17) | ||||
|      go to 800 | ||||
|  | ||||
| @ -14,6 +14,7 @@ subroutine map65_mmdec(nutc,id2,nqd,nsubmode,nfa,nfb,nfqso,ntol,newdat,   & | ||||
| 
 | ||||
|   logical single_decode,bVHF,lnewdat,lagain,lclearave,lapcqonly | ||||
|   integer*2 id2(300*12000) | ||||
|   integer nqf(20) | ||||
| !  type(params_block) :: params | ||||
|   character(len=12) :: mycall, hiscall | ||||
|   character(len=6) :: hisgrid | ||||
| @ -43,7 +44,7 @@ subroutine map65_mmdec(nutc,id2,nqd,nsubmode,nfa,nfb,nfqso,ntol,newdat,   & | ||||
|   call timer('dec_q65 ',0) | ||||
|   call my_q65%decode(q65_decoded,id2,nqd,nutc,ntrperiod,nsubmode,nfqso,       & | ||||
|        ntol,ndepth,nfa,nfb,lclearave,single_decode,lagain,max_drift,lnewdat,  & | ||||
|        emedelay,mycall,hiscall,hisgrid,nQSOProgress,ncontest,lapcqonly,navg0) | ||||
|        emedelay,mycall,hiscall,hisgrid,nQSOProgress,ncontest,lapcqonly,navg0,nqf) | ||||
|   call timer('dec_q65 ',1) | ||||
| 
 | ||||
|   return | ||||
|  | ||||
| @ -33,7 +33,7 @@ contains | ||||
|   subroutine decode(this,callback,iwave,nqd0,nutc,ntrperiod,nsubmode,nfqso,  & | ||||
|        ntol,ndepth,nfa0,nfb0,lclearave,single_decode,lagain,max_drift0,      & | ||||
|        lnewdat0,emedelay,mycall,hiscall,hisgrid,nQSOprogress,ncontest,       & | ||||
|        lapcqonly,navg0) | ||||
|        lapcqonly,navg0,nqf) | ||||
| 
 | ||||
| ! Top-level routine that organizes the decoding of Q65 signals | ||||
| ! Input:  iwave            Raw data, i*2 | ||||
| @ -74,24 +74,26 @@ contains | ||||
|     character*80 fmt | ||||
|     integer*2 iwave(NMAX)                 !Raw data | ||||
|     real, allocatable :: dd(:)            !Raw data | ||||
|     real xdtdecodes(100) | ||||
|     real f0decodes(100) | ||||
|     integer dat4(13)                      !Decoded message as 12 6-bit integers | ||||
|     integer dgen(13) | ||||
|     integer nq65param(3) | ||||
|     integer nqf(20) | ||||
|     integer stageno                       !Added by W3SZ | ||||
|     integer time | ||||
|     logical lclearave,lnewdat0,lapcqonly,unpk77_success | ||||
|     logical single_decode,lagain,ex | ||||
|     logical single_decode,lagain | ||||
|     complex, allocatable :: c00(:)        !Analytic signal, 6000 Sa/s | ||||
|     complex, allocatable :: c0(:)         !Analytic signal, 6000 Sa/s | ||||
|     type(q3list) callers(MAX_CALLERS) | ||||
| 
 | ||||
|      | ||||
| ! Start by setting some parameters and allocating storage for large arrays | ||||
|     call sec0(0,tdecode) | ||||
|     stageno=0 | ||||
|     ndecodes=0 | ||||
|     decodes=' ' | ||||
|     f0decodes=0. | ||||
|     xdtdecodes=0. | ||||
|     nfa=nfa0 | ||||
|     nfb=nfb0 | ||||
|     nqd=nqd0 | ||||
| @ -183,7 +185,7 @@ contains | ||||
|     if(ichar(hiscall(1:1)).eq.0) hiscall=' ' | ||||
|     if(ichar(hisgrid(1:1)).eq.0) hisgrid=' ' | ||||
|     ncw=0 | ||||
|     if(nqd.eq.1 .or. lagain) then | ||||
|     if(nqd.eq.1 .or. lagain .or. ncontest.eq.1) then | ||||
|        if(ncontest.eq.1) then | ||||
|           call q65_set_list2(mycall,hiscall,hisgrid,callers,nhist2,   & | ||||
|                codewords,ncw) | ||||
| @ -214,6 +216,7 @@ contains | ||||
|        f0dec=f0 | ||||
|        go to 100 | ||||
|     endif | ||||
|     if(ncontest.eq.1 .and. lagain) go to 100 | ||||
| 
 | ||||
| ! Prepare for a single-period decode with iaptype = 0, 1, 2, or 4 | ||||
|     jpk0=(xdt+1.0)*6000                      !Index of nominal start of signal | ||||
| @ -318,6 +321,7 @@ contains | ||||
|           ndecodes=min(ndecodes+1,100) | ||||
|           decodes(ndecodes)=decoded | ||||
|           f0decodes(ndecodes)=f0dec | ||||
|           xdtdecodes(ndecodes)=dtdec | ||||
|           call q65_snr(dat4,dtdec,f0dec,mode_q65,snr2) | ||||
|           nsnr=nint(snr2) | ||||
|           call this%callback(nutc,snr1,nsnr,dtdec,f0dec,decoded,    & | ||||
| @ -363,6 +367,24 @@ contains | ||||
|           fdiff=f0-f0decodes(i) | ||||
|           if(fdiff.gt.-baud*mode_q65 .and. fdiff.lt.65*baud*mode_q65) go to 800 | ||||
|        enddo | ||||
| 
 | ||||
| !###  TEST REGION | ||||
|        if(ncontest.eq.-1) then | ||||
|           call timer('q65_dec0',0) | ||||
| ! Call top-level routine in q65 module: establish sync and try for a | ||||
| ! q3 or q0 decode. | ||||
|           call q65_dec0(iavg,iwave,ntrperiod,nint(f0),ntol,lclearave,  & | ||||
|                emedelay,xdt,f0,snr1,width,dat4,snr2,idec,stageno) | ||||
|           call timer('q65_dec0',1) | ||||
|           write(*,3001) icand,nint(f0),xdt,idec | ||||
| 3001      format('a',i3,i5,f6.1,i3) | ||||
|           if(idec.ge.0) then | ||||
|              dtdec=xdt                    !We have a q3 or q0 decode at f0 | ||||
|              f0dec=f0 | ||||
|              go to 200 | ||||
|           endif | ||||
|        endif | ||||
| !### | ||||
|        jpk0=(xdt+1.0)*6000                   !Index of nominal start of signal | ||||
|        if(ntrperiod.le.30) jpk0=(xdt+0.5)*6000  !For shortest sequences | ||||
|        if(jpk0.lt.0) jpk0=0 | ||||
| @ -452,9 +474,31 @@ contains | ||||
| 800    continue | ||||
|     enddo  ! icand | ||||
|     if(iavg.eq.0 .and.navg(iseq).ge.2 .and. iand(ndepth,16).ne.0) go to 50 | ||||
| 
 | ||||
| 900 close(24) | ||||
|     return | ||||
| 
 | ||||
|     if(ncontest.ne.1 .or. lagain) go to 999 | ||||
|     if(ntrperiod.ne.60 .or. nsubmode.ne.0) go to 999 | ||||
| 
 | ||||
| ! This is first time here, and we're running Q65-60A in NA VHF Contest mode. | ||||
| ! Return a list of potential sync frequencies at which to try q3 decoding. | ||||
| 
 | ||||
|     k=0 | ||||
|     nqf=0 | ||||
|     bw=baud*mode_q65*65 | ||||
|     do i=1,ncand | ||||
| !       snr1=candidates(i,1) | ||||
| !       xdt= candidates(i,2) | ||||
|        f0 = candidates(i,3) | ||||
|        do j=1,ndecodes          ! Already decoded one at or near this frequency? | ||||
|           fj=f0decodes(j) | ||||
|           if(f0.gt.fj-5.0 .and. f0.lt.fj+bw+5.0) go to 990 | ||||
|        enddo | ||||
|        k=k+1 | ||||
|        nqf(k)=nint(f0) | ||||
| 990    continue | ||||
|     enddo | ||||
| 
 | ||||
| 999 return | ||||
|   end subroutine decode | ||||
| 
 | ||||
| end module q65_decode | ||||
|  | ||||
| @ -618,7 +618,7 @@ subroutine q65_dec1(s3,nsubmode,b90ts,esnodb,irc,dat4,decoded) | ||||
|      irc=-1 | ||||
|   endif | ||||
|   nrc=irc | ||||
|    | ||||
| 
 | ||||
|   return | ||||
| end subroutine q65_dec1 | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user