46 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
| subroutine genwspr_fsk8(msg,msgsent,itone)
 | |
| 
 | |
| ! Encode a WSPR-LF 8-FSK message, producing array itone().
 | |
|   
 | |
|   use crc
 | |
|   include 'wspr_fsk8_params.f90'
 | |
| 
 | |
|   character*22 msg,msgsent
 | |
|   character*60 cbits
 | |
|   integer*1,target :: idat(9)
 | |
|   integer*1 msgbits(KK),codeword(3*ND)
 | |
|   integer itone(NN)
 | |
|   integer icos7(0:6)
 | |
|   data icos7/2,5,6,0,4,1,3/                  !Costas 7x7 tone pattern
 | |
| 
 | |
|   idat=0
 | |
|   call wqencode(msg,ntype0,idat)             !Source encoding
 | |
|   id7=idat(7)
 | |
|   if(id7.lt.0) id7=id7+256
 | |
|   id7=id7/64
 | |
|   icrc=crc10(c_loc(idat),9)                  !Compute the 10-bit CRC
 | |
|   idat(8)=icrc/256                           !Insert CRC into idat(8:9)
 | |
|   idat(9)=iand(icrc,255)
 | |
|   call wqdecode(idat,msgsent,itype)
 | |
| 
 | |
|   write(cbits,1004) idat(1:6),id7,icrc
 | |
| 1004 format(6b8.8,b2.2,b10.10)
 | |
|   read(cbits,1006) msgbits
 | |
| 1006 format(60i1)
 | |
| 
 | |
| !  call chkcrc10(msgbits,nbadcrc)
 | |
| !  print*,msgsent,itype,crc10_check(c_loc(idat),9),nbadcrc
 | |
|   
 | |
|   call encode300(msgbits,codeword)      !Encode the test message
 | |
| 
 | |
| ! Message structure: S7 D100 S7
 | |
|   itone(1:7)=icos7
 | |
|   itone(NN-6:NN)=icos7
 | |
|   do j=1,ND
 | |
|      i=3*j -2
 | |
|      itone(j+7)=codeword(i)*4 + codeword(i+1)*2 + codeword(i+2)
 | |
|   enddo
 | |
| 
 | |
|   return
 | |
| end subroutine genwspr_fsk8
 | 
