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
 | 
