34 lines
		
	
	
		
			785 B
		
	
	
	
		
			Fortran
		
	
	
	
	
	
		
		
			
		
	
	
			34 lines
		
	
	
		
			785 B
		
	
	
	
		
			Fortran
		
	
	
	
	
	
| 
								 | 
							
								program mfsk
							 | 
						||
| 
								 | 
							
								! Compute probability of symbol error for non-coherent MFSK
							 | 
						||
| 
								 | 
							
								  implicit real*16 (a-h,o-z)
							 | 
						||
| 
								 | 
							
								  integer*8 binomial
							 | 
						||
| 
								 | 
							
								  integer x,s,XX,NN,M
							 | 
						||
| 
								 | 
							
								  real*16 hypergeo, snr, term, sum
							 | 
						||
| 
								 | 
							
								  character arg*8
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  nargs=iargc()
							 | 
						||
| 
								 | 
							
								  if(nargs.ne.1) then
							 | 
						||
| 
								 | 
							
								     print*,'Probability of symbol error for noncoherent MFSK'
							 | 
						||
| 
								 | 
							
								     print*,'Usage:    mfsk   M'
							 | 
						||
| 
								 | 
							
								     print*,'Example:  mfsk  64'
							 | 
						||
| 
								 | 
							
								     go to 999
							 | 
						||
| 
								 | 
							
								  endif
							 | 
						||
| 
								 | 
							
								  call getarg(1,arg)
							 | 
						||
| 
								 | 
							
								  read(arg,*) M
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  write(*,1012) 
							 | 
						||
| 
								 | 
							
								1012 format('Es/No  P(symbol error)'/  &
							 | 
						||
| 
								 | 
							
								             '----------------------')
							 | 
						||
| 
								 | 
							
								  do isnr=0,40
							 | 
						||
| 
								 | 
							
								    esno=10**(isnr/2.0/10.0)
							 | 
						||
| 
								 | 
							
								    hsum=0.d0
							 | 
						||
| 
								 | 
							
								    do k=1,M-1
							 | 
						||
| 
								 | 
							
								      h=binomial(M-1,k)
							 | 
						||
| 
								 | 
							
								      h=h*((-1)**(k+1))/(k+1)
							 | 
						||
| 
								 | 
							
								      h=h*exp(-esno*k/(k+1))
							 | 
						||
| 
								 | 
							
								      hsum=hsum + h
							 | 
						||
| 
								 | 
							
								    enddo
							 | 
						||
| 
								 | 
							
								    write(*,'(f4.1,4x,e10.4)') isnr/2.0, hsum
							 | 
						||
| 
								 | 
							
								  enddo
							 | 
						||
| 
								 | 
							
								999 end program mfsk
							 |