52 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
		
		
			
		
	
	
			52 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
| 
								 | 
							
								subroutine genfsk4hf(msgbits,f0,id,c)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  parameter (KK=84)                     !Information bits (72 + CRC12)
							 | 
						||
| 
								 | 
							
								  parameter (ND=84)                     !Data symbols: LDPC (168,84), r=1/2
							 | 
						||
| 
								 | 
							
								  parameter (NS=12)                     !Sync symbols (3 @ 4x4 Costas arrays)
							 | 
						||
| 
								 | 
							
								  parameter (NR=2)                      !Ramp up/down
							 | 
						||
| 
								 | 
							
								  parameter (NN=NR+NS+ND)               !Total symbols (98)
							 | 
						||
| 
								 | 
							
								  parameter (NSPS=2688/84)              !Samples per symbol (32)
							 | 
						||
| 
								 | 
							
								  parameter (NZ=NSPS*NN)                !Samples in baseband waveform (3136)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  complex c(0:NZ-1)                     !Complex waveform
							 | 
						||
| 
								 | 
							
								  integer id0(NN)                       !2-bit data (values 0-3), all symbols
							 | 
						||
| 
								 | 
							
								  integer id(ND)                        !2-bit data (values 0-3), data only
							 | 
						||
| 
								 | 
							
								  integer*1 msgbits(KK),codeword(2*ND)
							 | 
						||
| 
								 | 
							
								  integer icos4(4)                      !4x4 Costas array
							 | 
						||
| 
								 | 
							
								  data icos4/0,1,3,2/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  twopi=8.0*atan(1.0)
							 | 
						||
| 
								 | 
							
								  fs=12000.0/84.0
							 | 
						||
| 
								 | 
							
								  dt=1.0/fs
							 | 
						||
| 
								 | 
							
								  baud=1.0/(NSPS*dt)
							 | 
						||
| 
								 | 
							
								  call encode168(msgbits,codeword)      !Encode the test message
							 | 
						||
| 
								 | 
							
								  id0(1)=0                               !Ramp-up
							 | 
						||
| 
								 | 
							
								  id0(2:5)=icos4                         !First Costas array
							 | 
						||
| 
								 | 
							
								  id0(48:51)=icos4                       !Second
							 | 
						||
| 
								 | 
							
								  id0(94:97)=icos4                       !Third
							 | 
						||
| 
								 | 
							
								  id0(98)=0                              !Ramp down
							 | 
						||
| 
								 | 
							
								  j=5
							 | 
						||
| 
								 | 
							
								  do i=1,84                             !Data symbols
							 | 
						||
| 
								 | 
							
								     id(i)=2*codeword(2*i-1) + codeword(2*i)
							 | 
						||
| 
								 | 
							
								     j=j+1
							 | 
						||
| 
								 | 
							
								     if(i.eq.43) j=j+4
							 | 
						||
| 
								 | 
							
								     id0(j)=id(i)
							 | 
						||
| 
								 | 
							
								  enddo
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								! Generate the 4-FSK waveform, low tone at f=0
							 | 
						||
| 
								 | 
							
								  c=0.
							 | 
						||
| 
								 | 
							
								  phi=0.d0
							 | 
						||
| 
								 | 
							
								  k=-1
							 | 
						||
| 
								 | 
							
								  do j=1,NN
							 | 
						||
| 
								 | 
							
								     dphi=twopi*(f0+id0(j)*baud)*dt
							 | 
						||
| 
								 | 
							
								     do i=1,NSPS
							 | 
						||
| 
								 | 
							
								        k=k+1
							 | 
						||
| 
								 | 
							
								        phi=phi+dphi
							 | 
						||
| 
								 | 
							
								        if(phi.gt.twopi) phi=phi-twopi
							 | 
						||
| 
								 | 
							
								        c(k)=cmplx(cos(phi),sin(phi))
							 | 
						||
| 
								 | 
							
								     enddo
							 | 
						||
| 
								 | 
							
								  enddo
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return
							 | 
						||
| 
								 | 
							
								end subroutine genfsk4hf
							 |