mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 13:30:52 -05:00 
			
		
		
		
	
		
			
	
	
		
			56 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
		
		
			
		
	
	
			56 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
| 
								 | 
							
								subroutine geniscat(msg,msgsent,itone)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								! Generate an ISCAT waveform.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  parameter (NSZ=1291)
							 | 
						||
| 
								 | 
							
								  character msg*28,msgsent*28                    !Message to be transmitted
							 | 
						||
| 
								 | 
							
								  integer imsg(30)
							 | 
						||
| 
								 | 
							
								  integer itone(NSZ)
							 | 
						||
| 
								 | 
							
								  real*8 sps
							 | 
						||
| 
								 | 
							
								  character c*42
							 | 
						||
| 
								 | 
							
								  integer icos(4)                                !Costas array
							 | 
						||
| 
								 | 
							
								  data icos/0,1,3,2/
							 | 
						||
| 
								 | 
							
								  data nsync/4/,nlen/2/,ndat/18/
							 | 
						||
| 
								 | 
							
								  data c/'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ /.?@-'/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  sps=256.d0*12000.d0/11025.d0
							 | 
						||
| 
								 | 
							
								  nsym=int(30*12000.d0/sps)
							 | 
						||
| 
								 | 
							
								  nblk=nsync+nlen+ndat
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  do i=22,1,-1
							 | 
						||
| 
								 | 
							
								     if(msg(i:i).ne.' ' .and. msg(i:i).ne.char(0)) exit
							 | 
						||
| 
								 | 
							
								  enddo
							 | 
						||
| 
								 | 
							
								  nmsg=i
							 | 
						||
| 
								 | 
							
								  msglen=nmsg+1
							 | 
						||
| 
								 | 
							
								  k=0
							 | 
						||
| 
								 | 
							
								  kk=1
							 | 
						||
| 
								 | 
							
								  imsg(1)=40                                  !Always start with BOM char: '@'
							 | 
						||
| 
								 | 
							
								  do i=1,nmsg                                 !Define the tone sequence
							 | 
						||
| 
								 | 
							
								     imsg(i+1)=36                             !Illegal char set to blank
							 | 
						||
| 
								 | 
							
								     do j=1,42
							 | 
						||
| 
								 | 
							
								        if(msg(i:i).eq.c(j:j)) imsg(i+1)=j-1
							 | 
						||
| 
								 | 
							
								     enddo
							 | 
						||
| 
								 | 
							
								  enddo
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  do i=1,nsym                                 !Total symbols in 30 s 
							 | 
						||
| 
								 | 
							
								     j=mod(i-1,nblk)+1
							 | 
						||
| 
								 | 
							
								     if(j.le.nsync) then
							 | 
						||
| 
								 | 
							
								        itone(i)=icos(j)                      !Insert 4x4 Costas array
							 | 
						||
| 
								 | 
							
								     else if(j.gt.nsync .and. j.le.nsync+nlen) then
							 | 
						||
| 
								 | 
							
								        itone(i)=msglen                       !Insert message-length indicator
							 | 
						||
| 
								 | 
							
								        if(j.ge.nsync+2) then
							 | 
						||
| 
								 | 
							
								           n=msglen + 5*(j-nsync-1)
							 | 
						||
| 
								 | 
							
								           if(n.gt.41) n=n-42
							 | 
						||
| 
								 | 
							
								           itone(i)=n
							 | 
						||
| 
								 | 
							
								        endif
							 | 
						||
| 
								 | 
							
								     else
							 | 
						||
| 
								 | 
							
								        k=k+1
							 | 
						||
| 
								 | 
							
								        kk=mod(k-1,msglen)+1
							 | 
						||
| 
								 | 
							
								        itone(i)=imsg(kk)
							 | 
						||
| 
								 | 
							
								     endif
							 | 
						||
| 
								 | 
							
								  enddo
							 | 
						||
| 
								 | 
							
								  msgsent=msg
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return
							 | 
						||
| 
								 | 
							
								end subroutine geniscat
							 |